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'
ダメ。
ゴリゴリ修復する
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 コマンドが成功するようになりました。(よくわかってない)
参考サイト
- ORA-04098 - sys.xdb_pi_trig is invalid and fail... | Oracle Community
- Oracle DBA Blog 2.0: xmldb - gone but not forgotten?
ピンポイントな情報がなかなか見つからなくて苦労しました。