由于精力所限, 一年半之间开始研究Oracle日志文件格式, 到现在都没有突破的成就, 一方面是因为工作越来越忙了, 另一方面是因为个人的精力实在有限, 因此在这一年半内, 基本上没有投入多一点点的时间去研究. 经过这么长的时间, 是应当继续向前走一步了, 今天就改造了一下我的MyLOG小工具, 以如何解出Redo SQL和搞清楚事务控制为中心.
现在不区分事务, 已经可以解出SQL语句了, 不过还需要进行很多的验证, 才能确定其准确性. 现在我是在Windows上打开了一个Solaris下的Oracle的日志文件:
LOG> set byte_order big
BYTE_ORDER = BIG
LOG> open c:\mydul\utility\gbcust1_24112.arc
DBID = 0x9d671cf9 = 2640780537
GROUP = 8, SEQUENCE = 24112
File Type = 2, Next Block = 16059
Start SCN = 0x031f.05c00824 = 3431775340580
Start Time = 2006-08-23 19:08:21
End SCN = 0x031f.05c00990 = 3431775340944
End Time = 2006-08-23 19:08:58
接下来看看第二个块中有什么DML(Insert/Update/Delete)操作?
LOG> extract block 2
Start extract redo SQL ...
INSERT INTO OBJ_1044190 (COL1,COL2,COL3,COL4,COL5) VALUES (?,?,?,?,?);
再来看看对表(Object ID: 1044190)上的所有DML操作?
LOG> extract object 1044190
Start extract redo SQL ...
INSERT INTO OBJ_1044190 (COL1,COL2,COL3,COL4,COL5) VALUES (?,?,?,?,?);
INSERT INTO OBJ_1044190 (COL1,COL2,COL3,COL4,COL5) VALUES (?,?,?,?,?);
INSERT INTO OBJ_1044190 (COL1,COL2,COL3,COL4,COL5) VALUES (?,?,?,?,?);
INSERT INTO OBJ_1044190 (COL1,COL2,COL3,COL4,COL5) VALUES (?,?,?,?,?);
INSERT INTO OBJ_1044190 (COL1,COL2,COL3,COL4,COL5) VALUES (?,?,?,?,?);
INSERT INTO OBJ_1044190 (COL1,COL2,COL3,COL4,COL5) VALUES (?,?,?,?,?);
......
LOG>
随便挑了几条和DUMP LOGFILE的结果进行对比, 基本上是吻合的, 终于有了一个良好的开始.如果感觉上面的信息象在骗你, 那就下载这个文件看看吧!
留言 (2)
恭喜,又前进了一步。
Posted by eygle | May 21, 2007 9:19 PM
恭喜,期待下一步:)
Posted by NinGoo | May 22, 2007 3:22 PM