BBED使用
BBED可以將二進位制塊列印出來,也可以自己寫demo將二進位制讀出來。
複製程式碼
安裝
11G中缺少bbed包,需要上傳sbbdpt.o, ssbbded.o, bbedus.msb ,將這三個檔案放在以下目錄中:
$ ORACLE_HOME/rdbms/lib/ssbbded.o
$ ORACLE_HOME/rdbms/lib/sbbdpt.o
$ ORACLE_HOME/rdbms/mesg/bbedus.msb
複製程式碼
後執行如下命令:
$ cd $ORACLE_HOME/rdbms/lib
$ make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed
複製程式碼
使用
1.新建dbfiles.txt(檔名隨意), 填入檔案資訊:
1 /home/oracle/app/oradata/orcl/redo03.log 52429312
[檔案編號] [檔案路徑] [檔案大小]
複製程式碼
2.新建引數檔案para.txt(檔名隨意),內容如下:
blocksize=512
listfile=dbfiles.txt
mode=edit
複製程式碼
3.我一般將dbfiles.txt和para.txt放在$ORACLE_BASE/bbed(路徑隨意)下, 啟動bbed:
$ cd $ORACLE_BASE/bbed
$ bbed parfile=para.txt --> [密碼是:blockedit]
複製程式碼
4.bbed一些基本操作
BBED> info
File# Name Size(blks)
----- ---- ----------
1 /home/oracle/app/oradata/orcl/system01.dbf 89600
2 /home/oracle/app/oradata/orcl/sysaux01.dbf 76800
複製程式碼
BBED> show all
FILE# 1
BLOCK# 1
OFFSET 0
DBA 0x00400001 (4194305 1,1)
FILENAME /home/oracle/app/oradata/orcl/system01.dbf
BIFILE bifile.bbd
LISTFILE dbfiles.txt
BLOCKSIZE 8192
MODE Edit
EDIT Unrecoverable
IBASE Dec
OBASE Dec
WIDTH 80
COUNT 512
LOGFILE log.bbd
SPOOL No
複製程式碼
如果要檢視5號檔案的2號塊,需要通過set命令來設定檔案號和塊號
BBED> set file 5
FILE# 5
BBED> set block 2
BLOCK# 2
BBED> dump
File: /home/oracle/app/oradata/orcl/redo01.log (5)
Block: 2 Offsets: 0 to 511 Dba:0x01400002
------------------------------------------------------------------------
01220000 02000000 34000000 108000c8 a8010000 05180000 732b0b00 01000206
c50f3b25 545402c1 00000100 89010000 89010000 0875030f 732b0b00 0000ac9c
007d0002 06c50f3b 7b2b0b00 00000000 1689f337 05021700 0300ffff b000c000
702b0b00 00000000 0200ffff 04002000 01000000 8f020000 7203c000 91000100
0a048800 ff7f0000 00000000 00000000 05011800 0300ffff 7203c000 702b0b00
00008672 0101ffff 0c001400 4c002000 0c000100 88000000 0a000000 04000100
8f020000 910001ad dd030100 dd030100 01000000 00000000 0a150100 080c0100
00000000 b700c000 90000300 97250b00 0000bdad 99250b00 0000bdad ff7f0000
ffffffff ffff0000 7303c000 00000000 00000000 040d8672 00000000 04000300
90020000 7a01c000 8d000100 00c00000 a4250b00 07198672 84b08000 1aaf8000
01ac9c00 0a060100 02000100 84b08000 702b0b00 000067bf 0100dd03 06001800
02000000 010d94bf 097f0000 04000100 8f020000 7203c000 91000100 01051506
05140000 00000000 00000000 00000000 00000000 00060000 10000400 00000200
04000400 00000000 2d00c400 04000080 0001200b 00000000 a4200000 01020000
732b0b00 010003c2 15060778 75030f0f 05021700 0300ffff b000c000 732b0b00
0000c000 0100ffff 04002000 01008abf 00000000 7303c000 91000100 0a00d41f
<32 bytes per line>
複製程式碼
自己寫的列印程式
demo上傳到https://github.com/zhoubihui/redo_log_calculate_analysis/tree/master/demo/tools下,編譯後使用時需要傳入檔名,起始塊號,dump塊數。例:
$ clang++ dump.cc -o dump
$ ./dump /Users/zhoubihui/redo/redo01.log 2 4
表示dump 2,3,4,5塊。
複製程式碼
轉儲日誌檔案工具-dump
使用
個人使用習慣如下:
1.執行DML操作之前先查詢當前日誌檔案的序列號和塊號
SQL> select cpodr_seq,cpodr_bno from x$kcccp where rownum=1;
CPODR_SEQ CPODR_BNO
---------- ----------
7 249
--------------------執行DML--------------------------------------
SQL> select cpodr_seq,cpodr_bno from x$kcccp where rownum=1;
CPODR_SEQ CPODR_BNO
---------- ----------
7 743
SQL> oradebug setmypid;
Statement processed.
SQL> alter system dump logfile '/home/oracle/app/oradata/orcl/redo01.log' rba min 7 249 rba max 7 743;
System altered.
SQL> oradebug tracefile_name;
/home/oracle/app/diag/rdbms/orcl/orcl/trace/orcl_ora_3434.trc
複製程式碼
1.需要dump的檔案,可以聯合v$log和v$logfile查詢檔案路徑。
2.dump的方式有很多種,這種是我最常用的同時也是我覺得比較方便的。
3.每次dump需要退出連線,因為生成的檔名是根據會話ID生成的,不重新登入的話,所有dump的資料都在同一個檔案裡,不夠直觀。
4.如果只執行一個insert操作,但是redo寫了幾百個塊,例如上述例子中,這個時候說明oracle自身在對資料庫做一些操作,如果新手在這幾百個塊中找一條insert記錄的話,是比較難找的。所以可以通過多執行幾次上述操作,只要寫的redo塊數比較少,dump出來的資料也是比較容易找到自己想要的那條記錄。
複製程式碼
例子
REDO RECORD - Thread:1 RBA: 0x000007.000000f9.0010 LEN: 0x0224 VLD: 0x0d
SCN: 0x0000.000fbebd SUBSCN: 1 04/04/2019 18:22:15
CHANGE #1 TYP:2 CLS:1 AFN:1 DBA:0x004007d9 OBJ:287 SCN:0x0000.000fbea6 SEQ:2 OP:11.5 ENC:0 RBL:0
KTB Redo
op: 0x11 ver: 0x01
compat bit: 4 (post-11) padding: 1
op: F xid: 0x0009.001.00000330 uba: 0x00c029d9.0086.24
Block cleanout record, scn: 0x0000.000fbebc ver: 0x01 opt: 0x02, entries follow...
itli: 2 flg: 2 scn: 0x0000.000fbea6
KDO Op code: URP row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x004007d9 hdba: 0x004007d8
itli: 1 ispac: 0 maxfr: 4863
tabn: 0 slot: 2(0x2) flag: 0x2c lock: 1 ckix: 11
ncol: 19 nnew: 1 size: 7
col 5: [ 7] 78 77 04 04 13 17 10
CHANGE #2 TYP:0 CLS:33 AFN:3 DBA:0x00c00100 OBJ:4294967295 SCN:0x0000.000fbe8b SEQ:2 OP:5.2 ENC:0 RBL:0
ktudh redo: slt: 0x0001 sqn: 0x00000330 flg: 0x0012 siz: 156 fbi: 0
uba: 0x00c029d9.0086.24 pxid: 0x0000.000.00000000
CHANGE #3 TYP:0 CLS:33 AFN:3 DBA:0x00c00100 OBJ:4294967295 SCN:0x0000.000fbebd SEQ:1 OP:5.4 ENC:0 RBL:0
ktucm redo: slt: 0x0001 sqn: 0x00000330 srt: 0 sta: 9 flg: 0x2 ktucf redo: uba: 0x00c029d9.0086.24 ext: 2 spc: 3270 fbi: 0
CHANGE #4 TYP:0 CLS:34 AFN:3 DBA:0x00c029d9 OBJ:4294967295 SCN:0x0000.000fbe8b SEQ:3 OP:5.1 ENC:0 RBL:0
ktudb redo: siz: 156 spc: 3428 flg: 0x0012 seq: 0x0086 rec: 0x24
xid: 0x0009.001.00000330
ktubl redo: slt: 1 rci: 0 opc: 11.1 [objn: 287 objd: 287 tsn: 0]
Undo type: Regular undo Begin trans Last buffer split: No
Temp Object: No
Tablespace Undo: No
0x00000000 prev ctl uba: 0x00c029d9.0086.21
prev ctl max cmt scn: 0x0000.000f6a42 prev tx cmt scn: 0x0000.000f6a5a
txn start scn: 0x0000.00000000 logon user: 0 prev brb: 12593621 prev bcl: 0 BuExt idx: 0 flg2: 0
KDO undo record:
KTB Redo
op: 0x04 ver: 0x01
compat bit: 4 (post-11) padding: 1
op: L itl: xid: 0x0001.000.0000026a uba: 0x00c02332.0075.04
flg: C--- lkc: 0 scn: 0x0000.000fbe9a
KDO Op code: URP row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x004007d9 hdba: 0x004007d8
itli: 1 ispac: 0 maxfr: 4863
tabn: 0 slot: 2(0x2) flag: 0x2c lock: 0 ckix: 11
ncol: 19 nnew: 1 size: -7
col 5: *NULL*
複製程式碼