ORA-01775:同义词的循环链

时间:2012-07-17 20:04:26

标签: oracle

我正在创建一个表(下面是代码) - 这是通过unix上的一些脚本执行的。该脚本还会创建一些同义词(不确定是什么/如何):

drop table BNS_SAA_MESSAGES;
CREATE TABLE BNS_SAA_MESSAGES
(
HostNumber varchar(50) NOT NULL,
SAAMessage varchar(2048) NOT NULL,
PRIMARY KEY (HostNumber)
);

我收到以下错误:

Processing bns_saa_messages
cat: cannot open bns_saa_messages.sql

Commit complete.

GRANT SELECT ON bns_saa_messages TO RL_ORDFX_RPT

GRANT SELECT ON bns_saa_messages TO RL_ORDFX_RPT
                *
ERROR at line 1:
ORA-01775: looping chain of synonyms


GRANT INSERT ON bns_saa_messages TO RL_ORDFX_RPT

GRANT INSERT ON bns_saa_messages TO RL_ORDFX_RPT
                *
ERROR at line 1:
ORA-01775: looping chain of synonyms


GRANT UPDATE ON bns_saa_messages TO RL_ORDFX_RPT

GRANT UPDATE ON bns_saa_messages TO RL_ORDFX_RPT
                *
ERROR at line 1:
ORA-01775: looping chain of synonyms


GRANT DELETE ON bns_saa_messages TO RL_ORDFX_RPT

GRANT DELETE ON bns_saa_messages TO RL_ORDFX_RPT
                *
ERROR at line 1:
ORA-01775: looping chain of synonyms


create public synonym bns_saa_messages for ORDMSO.bns_saa_messages

create public synonym bns_saa_messages for ORDMSO.bns_saa_messages
                      *
ERROR at line 1:
ORA-00955: name is already used by an existing object



Commit complete.

我用Google搜索了ORA-01775: looping chain of synonyms,这似乎意味着删除了一些东西但是有一个指向它的指针。我猜它发生在select期间,不再存在的'事物'。不确定这些东西是桌子还是别的东西。这是我从研究中收集的内容。

知道如何创建我的表吗?我试图多次执行SQL代码,但无济于事 - 我每次都得到同样的错误。

此表未创建:

SQL> select * from bns_saa_messages;
select * from bns_saa_messages
              *
ERROR at line 1:
ORA-01775: looping chain of synonyms

我已经看过以下这样的问题了,但它似乎没有帮助。也许你可以看到我没有看到的东西:
I get an ORA-01775: looping chain of synonyms error when I use sqlldr
How to debug ORA-01775: looping chain of synonyms?
ORA-01775: looping chain of synonyms but there are no synonyms

由于

:UPDATE:

根据克雷格的建议执行:select * from all_synonyms where synonym_name = 'BNS_SAA_MESSAGES';之后我得到:

OWNER                          SYNONYM_NAME
------------------------------ ------------------------------
TABLE_OWNER                    TABLE_NAME
------------------------------ ------------------------------
DB_LINK
--------------------------------------------------------------------------------
PUBLIC                         BNS_SAA_MESSAGES
ORDMSO                         BNS_SAA_MESSAGES

:更新:2
正在运行:select * from all_tables where table_name = 'BNS_SAA_MESSAGES';

SQL> select * from all_tables where table_name = 'BNS_SAA_MESSAGES';

no rows selected

2 个答案:

答案 0 :(得分:2)

我会运行它来查看同义词实际指向的位置:

select *
from all_synonyms
where synonym_name = 'BNS_SAA_MESSAGES'

我猜这个同义词指的是错误的TABLE_OWNER。

<强>更新

那桌子实际上在哪里?你可以使用:

找到它
select *
from all_tables
where table_name = 'BNS_SAA_MESSAGES'

如果table_owner不是'ORDMSO',那么您需要更新同义词以指向正确的位置或运行Create table ...脚本为ORDMSO。

<强> UPDATE2

您可以将创建表格...脚本作为ORDMSO运行吗?如果没有,您将需要拥有更高权限的人运行:

select *
from dba_tables
where table_name = 'BNS_SAA_MESSAGES'

找出表的确实位置,然后相应地更新同义词。

答案 1 :(得分:1)

看起来输出来自第二次运行,你暗示了;来自create public synonym的ORA-00955显示在某个地方之前完成(与您运行的all_synonyms查询一样),并且它显然存在于其他错误中。第一次运行时,你不会得到这些错误,但是每次运行都会出错。

如果您希望它可以重新运行,那么在删除表之前,第一个代码段应该删除公共同义词。

但是第一个片段似乎根本没有运行。 Oracle没有成功或失败的消息。唯一真正的线索是:

Processing bns_saa_messages
cat: cannot open bns_saa_messages.sql

哪个是shell脚本问题,而不是Oracle脚本问题。在没有看到shell脚本的情况下,很难说出什么是错误的,但我怀疑脚本是从各种来源构建一个临时的.sql文件,然后通过SQL * Plus运行它;但缺少重要的bns_saa_messages.sql文件。据推测,这应该是第一个片段;并且由于这似乎存在,这可能很简单,因为文件与脚本期望的名称不匹配,或者脚本正在执行cd并且文件位于错误的目录中,或者同样简单的事情。但也许不是......信息不足。