Research Archives
October 30, 2007
上一次在火车上发呆是在研究Log文件格式时, 想了好久都没有想清楚, 于是将一段Log的二进制代码打了张纸, 终于在火车上发呆时想出来了. 今天同样发呆了一次, 不在火车上, 也没有打印出纸来, 而是对着屏幕发呆, 而结果则是快要搞清楚Oracle压缩块的格式了. 上一次研究压缩块已经是一年多以前的事了. 在过去的一年中, 没有为此事着急, 因为压缩块存在很多的Bug, 有的已经修正, 但有的则因为用得人少可能还没有发现, 因此没有压缩表支持的AUL还是得到了大家的欢迎....
September 4, 2007
Oracle Log格式研究未完成的主要任务
虽然已经能从Oracle 10g和Oracle 11g中解出Redo SQL了, 但这个只适合于记录没有Row Chain和Row Migration的情况. 然而在真实的环境中无法全部避免这些, 也不能丢下这样的记录不管啊! 因此需要继续做的两个研究是: 1, 对于Row Chain和Row Migration的研究, 要处理这两种情况肯定要懂Oracle的数据块格式, 这方面已经有基础了;...
Oracle 11g系列测试 -- MyLOG
象Log文件格式这样的研究, 是非常怕新版本的发布的. Oracle 11g的发布给我有点压力, 因为Oracle肯定会或多或少地对它作一些修改, 而象我这样没有官方支持的研究, 就比较难办了, 只能多作些测试了. 下午稍稍测试了一下MyLOG对Oracle 11g版本日志文件支持性. 原来以为什么都不用改的想法是落空了, 不过从目前看来, 我所关心的部份改动不会很大, 因为我稍稍修改了一下程序后, 已经可以解出SQL了, 基本上应当达到了对10g的研究水平. LOG>...
August 24, 2007
半年内Log研究可以达到的中间产品
过去两年中断断续续地研究了一些Oracle日志文件的格式, 只是为了研究而开发了一个工具, 不具有任何实用的意义. 也比较清楚Quest Shareplex或DSG Realsync这样的软件的强大功能, 要做出这样的一个工具, 是非常难的, 也是非常耗时间的, 这是日志格式研究的终极目标. Oracle 11g的新Standby模式是很好, 不过那是在11g刚推出来的, 估计要到12X才能真正地广泛使用吧, 而且这么好的功能, Oracle不会不收许可证的值, 而且是相当地贵的. ...
June 3, 2007
用MyLOG解出对COL$系统表进行的操作
在LOGTAB.TXT中加入如下行: 10000,21,COL$, 在LOGCOL.TXT中加入如下行, 不过由于COL$是Cluster表, 因此这里列出来的比真实的表列数少一列, 刚好少Cluster的那列: 10000,1,COL#,NUMBER 10000,2,SEGCOL#,NUMBER 10000,3,SEGCOLLENGTH,NUMBER 10000,4,OFFSET,NUMBER 10000,5,NAME,VARCHAR2 10000,6,TYPE#,NUMBER 10000,7,LENGTH,NUMBER 10000,8,FIXEDSTORAGE,NUMBER 10000,9,PRECISION#,NUMBER 10000,10,SCALE,NUMBER...
June 2, 2007
MyLOG程序对于Drop类误操作恢复的作用
接到过几次由于Drop误操作引起的恢复请求, 在那种情况下, 最主要的问题是没有办法定位被Drop的表的Data Object ID的值. 由于Oracle在执行Drop操作时并不真正地对数据文件清行清理(这是我们能恢复的前提), 从儿当你的应用中有很多的临时表, 并经常Drop来Drop去的话, 在恢复时进行整个数据文件扫描, 会发现很多的Data Object ID, 而你不知道那个是包括了有用的数据. 事实上这种情况下, 恢复的主要式作是去验证这些Data Object...
May 30, 2007
解出Oracle日志文件中的Redo SQL语句之十
已花了两周时间搞日志格式研究, 应当收尾了, 这东西长期搞下去没有出路. 没想到仅花了两周时间, 就可以给大家做个演示了. 我在Oracle中运行了以下角本: SQL> insert into mylog values ('My Log 10g',-1,sysdate); SQL> insert into mylog...
解出Oracle日志文件中的Redo SQL语句之九
初步完成了对Quick Multi-Insert操作的解释, 虽然在Oracle中是用一句话来进行Insert的, 但解出来时还是折分成一个一个的Insert语句了. 来看一下解出来的结果: RBA=0x000069.0000008d.0010, XID=0x0005.006.00000093 RID=AAAClAAAEAAAAJ2AAA INSERT INTO EMP ( EMPNO , ENAME , JOB...
May 29, 2007
解出Oracle日志文件中的Redo SQL语句之八
我在Oracle中运行了以下语句: SQL> CREATE TABLE MYLOG10G (COL1 NUMBER, COL2 VARCHAR2(20), COL3 DATE); SQL> insert into mylog10g values (100, 'Fangxin',...
May 28, 2007
解出Oracle日志文件中的Redo SQL语句之七
对于Delete操作, 取得相应的RowID. SQL> SELECT ROWID,EMPNO FROM EMP WHERE EMPNO=7934; ROWID EMPNO ------------------ ---------- AAAClAAAEAAAAJ3AAb 7934 SQL> DELETE EMP...
解出Oracle日志文件中的Redo SQL语句之六
终于找到以前的代码为什么不能处理10g日志的原因了, 在10g中, 不知道为什么DML(Layer 11 Opcode 5)跑到了Undo信息(Layer 5 Opcode 1)的前面去了, 而在9i和8i中, 在DML之前绝对是Undo的信息. 下面是在Oracle中DUMP LOGFILE命令生成的一条日志记录: REDO RECORD - Thread:1 RBA:...
May 25, 2007
解出Oracle日志文件中的Redo SQL语句之五
Oracle 10g的日志文件格式和8i/9i有很大的不同, 这是早就知道的. 一直没有对10g版本的日志格式没有深入研究, 即然最近更深入地研究了日志格式, 不如将10g的也解决了吧. 昨晚大约花了2个多小时, 终于可以将10g日志文件中的Log Record一个一个地分开来了, 9i中区分Change的那部份代码不能直接用在10g上, 还是花点时间研究一下, 估计也就是保留字节变多了或变少了, 应当不难. 下面是用Oracle 10g的DUMP LOGFILE命令生成Trace文件,...
May 24, 2007
解出Oracle日志文件中的Redo SQL语句之四
要想得到更直观的SQL语句, 就得引入数据字典, 这里面主要需要以下三个方面的信息: Table (Object ID, Table Name, Partition Name) Column (Segment Column ID, Column Name, Column type)...
May 23, 2007
解出Oracle日志文件中的Redo SQL语句之三
初步解决了事务的划分问题. 这得感谢biti_rainy的帮助, 从另一个角度来看, 如果我们的DBA可以一起研究, 估计速度要快得多. 已经可以用XID这一条线来划分Redo SQL的事务关系了, 来看一下MyLOG的输出例子吧! LOG> extract start 2 end 6 Start extract...
May 22, 2007
解出Oracle日志文件中的Redo SQL语句之二
到目前为止, 形成Redo的SQL语句(先不考虑Row Chain, Row Migration及LOB等情况)是没有问题了. 留下的一个很艰难的任务是如何区分事务. 即解出来的那一些语句是属于一个事务(Transaction)的? 因为Redo SQL解出来已经按照先后顺序了, 只要找出属于同一个事务的Redo记录中的共同点就可以了. 先不考虑日志中的内容, 则会话的SID和SERIAL#值到是很可以用来作为这一样的一根线的, 可惜的是在日志中并没有记录这两个值, 因此这是不行的. 为了找出这一条线, 我们先来看一下标记一个事务为提交的Redo记录(Layer=5,...
May 21, 2007
解出Oracle日志文件中的Redo SQL语句之一
由于精力所限, 一年半之间开始研究Oracle日志文件格式, 到现在都没有突破的成就, 一方面是因为工作越来越忙了, 另一方面是因为个人的精力实在有限, 因此在这一年半内, 基本上没有投入多一点点的时间去研究. 经过这么长的时间, 是应当继续向前走一步了, 今天就改造了一下我的MyLOG小工具, 以如何解出Redo SQL和搞清楚事务控制为中心. 现在不区分事务, 已经可以解出SQL语句了, 不过还需要进行很多的验证, 才能确定其准确性....
March 27, 2007
加强MyLOG软件, 以进行Log格式研究之五
周日闲来无事, 因为周五忙到比较晚, 所以干脆不回南京了, 一个人的周末能做什么呢? 洗了一大堆衣服和床单, 留下了一点时间来改进一下MyLOG软件, 增加了按Layer和Opcode进行查找的功能, 周一晚上继续改进, 居然给我加成了按对对象号(Object ID)来查找的功能, 但目前还仅限于对表或索引进行维护的类型, 不过这已以是一个很大的进步了. 另外在上篇中写的TAIL命令也集成了这个查找功能. SEARCH option value [option value]...
March 26, 2007
加强MyLOG软件, 以进行Log格式研究之四
周日闲来无事, 因为周五忙到比较晚, 所以干脆不回南京了, 一个人的周末能做什么呢? 洗了一大堆衣服和床单, 留下了一点时间来改进一下MyLOG软件, 增加了一个TAIL命令, 用于将日志文件中的所有操作列出来, 当时想写一个Linux/Unix下"tail -f"这样的工具(tailredo), 可是发现这样显示出来的信息没什么用, 因此停写那个工具. 但这条命令本身在研究时还是有用的. TAIL START start_block END end_block...
加强MyLOG软件, 以进行Log格式研究之三
周日闲来无事, 因为周五忙到比较晚, 所以干脆不回南京了, 一个人的周末能做什么呢? 洗了一大堆衣服和床单, 留下了一点时间来改进一下MyLOG软件, 增加了一个OSDUMP命令, 用于将日志文件中的块以十六进制的形式打印出来, 有点象Linux/Unix下的od命令, 但这个更有专业性. OSDUMP START start_block END end_block TO output_file OSDUMP...
March 25, 2007
加强MyLOG软件, 以进行Log格式研究之二
周日闲来无事, 因为周五忙到比较晚, 所以干脆不回南京了, 一个人的周末能做什么呢? 洗了一大堆衣服和床单, 留下了一点时间来改进一下MyLOG软件, 增加了一个OPEN命令, 正式将一个命令行的外壳和以前研究Log格式时写的程序挂上钩了. 这个OPEN命令的输出和以前写的lslog工具一样. 下面我在Windows上打开了一个Solaris Sparc上生成的归档日志文件: LOG> set byte_order big BYTE_ORDER = BIG...
March 24, 2007
加强MyLOG软件, 以进行Log格式研究之一
对于Log格式的研究, 我是持犹豫态度的, 第一研究很费力, 第二研究出来了也没用. 随着Oracle推出逻辑Standby及更新进的流(Stream)复制解决方案后, 随着新版本的推出, 这方面的功能会越来越强, 同样基于Log格式的备份或实时同步软件(如: SharePlex和DSG), 都会受到一定的影响. 而Log格式的研究, 要想出成果, 也只有在这一方面, 要是在上世纪90年代中或末期开始研究, 则情况就大不相同了. 但是我还是一直想研究的,...
February 26, 2007
将继续进行对Oracle Log文件的研究
两前以前的这个时间, 我刚刚完成了AUL/MyDUL的第二版本, 到现在已经很成熟了, 那么接下来要研究什么呢? 我想来想去只有继续进行对Oracle日志文件的研究了. 过去的一年半时间中, 我断断续续地进行过一些研究, 但没有什么成果. 早期曾经设想过开发一个Log有关的免费工具, 用于对Log文件的格式进行分析, 2007年是时侯向这个方面入手了. 在数据文件研究的过程中, 发现开发一个工具来研究Log格式是有必要的, 边开发边研究, 循环地进步. 今天晚上做出了一个原型,...
August 17, 2006
Oracle的压缩块的初步研究之一
Oracle Compress是一种在DW中节约空间的有效方式, 虽然在Oracle 9i中有些bug, 但相信在以后的版本中会比较强壮的, 因为在MYDMP中不支持Compress 的表,我想在以后的版本中增强一些, 所以先做了一些简单的研究, 下面是我偶然在火车上发现的规律. Compress需要一些额外的信息. 在Oracle中Compress是以块为单位的, 也就是说一个表的所有数据块中有的块可能是Compress的, 而有的却不是. 根据块中的信息就可以解压的, 而不需要查询数据字典. 我建了一张测试表, 只有两个字段(col1和col2),...
什么是Byte Edian?
不时在itpub网站上看到有人问byte edian是什么意思. 在这儿说一下我的理解吧. 在计算机中最小的单位是一个字节,不过一个字节能表示的范围太小了,我们可以将一个字节理解成一个0-9间的任何一个数字, 因此我们要表示一个千位数时就需要四位来表示, 给定一个四位数8765, 这个值是不会变的, 但我们记录这个数字时可以写成8765也可以记录成5678, 只要我们自已记住是如何存贮就可以了. 在三十二位的系统中, 一个整数由四个字节来组成, 所在在不同的硬件系统中放在内存中时, 就有两种顺序, Big Edian指将千位写在前面, Little Edian指将个位写成前面. 有些人理解成一个Byte中各个bit的顺序是不对的....
联系方法
- Name: Fangxin Lou
- MSN: anysql©live.com
- Mail:anysql©yahoo.com
anysql©gmail.com - Skype: anysql
- AIM: loufangxin
- QQ: 37223884
- Mobile:+8613564581341
软件下载:
当前分类: Research
本站基于MT-3.36免费版
(©)版权所有, 2004 - 2008, www.AnySQL.net, 保留所有权利.
MSN: loufangxin(a)msn.com, Mail: anysql(at)126.com/support(at)iamdba.com, Skype ID:anysql
MSN: loufangxin(a)msn.com, Mail: anysql(at)126.com/support(at)iamdba.com, Skype ID:anysql
