今天看到yangtingkun在blog上遇到无法删除 db link的问题(http://yangtingkun.itpub.net/post/468/259496),我在半年前也遇到类似的问题,当时也作了简单的记录,现在贴出来,希望大家一起分析原因。
今天遇到一个很奇怪的问题
在linux as3+oracle9204配置高级复制时,新建了一个dblink,后来不知道做过什么操作,怎么也不能删除这个dblink
查找数据字典知道这个dblink是用户suk下的,非public类型。
--删除public 类型的db link失败
SQL> drop public database link link_new_suk;
drop public database link link_new_suk
ORA-02024:database link not found
--删除私有的db link失败
SQL> drop database link link_new_suk;
drop database link link_new_suk
ORA-02024:database link not found
--创建私有db link,也报错
SQL> create database link LINK_NEW_SUK
2 connect to "A" identified by "1"
3 using '1'
4 /
ORA-02011: duplicate database link name!
--查询数据字典,发现该db link的确存在
SQL> select * from link$;
OWNER# NAME CTIME HOST USERID PASSWORD FLAG AUTHUSR AUTHPWD
---------- -------------------------------------------------------------------------------- ----------- -------------------------------------------------------------------------------- ------------------------------ ------------------------------ ---------- ------------------------------ ------------------------------
1 ORANEW 2006-4-10 ? new SYSTEM SPACE6212 0
23 LINK_NEW_SUK 2006-4-11 é new SUK SUK 0
--从数据字典中删除db link
SQL> delete from link$ where owner#=23;
1 row deleted
SQL> commit;
--但创建时让人报错,看来db link的信息不只是在link$中存在
SQL> create database link LINK_NEW_SUK
2 connect to "A" identified by "1"
3 using '1'
4 /
ORA-02011: duplicate database link name!
--没办法,试试查询手工往link$插入一条db link的信息
SQL> insert into link$ values(23,'LINK_NEW_SUK',sysdate,'new','SUK','SUK',0,null,null);
1 row inserted
SQL> commit;
Commit complete
--此时删除成功
SQL> drop database link link_new_suk;
Database link dropped
--再次创建同名的db link也成功了
SQL>
SQL> create database link LINK_NEW_SUK
2 connect to "A" identified by "1"
3 using '1'
4 /
Database link created
SQL>
总结:
最后通过删除,然后再重新插入LINK$表的方式实现了删除数据库链接。
造成这种现象的原因现在也没有搞清楚,不排除BUG的可能。