Oracle DB の LogMinor を利用してREDOログを解析する
先日仕事で、想定外のタイミングでデータベースの commit が走っているっぽい不具合が報告されたので、データベース上でどんな更新SQLが実行されているか調べるために LogMinor を利用しました。
LogMinor とは Oracle DB のREDOログを解析するための機能です。
LogMinor を開始 (SYSDBA ユーザーで実行)
[sql]
-- サプリメンタル・ロギングを有効にする
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
-- カレントREDOロググループを確認する
select member from v$logfile where group# = (select group# from v$log where STATUS = 'CURRENT');
-- 引数にカレントREDOロググループのパスを指定して実行する
EXECUTE SYS.DBMS_LOGMNR.ADD_LOGFILE('/opt/app/oracle/oradata/orcl/redo01.log', SYS.DBMS_LOGMNR.NEW);
-- LogMiner開始
EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.PRINT_PRETTY_SQL);
[/sql]
調査を行いたい操作を一通り行い、以下のSQL結果を取得
[sql]
-- 検証作業後に以下のSQL結果を取得する
select
SCN,
TO_CHAR(TIMESTAMP,'YYYY/MM/DD HH24:MI:SS') AS TIMESTAMP,
OPERATION,
ROLLBACK,
SESSION#,
SEQUENCE#,
SQL_REDO
from V$LOGMNR_CONTENTS where USERNAME = 'XXXX'
ORDER BY SCN desc;
[/sql]
LogMinor を停止 (SYSDBA ユーザーで実行)
[sql]
-- LogMiner終了
EXECUTE SYS.DBMS_LOGMNR.END_LOGMNR();
-- サプリメンタル・ロギングを無効にする
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;
[/sql]