我正在创建一个表(下面是代码) - 这是通过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
答案 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
并且文件位于错误的目录中,或者同样简单的事情。但也许不是......信息不足。