ログ・マイナーに関する検証 その1

投稿日: 2001年11月07日

< ログ・マイナーに関する検証 その壱 > ペンネーム だーりん

— ログ・マイナーで”はっぴー”リカバリー —

今回から、Oracle8iからの新機能であるログ・マイナーについて検証する。
ログ・マイナーを使用することで、REDOログ・アーカイブファイルを分析する
ことが可能となり、これにより任意のオブジェクトに対する、任意のトランザ
クションを抽出することができる。
これを使えば、ドロップしてしまったテーブルを、ほかのオブジェクトに影響
を与えることなく直前の状態まで復旧できるではないだろうか!!

・・・というわけで、実際どこまでつかえるか、じっくり検証する。
どうかお付き合い願いたい。

☆★☆★☆★
まず実際にログ・マイナーを用いてREDOログ・アーカイブファイルからリカバ
リ情報を取得して見る。

1.SYS ユーザで以下のスクリプトを実行

$ORACLE_HOME/rdbms/admin/dbmslmd.sql

-----------------------------------------
注: oracle 8.1.7で上記スクリプトを実行する前に、dbmslmd.sqlに以下の修
正をする必要がある。8.1.5、8.1.6では必要ない。

修正前  TYPE col_desc_array IS VARRAY(513) OF col_description;
                                              ~~~
修正後  TYPE col_desc_array IS VARRAY(700) OF col_description;
                                              ~~~
-----------------------------------------

2.init パラメータUTL_FILE_DIRを設定し、ディクショナリーを作成

init.oraの編集
UTL_FILE_DIR = /export/home/oracle/dbs/logmnr

プロシージャの実行(SYSユーザ)
※最新のオブジェクト情報を取得する為には、毎回実行する必要がある。
オブジェクトの変更がない場合は不要。

$ sqlplus sys/manager
SQL> exec dbms_logmnr_d.build
          (dictionary_filename=>'oradict.ora'
          ,dictionary_location=>'../export/home/oracle/dbs/logmnr');

3.REDOログ・ファイル(アーカイブファイル)を登録

SQL> exec dbms_logmnr.add_logfile
          (options=>dbms_logmnr.new
          ,logfilename=>'../export/home/oracle/dbs/logmnr/arch1_1.dbf');

4.REDOログ・ファイル(アーカイブファイル)を追加登録
(複数のアーカイブファイルを使用する場合は、すべてのファイルを繰り返し
登録する。)

SQL> exec dbms_logmnr.add_logfile
          (options=>dbms_logmnr.addfile
          ,logfilename=>'../export/home/oracle/dbs/logmnr/arch1_2.dbf');

5.ログ・マイナーを実行

SQL> exec dbms_logmnr.start_logmnr
          (dictfilename=>'../export/home/oracle/dbs/logmnr/oradict.ora');

以上で、ログ・マイナーの実行は終了した。
この結果は、v$logmnr_contents表にINSERTされている。

このとき、セッションが終了すると、v$logmnr_contents表のデータがすべて
消去されるので、注意すること。
内容の解析を行う前に、”CREATE TABLE TEMP_TBL AS SELECT …”などで、コ
ピーしておくことをお勧めする。

次回からは、実際にv$logmnr_contents表を解析してみる。

以上、テニス男女対抗ダブルス戦に燃えるだーりん@茅ヶ崎