ログマイナー再び!! その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文が実行されているのかを
追求していきたいと思います。
今回はここまでです。
すっかり秋の気配を感じる 茅ヶ崎より