読者です 読者をやめる 読者になる 読者になる

clock-up-blog

go-mi-tech

Oracle エラー ORA-04098 であらゆる DROP が効かなくなったときの対処

Oracle トラブルシューティング

Windows 上の Oracle Database 11g Express Edition Release 11.2.0.2.0 にて。

遭遇したエラー

SQL> DROP TABLE aaaaa;
DROP TABLE aaaaa
*
行1でエラーが発生しました。:
ORA-04098: トリガー'SYS.XDB_PI_TRIG'が無効で再検証に失敗しました

うーん?

SQL> CREATE SEQUENCE abc;

順序が作成されました。

SQL> DROP SEQUENCE abc;
DROP SEQUENCE abc
*
行1でエラーが発生しました。:
ORA-04098: トリガー'SYS.XDB_PI_TRIG'が無効で再検証に失敗しました

うーん??
もうなんかあらゆる DROP が失敗する。

何かを作ることはできても削除することができない。

対策

sysdba としてログイン

まずは sysdba としてログインし直す。

> sqlplus / as sysdba

XDB_PI_TRIG の正常化を試みる

SQL> ALTER TRIGGER XDB_PI_TRIG COMPILE;

警告: トリガーが変更されましたが、コンパイル・エラーがあります。

SQL> SHOW ERRORS;
TRIGGER XDB_PI_TRIGのエラーです。

LINE/COL ERROR
-------- -----------------------------------------------------------------
3/5      PL/SQL: Statement ignored
3/13     PLS-00905: オブジェクト'SYS.IS_VPD_ENABLED'が無効です。

ダメ。

IS_VPD_ENABLED の正常化を試みる

SQL> ALTER FUNCTION IS_VPD_ENABLED COMPILE;

警告: ファンクションが変更されましたが、コンパイル・エラーがあります。

LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0      PL/SQL: Compilation unit analysis terminated
4/43     PLS-00421: 循環シノニム'PUBLIC.DBMS_XDBZ'

ダメ。

DBMS_XDBZ の確認

SQL> DESC XDB.DBMS_XDBZ
SP2-0749: シノニム"XDB.DBMS_XDBZ"の循環パスを解決できません。

ふむ。(よくわかっていない)

ゴリゴリ修復する

SQL> DROP TRIGGER SYS.XDB_PI_TRIG;

トリガーが削除されました。

SQL> PURGE DBA_RECYCLEBIN;

DBAリサイクルビンがパージされました。

SQL> DROP PUBLIC SYNONYM DBMS_XDBZ;

シノニムが削除されました。

SQL> QUIT
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Productionとの接続が切断されました。

修復結果を確認する

>sqlplus

SQL*Plus: Release 11.2.0.2.0 Production on 日 2月 15 16:18:14 2015

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ユーザー名を入力してください: xxxxx
パスワードを入力してください: xxxxx


Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
に接続されました。
SQL> DROP SEQUENCE abc;

順序が削除されました。

とりあえず DROP コマンドが成功するようになりました。(よくわかってない)

参考サイト

ピンポイントな情報がなかなか見つからなくて苦労しました。

});