ORA-06512: at “SYS.DBMS_AUDIT_MGMT”, line 677

OracleDatabase 12cでDBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION()しようとしたところ、ORA-06512が発生。

実行したSQL文

BEGIN
    SYS.DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(
        SYS.ADIT_TRAIL_TYPE => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,
        AUDIT_TRAIL_LOCATION_VALUE =>  'MY_AUDIT_TABLESPACE'
    );
END;
/

発生したエラー

BEGIN
*
ERROR at line 1:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at "SYS.DBMS_AUDIT_MGMT", line 2737
ORA-06512: at "SYS.DBMS_AUDIT_MGMT", line 677
ORA-06512: at line 2

原因

実はこのインスタンス、ここでも扱った、SYSのテーブルが一般ユーザにもコピーされているインスタンスであり
AUD$、AUDIT$、AUDIT_ACTIONSをはじめいろいろテーブルが複数存在している。
(かつ、スキーマを指定しないと誤ったテーブルを参照してしまう)

正攻法ではないがためしにこの二重にあるテーブルをすべてドロップしてSYSのもののみの状態にしたらエラーは発生しなくなったので
BMS_AUDIT_MGMT内で指定しているテーブルがSYSのものを正しく指せていなかったことが原因だと考えられる。

うっかりSYSのテーブルを他のユーザにも作ってしまうと影響が大きく、注意をしなければならないと改めて感じた。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です