Oracle出现ORA-01775: 同义词的循环链问题

一、原因

出现同义词的循环链问题是因为存在同义词,但同义词没有相应的对象:对应的表、对应的过程、对应的方法等对象被删除了。

有以下这几种情况:①删除了数据库对象,但是没有删除对应的同义词。②删除一个用户,但没有删除这个用户中相关的同名。③创建同名时,同名对应的数据库对象已经被删掉了。

我就是第一种情况,删除一个过程,忘记删除其同义词了

二、解决办法

1.查找是否有循环的同义词

select * from dba_synonyms where table_owner='HIS'  and synonym_name<>table_name;

这里的HIS填自己数据库的用户名,发现表里没有记录

2.则查找同义词没有对象的数据库对象

select * from dba_synonyms where table_owner='HIS'
and
synonym_name in
(select a.synonym_name from dba_synonyms a where a.table_owner='HIS'
minus select object_name from user_objects)

发现表里有记录,我这里有两条。

3.接下来,把查询出来的结果进行查询表

select * from GETNEXTQUEUE;

GETNEXTQUEUE就是第二个步骤中查找出来的其中一条记录名称。执行这条SQL语句,发现弹出ORA-01775: 同义词的循环链:

4.添加相应的对象或者把这个同义词删除

①缺少这个对象,可以选择新增这个同义词对象

create table table_name();

缺少这个表就新增表,我这里是缺少这个方法,所以新增这个名字的方法:

CREATE OR REPLACE Function GETNEXTQUEUE();

②删除这个名字的同义词

drop public synonym GETNEXTQUEUE;

最后记得编译无效对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值