OracleのLogMinerを使う

Oralce8の時代から十数年にわたって運用し続けているOracleインスタンスがあるんですが、すでに使われなくなって久しいテーブルスペースがあるみたい。
検証するために、当該テーブルスペースへのSQL的なアクセスがあったかどうかをLogminerを使って検証してみました。Oracleは11gです。

解析対象アーカイブログファイルを指定する

SQLPlusをsysadminで起動したのち、SYS.DMBS_LOGMNERストアドプロシージャを起動して、解析対象のファイルを指定。

# sqlplus /nolog
SQL> connect system/hogehoge as sysdba ;
Connected.
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE( -
> LOGFILENAME => '/storage/univdb/arch/1.dbf',-
> OPTIONS => DBMS_LOGMNR.NEW);

PL/SQL procedure successfully completed.

同様にして、解析対象アーカイブファイルを追加。OPTIONSのところがすこし違う。

SQL>  EXECUTE DBMS_LOGMNR.ADD_LOGFILE( - 
> LOGFILENAME => '/storage/univdb/arch/1_48648_673284082.dbf',-
> OPTIONS => DBMS_LOGMNR.ADDFILE) ;

PL/SQL procedure successfully completed.

解析対象期間分のアーカイブログを同様にして追加していく。

解析実施

DBMS_LOGMNR.START_LOGMNRストアドプロシージャで解析実施。

SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(-
> OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + -
> DBMS_LOGMNR.COMMITTED_DATA_ONLY + -
> DBMS_LOGMNR.PRINT_PRETTY_SQL);

PL/SQL procedure successfully completed.

解析結果を参照

解析結果はv$logmnr_contentsへ格納されるので適当にselectを発行して参照する。v$logmnr_contentsのビューはdescで参照可能。
私の場合は特定のテーブルスペースに対するSQL発行の有無を参照したかったので、以下のとおり。

SQL> select SQL_REDO from v$logmnr_contents where TABLE_SPACE like '%HOGE%'


no rows selected

アクセスなしと判明。あと一週間ほどチェックしてみて、それでもアクセスなしならダンプしたのちにテーブルスペースごと削除予定です。