2008/02/28

でた!!oracle、エラーORA-00600

昨日、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 コメント:

コメントを投稿