开发人员发了的问题,创建dblink后查询报错,你以为这要么是监听没起,要么就是服务名不对,其实不是。
直接通过conn xxx/xxx@jzshdev是可以连接的,正常没问题。这就排除了上述的可能原因。
怀疑开发是不是写错了?自己动手操作一下。
根据开发给的语句:
create public database link JZSHDEV connect to xxx identified BY “xxx” using ‘jzshdev’;
处理过程很简单,步骤如下:
SQL> conn xxx/xxx Connected. SQL> create public database link JZSHDEV connect to xxx identified BY "xxx" using 'jzshdev'; Database link created. ------dblink创建正常 SQL> select * from dual@jzshdev; select * from dual@jzshdev * ERROR at line 1: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor ----------此处查询确实报错了,奇怪。 SQL> drop public database link JZSHDEV; Database link dropped. ----删掉public dblink,尝试创建普通私有dblink看看 SQL> create database link JZSHDEV connect to xxx identified BY "xxx" using 'jzshdev'; create database link JZSHDEV connect to xxx identified BY "xxx" using 'jzshdev' * ERROR at line 1: ORA-02011: duplicate database link name ----竟然报了已存在,这个问题就很清楚了 SQL> select * from dual@jzshdev; select * from dual@jzshdev * ERROR at line 1: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor ----原先数据库用户下存在同名的普通dblink,而且这个dblink是有问题的,指向不对,所以报了错。查询的时候优先选择了普通dblink导致报错。 SQL> drop database link JZSHDEV; Database link dropped. ----问了开发,这个dblink没用可删,既然普通dblink没用,那就删除,重新创建给public dblink就行了。 SQL> create public database link JZSHDEV connect to xxx identified BY "xxx" using 'jzshdev'; Database link created. SQL> select * from dual@jzshdev; D - X ----查询正常。
复制
总结提示:oracle的dblink分为public dblink和普通私有dblink的名字可以相同,默认优先使用普通私有dblink。
其它常见的错误原因参考:https://dbamarco.wordpress.com/2023/09/28/connecting-to-an-oracle-database-what-could-possible-go-wrong/
最后修改时间:2023-10-09 13:43:35
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。