昨日、oracleの伝説的なエラー、ORA-00600が発生!!
このエラーがでた場合、オラクルに問い合わせ直行行きらしく、ものすごい焦りました。
原因ですが、from句がdblink先のテーブルを参照しているシノニムのカーソルを含んだ、PackageBodyのコンパイルをかけたら、下のようなORA-00600が発生しました。
PL/SQL: ORA-00600: 内部エラー・コード、引数: [12840],[],[],[],[],[],[],[] |
まじ、どうしようかとこのブログのタイトル通り、ものすごいテンパってしまったのですが、シノニムの部分をviewに変更して解決することができました。
ここで、メモも兼ねてまとめてみたいと思います。
1.DBLinkを定義
CREATE PUBLIC DATABASE LINK ORACLE_DB01.WORLD CONNECT TO ORA_USERNAME IDENTIFIED BY ORA_PASSWORD USING 'ORACLE_SID01' / |
2.DBLINK先のテーブルを参照するSYNONYMを作成
CREATE SYNONYM hoge_synonym FOR hoge@ORACLE_DB01.WORLD / |
3.上で作成したSYNONYMをFROM句としたカーソルを含むPackageBodyを定義
CREATE OR REPLACE PACKAGE BODY hogePack IS ・・・・ CURSOR crs SELECT clm FROM hoge_synonym  WHERE ・・・・・ ; BEGIN ・・・ EXCEPTION ・・・ END; / |
ここで、コンパイルをかけるとバグが発生します。
そこで、参照先をSYNONYMからVIEWに変更して再コンパイル
4.viewの作成
CREATE OR REPLACE VIEW hoge_view AS SELECT * FROM hoge@ORACLE_DB01.WORLD / |
5.カーソルの変更
CREATE OR REPLACE PACKAGE BODY hogePack IS ・・・ CURSOR crs SELECT clm FROM hoge_view WHERE ・・・・・ ; BEGIN ・・・ EXCEPTION ・・・ END; / |
うーん、実に難しい。。。
orz
0 コメント:
コメントを投稿