解出Oracle日志文件中的Redo SQL语句之四

    要想得到更直观的SQL语句, 就得引入数据字典, 这里面主要需要以下三个方面的信息:

  1. Table (Object ID, Table Name, Partition Name)
  2. Column (Segment Column ID, Column Name, Column type)
  3. Key (The columns of primary key or unique index, for updating and deleting)

    在MyLOG中引入了前两个: Table (LOGTAB.TXT)和Column (LOGCOL.TXT)

$ cat LOGTAB.TXT
1,1044190,BP_ADJUSTMENT,PART2
2,28267,CMF,
$ cat LOGCOL.TXT
1,1,ID,VARCHAR2
1,2,PARTITION_KEY,NUMBER
1,3,EXTERNAL_ID,VARCHAR2
1,4,CREATED_BY,VARCHAR2
1,5,CREATION_DATE,DATE
2,69,BILL_FMT_OPT,NUMBER
2,70,BILL_DISP_METH,NUMBER
......

    接下就可以使用这些数据字典信息解出更直观的SQL语句了.

LOG> extract start 2 end 6 table BP_ADJUSTMENT
Start extract redo SQL ...
RBA=0x005e30.00000002.0010,  XID=0x0012.049.000dc2bb
    INSERT INTO BP_ADJUSTMENT ( ID , PARTITION_KEY , EXTERNAL_ID , CREATED_BY , CREATION_DATE ) VALUES (?,?,?,?,?);

RBA=0x005e30.00000006.0028,  XID=0x000e.018.000daa6f,  Commit Transaction

    接下来要做的是将列的具体数值打印出来, 又要开始处理不同的数据类型了, 还好这一部份的代码可以从MyDUL抄过来.

留言 (2)

进展很快呀,
等下一篇 之五 出来之后, 解析出来 VALUES (?,?,?,?,?);
我就可以拿来用了.

(易用性-简洁, 应该大大超越Oracle LogMiner 才好)
(我曾经依靠打电话,使用LogMiner 帮助 长春 的一个客户恢复了一年的数据, 苦呀)

顺便问一下, 给这个新工具起名字了吗?

不知道你有没有考虑“rollback”操作的问题,这个操作是对应的5.11OP码的吗?

发表留言: