oracle对dblink和同义词的优先读取权

小卷 2011-12-1 2,070 views

今天排查一个plsql死机的问题时,意外发现:

一般情况下,我们想要跨实例访问表的时候,如果两个数据库实例在同一台服务器上,采用的方式是直接建立同义词;而如果两个实例在不同服务器下,则一般采取dblink方式,在dblink的基础上再建立相应的同义词;

但是否有考虑过,如果当两个实例在同一台服务器上,而你又把这两种方式都建立的时候,oracle默认会先取什么?

今天因为一个bug,仔细研究了一下它的默认优先权,发现原来oracle默认是先去取dblink下的同义词,而且oracle的处理方式很奇怪,当你在plsql中将鼠标光标放置在该同义词上时,它实际已经开始读取识别该文字是不是一张表等此类操作了。

在这种情况下,当你的dblink不小心链接了错误的ip时,你会发现你在plsql里仅仅只是把光标放置在这个同义词上,plsql就直接挂了;

下次如果有人遇到放置在表名上,直接plsql无响应的,请注意排查下此类情况,是否同义词和dblink建重了,并且dblink链接出错了。

今天为了这个问题,排查了半天,结果发现原来如此!真相往往就是这么简单,但又让你很蛋疼!


    欢迎拍砖!