问题描述:
这个问题出自项目上一个跨安全网段更新数据的需求:
一共有三套数据库,db1在内网网段,db2在外网前置网段,db3在外部网段。需要通过db1上的一个定时存储过程任务将查询通过db2的同义词中转一下后写入db3的表。
测试环境还原:
DB3:
create user sch3 identified by sch3; grant resource,connect to sch3; create table sch3.table1 as select object_id,object_name from dba_objects;DB2:
create user sch2 identified by sch2; grant resource,connect,create database link,create synonym to sch2; conn sch2/sch2 create database link d2 connect to sch3 identified by sch3 using 'db3'; create synonym syn2 for table1@d2; select * from syn2; --正常 insert into syn2 values (123,'test'); --正常DB3:
create user sch1 identified by sch1; grant resource,connect,create database link,create synonym to sch1; conn sch1/sch1 create database link d1 connect to sch2 identified by sch2 using 'db2'; create synonym syn1 for syn2@d2; select * from syn1; --正常 insert into syn1 values (345,'test'); --正常 create or replace procedure prod1 is
BEGIN
insert into syn1
select object_id,object_name from dba_objects;
END;
现象是DB1上能能够查询插入DB3的table1:
但是通过存储过程调用就会提示报错:ORA-00980:同义词转换不再有效。
解决方法:
将DB2上的dblink修改为public dblink,重编译存过后能够正常使用
具体原因不是特别清楚,最奇怪的是存过编译通过后,将DB2上的public dblink重建为schema私有dblink后,DB1上的PROD1存过还是能够正常使用,但是重编译后又无法成果编译。
看有没有大佬能够解释解释
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




