暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

通过同义词+DBLINK多次跳转后存储过程插入远端表报ORA-00980:同义词转换不再有效

原创 乔尼Zzz 2024-01-11
452

问题描述:

这个问题出自项目上一个跨安全网段更新数据的需求:

0

一共有三套数据库,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:

0

但是通过存储过程调用就会提示报错:ORA-00980:同义词转换不再有效。

0


解决方法:

将DB2上的dblink修改为public dblink,重编译存过后能够正常使用

具体原因不是特别清楚,最奇怪的是存过编译通过后,将DB2上的public dblink重建为schema私有dblink后,DB1上的PROD1存过还是能够正常使用,但是重编译后又无法成果编译。

看有没有大佬能够解释解释

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论