Oracle その他

Oracle LogMiner (ログマイナー) の使い方|超基本・簡単

Oracle LogMiner とは

オンラインREDOログ、あるいはアーカイブREDOログを読み込み、過去にどのような処理が行われたかを調べることができる機能

例えば以下のようなケースで使用可能

  • 誤ってデータを DELETE してしまった
  • AP から INSERT 処理を走らせたはずなのに DB から参照できない
  • rollback された表を知りたい
  • トランザクションを確認したい

検証

Archive Log Mode であることを確認

archive log list;

実行例

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/arch
Oldest online log sequence     2058
Next log sequence to archive   2060
Current log sequence           2060

No Archive Log Mode の場合以下のように設定しよう

alter database archivelog;

実行例

SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /u01/app/oracle/arch
Oldest online log sequence     2057
Current log sequence           2059

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount   
ORACLE instance started.

Total System Global Area 3774873600 bytes
Fixed Size                  2931088 bytes
Variable Size             738199152 bytes
Database Buffers         1946157056 bytes
Redo Buffers               13844480 bytes
In-Memory Area           1073741824 bytes
Database mounted.

SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

データを挿入

この INSERT 文が後から確認したい処理

SQL> insert into scott.test values (sysdate);

1 row created.

SQL> commit;

Commit complete.

SQL> alter system switch logfile;

System altered.

対象のアーカイブログファイルを追加する

初回のアーカイブファイルの追加は dbms_logmnr.NEW とし、二回目以降は dbms_logmnr.ADDFILE とする

execute dbms_logmnr.add_logfile(logfilename=>'XXX',options=>dbms_logmnr.NEW);
execute dbms_logmnr.add_logfile(logfilename=>'XXX',options=>dbms_logmnr.ADDFILE);

実行例

SQL> execute dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/arch/log1.dbf',options=>dbms_logmnr.NEW);

PL/SQL procedure successfully completed.

SQL> execute dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/arch/log2.dbf',options=>dbms_logmnr.ADDFILE);

PL/SQL procedure successfully completed.

SQL> execute dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/arch/log3.dbf',options=>dbms_logmnr.ADDFILE);

PL/SQL procedure successfully completed.

まだアーカイブされていない REDO ログファイルをここで追加することも可能

LogMiner 起動

EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);

実行例

SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);

PL/SQL procedure successfully completed.

履歴を確認

分析する REDO データを参照するには、v$logmnr_contents ビューを参照する

実行例

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'yyyy/mm/dd HH24:MI:SS';

Session altered.

SQL> select username, timestamp,sql_redo from v$logmnr_contents where seg_name='TEST';

USERNAME   TIMESTAMP            SQL_REDO
---------- ------------------- -----------------------------------------
SYS        2022/01/03 18:24:53  insert into "SCOTT"."TEST"("COL1") values (TO_DATE('2022/01/03 18:24:53', 'yyyy/mm/dd HH24:MI:SS'));

LogMiner を終了する場合

exec dbms_logmnr.end_logmnr;

実行例

SQL> exec dbms_logmnr.end_logmnr;

PL/SQL procedure successfully completed.

この記事が役に立ったという方は
ボタンをポチッとしてくれたら喜びます

REDOログ・ファイル分析のためのLogMinerの使用
REDOログ・ファイル分析のためのLogMinerの使用

docs.oracle.com

-Oracle, その他
-,