はじめに
Oracleで次のようなメッセージが出た場合、
SP2-0749: シノニム"xx"の循環パスを解決できません。
考えられる原因としては以下の2つがあります。
- あるシノニムを指す、同じ名前のシノニムを作成した
- シノニムをつけた先のテーブルが存在しないか、dropされている
即戦力のOracle管理術 ~仕組みからわかる効率的管理のノウハウ
posted with amazlet at 13.04.06
内村 友亮 近藤 聖 近藤 良 武吉 佑祐 瀬沼 裕樹
技術評論社
売り上げランキング: 163,045
技術評論社
売り上げランキング: 163,045
シノニムに対してシノニムを作成したケース
たとえば、以下のようなテーブルをcreateします。
create table table01 ( id number, name varchar(50), furigana varchar(50), primary key( id ) );
これに対してシノニムを作成します。シノニムの作成はsysユーザで行います。
conn / as sysdba CREATE OR REPLACE PUBLIC SYNONYM t1 FOR hoge.Table01;
t1に対して同じ名前でシノニムを作成してみます。
conn / as sysdba CREATE OR REPLACE PUBLIC SYNONYM t1 FOR t1;
この状態でt1を参照すると、シノニムの指し先が自分自身を指す無限ループに陥るため、エラーとなります。
SQL> desc t1
SP2-0749: シノニム"t1"の循環パスを解決できません。
シノニムをつけた先のテーブルが存在しない
hogeユーザのテーブルtable01にt1という名前のシノニムを作成します。
CREATE OR REPLACE PUBLIC SYNONYM t1 FOR hoge.Table01;
テーブルをdropします。
drop table hoge.table01;
Oracle 10gの場合、この状態でテーブルを参照すると、SP2-0749のエラーになります。
SQL> desc t1
SP2-0749: シノニム"t1"の循環パスを解決できません。
ちょっとわかりにくいですね。素直にテーブルがないって言ってくれれば良いのに。
ちなみに
Oracle 11gの場合、シノニムの指し先がない場合は、テーブルが存在しないというメッセージが表示されます。
SQL> desc t1
ERROR:
ORA-04043: オブジェクト"HOGE"."TABLE01"は存在しません。