1

我正在创建一个表(下面是代码) - 这是通过 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.

我用谷歌搜索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

我已经查看了以下问题,但似乎没有帮助。也许您可以看到我看不到的东西:
当我使用 sqlldr 时出现 ORA-01775:循环同义词链错误
如何调试 ORA-01775:循环同义词链?
ORA-01775: 循环同义词链但没有同义词

谢谢

:更新:

执行后: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
4

3 回答 3

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”,那么您需要更新同义词以指向正确的位置,或者以 ORDMSO 身份运行 Create table... 脚本。

更新2

您可以将 Create table... 脚本作为 ORDMSO 运行吗?如果没有,您将需要让具有更高权限的人运行:

select *
from dba_tables
where table_name = 'BNS_SAA_MESSAGES'

找出表格的真正位置,然后相应地更新同义词。

于 2012-07-17T20:20:50.987 回答
1

看起来输出来自第二次运行,您暗示了这一点;节目中的 ORA-00955create public synonym在某处之前已经完成(就像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并且文件位于错误的目录中,或者同样微不足道的事情。但也许不是……没有足够的信息。

于 2012-07-17T22:55:30.607 回答
0

您是否正在生成导出?

我使用 BD oracle 11g 的解决方案是:

查看 SYS_EXPORT 对象,使用 Oracle SQL Developer,连接到数据库并执行以下命令:

从 dba_objects 中选择 owner、object_name、object_type、status where object_name like '%SYS_EXPORT%'

对象 SYS_EXPORT

然后与用户: sqlplus / as sysdba 删除创建的对象。

删除对象 SYS_EXPORT

SQL>删除公共同义词 sys_export_full_01;

SQL>drop 公共同义词 sys_export_full_02;

SQL>删除公共同义词 sys_export_full_03;

SQL>删除公共同义词 sys_export_full_04;

在此之后,您可以生成导出。

于 2021-10-23T00:34:46.920 回答