终于找到以前的代码为什么不能处理10g日志的原因了, 在10g中, 不知道为什么DML(Layer 11 Opcode 5)跑到了Undo信息(Layer 5 Opcode 1)的前面去了, 而在9i和8i中, 在DML之前绝对是Undo的信息. 下面是在Oracle中DUMP LOGFILE命令生成的一条日志记录:
REDO RECORD - Thread:1 RBA: 0x000059.0000003d.0010 LEN: 0x0270 VLD: 0x0d
SCN: 0x0000.0010ca12 SUBSCN: 1 05/08/2007 13:10:34
CHANGE #1 TYP:2 CLS: 1 AFN:1 DBA:0x0040166a OBJ:732 SCN:0x0000.0010ca0f SEQ: 1 OP:11.5
KTB Redo
......
CHANGE #2 TYP:0 CLS:33 AFN:2 DBA:0x00800089 OBJ:4294967295 SCN:0x0000.00107a7b SEQ: 1 OP:5.2
CHANGE #3 TYP:0 CLS:33 AFN:2 DBA:0x00800089 OBJ:4294967295 SCN:0x0000.0010ca12 SEQ: 1 OP:5.4
CHANGE #4 TYP:0 CLS:34 AFN:2 DBA:0x0080008b OBJ:4294967295 SCN:0x0000.00107a7a SEQ: 5 OP:5.1
ktudb redo: siz: 220 spc: 2266 flg: 0x0012 seq: 0x0067 rec: 0x23
xid: 0x0009.006.0000008b
ktubl redo: slt: 6 rci: 0 opc: 11.1 objn: 732 objd: 732 tsn: 0
......
改了这部份代码后, 程序可以跑下去了, 不这显示的有些信息还是很不正确的, 需要更进一步的去验证各种不同的操作下的日志记录.