LogMiner
「LogMiner」は、REDOログ(オンライン/アーカイブ)を操作するための機能です。 この「LogMiner」には、Oracle 9i から「サプリメンタル・ロギング」というREDOログに補助的な更新列以外の値を追加できるものが追加されています。
それでは「サプリメンタル・ロギング」のステータスを確認するところから見ていきます。
SQL>SELECT SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_ALL FROM V$DATABASE; SUPPLEME SUP SUP -------- --- --- YES NO NO
次に開始します。このとき、オプションの指定には、いくつかあることに注意してください。
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; データベースが変更されました。
オプションには、"PRIMARY KEY"、"UNIQUE KEY"、"FOREIGN KEY"、"ALL" の4つがあります。
追加したら「サプリメンタル・ロギング」を開始します。
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; データベースが変更されました。
ステータスを見てみます。
SQL>SELECT SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_ALL 2 FROM V$DATABASE; SUPPLEME SUP SUP -------- --- --- YES NO YES
ログ・モードの確認
まず、「LogMiner」を開始する前に、データベースがアーカイブ・ログ(ARCHIVELOG)で起動していることを確認することからはじめていきます。(NOARCHIVELOGモードでもアクティブなREDOログの操作が可能です。)Oracle データベースをデフォルトで作成すると、ログモードは「NOIARCHIVELOG」で起動しています。
SQL> SELECT LOG_MODE FROM V$DATABASE; LOG_MODE ------------ NOARCHIVELOG
「NOARCHIVELOG」の場合
SQL> SHUTDOWN データベースがクローズされました。 データベースがアンマウントされました。 ORACLEインスタンスがシャットダウンされました。 SQL> STARTUP MOUNT ORACLEインスタンスが起動しました。 Total System Global Area 167772160 bytes Fixed Size 1247900 bytes Variable Size 83887460 bytes Database Buffers 79691776 bytes Redo Buffers 2945024 bytes データベースがマウントされました。 データベースがオープンされました。 データベースがマウントされました。 SQL> ALTER DATABASE ARCHIVELOG; データベースが変更されました。
対象のアーカイブ・ログを確認
下の例では、「2009年8月26日」のアーカイブ・ログを指定しています。
SQL> SELECT NAME, TO_CHAR(COMPLETION_TIME, 'yyyymmdd') FROM V$ARCHIVED_LOG 2 WHERE TO_CHAR(COMPLETION_TIME, 'yyyymmdd') = &date 3 / dateに値を入力してください: 20090826 旧 2: WHERE TO_CHAR(COMPLETION_TIME, 'yyyymmdd') = &date 新 2: WHERE TO_CHAR(COMPLETION_TIME, 'yyyymmdd') = 20090826 NAME -------------------------------------------------------------------------------- TO_CHAR( -------- C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORA10G\ARCHIVELOG\2009_08_26\O1_MF_ 1_4_599G73OH_.ARC 20090826 C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORA10G\ARCHIVELOG\2009_08_26\O1_MF_ 1_5_599YYM5C_.ARC 20090826
解析したいログを指定
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE (- > 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORA10G\ARCHIVELOG\2009_08_26\O1_ MF_1_4_599G73OH_.ARC',- > DBMS_LOGMNR.NEW); PL/SQLプロシージャが正常に完了しました。 SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(- > 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORA10G\ARCHIVELOG\2009_08_26\O1_ MF_1_5_599YYM5C_.ARC',- > SYS.DBMS_LOGMNR.ADDFILE); PL/SQLプロシージャが正常に完了しました。
LogMinerを開始
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(-
> OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
PL/SQLプロシージャが正常に完了しました。
V$LOGMNR_CONTENTSビューから解析結果を取得
SQL> spool 'C:\logmnr_contens.log SQL> SELECT TO_CHAR(TIMESTAMP,'YYYY/MM/DD HH24:MI:SS') AS TIMESTAMP,SQL_REDO 2 FROM V$LOGMNR_CONTENTS 3 WHERE USERNAME = 'SCOTT' 4 AND OPERATION IN ('INSERT','UPDATE','DELETE') 5 ORDER BY SCN; ~省略~ SQL> spool off