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: looping chain of synonyms エラーが発生する
How to debug ORA-01775: looping chain of synonyms?
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

:UPDATE: 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

あなたがほのめかした、これを2回実行した結果の出力のようです。create public synonymどこかで以前に実行されたショーの ORA-00955 (実行したall_synonymsクエリと同様) であり、他のエラーから明らかに存在します。最初に実行したときは正確にこれらのエラーが発生することはありませんでしたが、その後の実行ごとに発生しました。

再実行可能にしたい場合は、テーブルを削除する前に、少なくとも最初のコード スニペットでパブリック シノニムを削除する必要があります。

しかし、最初のスニペットはまったく実行されていないようです。Oracle からの成功または失敗のメッセージはありません。理由の唯一の真の手がかりは次のとおりです。

Processing bns_saa_messages
cat: cannot open bns_saa_messages.sql

これはシェル スクリプトの問題であり、実際には Oracle の問題ではありません。シェル スクリプトを見ないと、何が問題なのかを判断するのはかなり困難ですが、スクリプトが.sqlさまざまなソースから一時ファイルを作成し、SQL*Plus を介して実行していると思われます。しかし、重要なbns_saa_messages.sqlファイルがありません。おそらく、最初のスニペットがあるべき場所です。それが存在しているように見えるので、これは、ファイルとスクリプトが期待しているものとの間の名前の不一致、またはスクリプトが実行してcdいるファイルが間違ったディレクトリにある、または同様に些細なことのような単純なものである可能性があります。しかし、そうではないかもしれません... 十分な情報がありません。

于 2012-07-17T22:55:30.607 に答える