mof-brown engineer blog

モフモフしたネコと暮らすプログラマの日記

Oracle DB の LogMinor を利用してREDOログを解析する

| 0 comments

先日仕事で、想定外のタイミングでデータベースの commit が走っているっぽい不具合が報告されたので、データベース上でどんな更新SQLが実行されているか調べるために LogMinor を利用しました。

LogMinor とは Oracle DB のREDOログを解析するための機能です。

LogMinor を開始 (SYSDBA ユーザーで実行)

-- サプリメンタル・ロギングを有効にする
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結果を取得する
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;

LogMinor を停止 (SYSDBA ユーザーで実行)

-- LogMiner終了
EXECUTE SYS.DBMS_LOGMNR.END_LOGMNR();

-- サプリメンタル・ロギングを無効にする
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;

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

Author: maco

音楽/フェス/ダーツ(Rt.7台をうろうろ)/マンガ/ゲーム全般/モンハン/嵐/猫ネコねこぬこ/酒が好きなプログラマ

コメントを残す

Required fields are marked *.