我创建了几个数据库链接。有些是共享的,有些则不是。
我创建了共享数据库链接:
CREATE SHARED DATABASE LINK dblink_name CONNECT TO username IDENTIFIED BY password AUTHENTICATED BY schema_name IDENTIFIED BY password USING 'service_name';
我创建了Normal DBlink:
create database link dblink_name connect to username identified by password using service_name;
有没有办法可以识别创建的dblink是否是共享模式。
答案 0 :(得分:1)
没有简单的方法来检查数据字典以确定链接是否共享。下面是两个解决方法,使用SYS.LINK $和DBMS_METADATA,但它们都有问题。
未记录的表SYS.LINK $在位图中包含此信息,正如Solomon Yakobson在this thread中所解释的那样:
select name from sys.link$ where bitand(flag,1) = 1;
但该表包含密码哈希值,只能由SYS查看。您可以向该表授予权限,这可能会引起一些安全问题。或者在它上面创建一个视图,然后授予该视图,尽管通常不应该在SYS模式中创建对象。
包DBMS_METADATA重新创建链接DDL,可用于检查“SHARED”关键字。
select owner, db_link
from dba_db_links
where lower(dbms_metadata.get_ddl('DB_LINK', db_link, owner)) like '%create shared%';
此解决方案可能很慢,尤其是在系统具有大量数据库链接的情况下。在源代码中搜索文本字符串可能不可靠。根据{{3}}中的语法图,CREATE
和SHARED
之间没有其他关键字,但可能会发生变化,或者可能存在未记录的功能或行为。