终于找到以前的代码为什么不能处理10g日志的原因了, 在10g中, 不知道为什么DML(Layer 11 Opcode 5)跑到了Undo信息(Layer 5 Opcode 1)的前面去了, 而在9i和8i中, 在DML之前绝对是Undo的信息. 下面是在Oracle中DUMP LOGFILE命令生成的一条日志记录:

REDO RECORD – Thread:1 RBA: 0×000059.0000003d.0010 LEN: 0×0270 VLD: 0x0d
SCN: 0×0000.0010ca12 SUBSCN:  1 05/08/2007 13:10:34
CHANGE #1 TYP:2 CLS: 1 AFN:1 DBA:0x0040166a OBJ:732 SCN:0×0000.0010ca0f SEQ:  1 OP:11.5
KTB Redo
……
CHANGE #2 TYP:0 CLS:33 AFN:2 DBA:0×00800089 OBJ:4294967295 SCN:0×0000.00107a7b SEQ:  1 OP:5.2
CHANGE #3 TYP:0 CLS:33 AFN:2 DBA:0×00800089 OBJ:4294967295 SCN:0×0000.0010ca12 SEQ:  1 OP:5.4
CHANGE #4 TYP:0 CLS:34 AFN:2 DBA:0x0080008b OBJ:4294967295 SCN:0×0000.00107a7a SEQ:  5 OP:5.1
ktudb redo: siz: 220 spc: 2266 flg: 0×0012 seq: 0×0067 rec: 0×23
            xid:  0×0009.006.0000008b  
ktubl redo: slt: 6 rci: 0 opc: 11.1 objn: 732 objd: 732 tsn: 0
……

    改了这部份代码后, 程序可以跑下去了, 不这显示的有些信息还是很不正确的, 需要更进一步的去验证各种不同的操作下的日志记录.