ログマイナー再び!! その3
<ログマイナー再び!! その3>
ペンネーム: ぽっちゃりメタボン
こんにちは、ぽっちゃりメタボンです。
すっかり寒くなってきましたが、今週もはりきって検証しちゃいます。
▼ 前回のおさらい
前回はログマイナーを実行する上で必要となるLogMiner ディクショナリに
ついて以下の指定が可能であることを確認していきました。
1.) オンラインカタログを指定。
2.) REDOログファイルへLogMinerディクショナリを抽出し、指定。
3.) フラットファイルへLogMinerディクショナリを抽出し、指定。
また、その中でもオンラインカタログを使用し、ディクショナリ情報が変更
される状況を作った場合には、正しくSQLの再構築が行えないことを確認す
ることができました。
ただし、上記状況においては 事前にREDOログファイルへLogMinerディクショ
ナリを抽出(その時点でのディクショナリ情報のスナップショットを保存)し
ておく事により、SQLの再構築を正しく行うことが可能になります。
で、
今回は REDOログファイルへ出力したディクショナリがどういったものなのか
をREDOログダンプを通して確認していきたいと思います。
※前回お伝えするのを忘れておりましたが、2.)を行う場合にはアーカイブ
ログ運用されていることが前提となります。
▼ 環境のおさらい
OS:Red Hat Enterprise Linux ES release 3
DB:10gR2(10.2.0.1)
▼ ダンプを取得してみるのだ!!
1. まず、ディクショナリをアーカイブREDOログへ抽出しておきます。
SQL> execute dbms_logmnr_d.build(options=> - dbms_logmnr_d.store_in_redo_logs); PL/SQLプロシージャが正常に完了しました。
2. 出力ファイルを確認します。
SQL> select name,THREAD#, SEQUENCE# from v$archived_log where DICTIONARY_BEGIN ='YES' NAME --------------------------------------------------------------------- /home/ora102/oracle/flash_recovery_area/ORA102/archivelog/2007_10_08/ o1_mf_1_57_3jl812bf_.arc
3. REDOログのダンプを取得します。
SQL> alter system dump logfile ‘[対象のREDOログをフルパスで指定]’;
これにてダンプファイルが初期化パラメータ user_dump_dest へ出力されま
す。
ディクショナリ情報を抽出したREDOログとは
どのような構造になっているのでしょうか。
通常のREDOログと同様?、または、開けてびっくり?
▼ ダンプを眺めてみるのだ!!
抜粋----------------------------------------------------------------- REDO RECORD - Thread:1 RBA: 0x000030.00000003.006c LEN: 0x017c VLD: 0x01 SCN: 0x0000.0007183d SUBSCN: 1 09/30/2007 03:49:24 -- ■REDO レコードヘッダ--------------------------------------------- CHANGE #1 TYP:0 CLS:25 AFN:2 DBA:0x00800049 OBJ:4294967295 SCN:0x0000.0007183d SEQ: 1 OP:5.2 ktudh redo: slt: 0x0003 sqn: 0x00000000 flg: 0x0002 siz: 84 fbi: 0 uba: 0x008000bc.0058.0b pxid: 0x0000.000.00000000 -- ■ Change Vector 1 ---------------------------------------------- CHANGE #2 TYP:0 CLS:26 AFN:2 DBA:0x008000bc OBJ:4294967295 SCN:0x0000.0007183d SEQ: 1 OP:5.1 ktudb redo: siz: 84 spc: 6690 flg: 0x0022 seq: 0x0058 rec: 0x0b xid: 0x0005.003.000000a2 ktubu redo: slt: 3 rci: 0 opc: 11.1 objn: 5611 objd: 5611 tsn: 0 Undo type: Regular undo Undo type: Last buffer split: No Tablespace Undo: No 0x00000000 KDO undo record: KTB Redo op: 0x03 ver: 0x01 op: Z KDO Op code: DRP row dependencies Disabled xtype: XA flags: 0x00000000 bdba: 0x00403372 hdba: 0x00403371 itli: 1 ispac: 0 maxfr: 4863 tabn: 0 slot: 0(0x0) -- ■ Change Vector 2 ---------------------------------------------- CHANGE #3 TYP:0 CLS: 1 AFN:1 DBA:0x00403372 OBJ:5611 SCN:0x0000.0007183d SEQ: 4 OP:11.2 KTB Redo op: 0x01 ver: 0x01 op: F xid: 0x0005.003.000000a2 uba: 0x008000bc.0058.0b KDO Op code: IRP row dependencies Disabled xtype: XA flags: 0x00000000 bdba: 0x00403372 hdba: 0x00403371 itli: 1 ispac: 0 maxfr: 4863 tabn: 0 slot: 0(0x0) size/delt: 48 fb: --H-FL-- lb: 0x1 cc: 7 null: ------- col 0: [ 7] 35 2e 33 2e 31 36 32 col 1: [19] 30 39 2f 33 30 2f 32 30 30 37 20 30 33 3a 34 39 3a 32 34 col 2: [ 4] c3 2f 32 3a col 3: [ 1] 80 col 4: [ 2] c1 02 col 5: [ 1] 80 col 6: [ 4] c3 2f 32 3a -- ■ Change Vector 3 ---------------------------------------------- 抜粋-----------------------------------------------------------------
上記を見ると、通常のREDOログの構造と同様にREDOログヘッダーがあり、
その中に複数のチェンジベクターが含まれていることが確認できます。
※REDOログの構造、及びチェンジベクターついては以下で説明しております
のでご参照下さい。
https://old.insight-tec.com/mailmagazine/ora3/vol066.html
ディクショナリ情報が抽出されているというので特別なフォーマットかと思
いましたが、ダンプより確認した結果、REDOログの構造には変化がありませ
んでした。
どのようなオブジェクトに対してDMLが実行されているのかが気になります。
以下がREDOダンプから各オブジェクトへのDML実行回数を集計したものです。
OBJ# :OBJ$.OBJ#列 例) Change Vector 3の「OBJ:5611」 NAME :OBJ$.NAME列 DMLEXEC:REDOログダンプより集計 OBJ# NAME DMLEXEC ------------ --------------------- ------- 2 C_OBJ# 23 8 C_FILE#_BLOCK# 93 18 OBJ$ 21 482 MON_MODS$ 23 483 I_MON_MODS$_OBJ 23 5586 LOGMNRG_SEED$ 17 5587 LOGMNRG_DICTIONARY$ 9 5588 LOGMNRG_OBJ$ 594 5589 LOGMNRG_TAB$ 41 5590 LOGMNRG_COL$ 2080 5591 LOGMNRG_ATTRCOL$ 24 5592 LOGMNRG_TS$ 9 5593 LOGMNRG_IND$ 51 5594 LOGMNRG_USER$ 9 5595 LOGMNRG_TABPART$ 9 5598 LOGMNRG_TYPE$ 54 5599 LOGMNRG_COLTYPE$ 51 5600 LOGMNRG_ATTRIBUTE$ 254 5601 LOGMNRG_LOB$ 9 5602 LOGMNRG_CDEF$ 132 5603 LOGMNRG_CCOL$ 116 5604 LOGMNRG_ICOL$ 84 5605 LOGMNRG_LOBFRAG$ 9 5606 LOGMNRG_INDPART$ 9 5611 LOGMNR_BUILDLOG 6 5612 LOGMNR_BUILDLOG_PK 1
上記のとおり、ディクショナリ抽出の際には様々な表に対してDMLが実行され
ている事が確認できます。
次回は、ディクショナリ抽出の際にどのようなDML文が実行されているのかを
追求していきたいと思います。
今回はここまでです。
すっかり秋の気配を感じる 茅ヶ崎より