mof-brown

ずっとモフモフしてたい

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]

SQLの実行順に表示されるので、前後のSQLから問題の箇所の当たりを付けることができました。