免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2289 | 回复: 0
打印 上一主题 下一主题

关于ORACLE和INFOMRIX在事务日志及数据完整性方面的设计,可以做个比较: [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-16 16:00 |只看该作者 |倒序浏览
关于ORACLE和INFOMRIX在事务日志及数据完整性方面的设计,可以做个比较:

ORACLE的REDO日志记录了在数据库中已经提交的事务。用于恢复上次建档以来,已经提交的事务。也就是

说,在日常处理中,REDO日志并没有被更多的使用,在发生灾难时,REDO日志显示出了巨大的作用,可以

将灾难发生时已经提交的事务全部恢复。ORACLE UNDO SEGMENTS(中文叫做回滚段)用于存储被未提交事务

改变的页(脏页)的前映象,用于回退异常中断的事务,或在SQL中明确使用ROLLBACK work回退的事务。

换句话说,ORACLE 的UNDO段记录了未提交事务的全过程,同时因为UNDO段的存在,使得ORACLE的

SESSIONS可以访问到记录的前映象,提供了并发的游标可重复隔离级。
ORACLE 这种设计的最大弊端在于,REDO日志空间浪费较多,同时,UNDO SEGMENTS的大小直接影响了数据

库服务器所能支持的事务的长短(当ORACLE 的 UNDO SEGMENTS的空间无法再扩充时,正在执行事务的

SESSIONS将会收到一个“LONG TRANSACTION”错误。)。这个道理同TEMP空间一样,当ORACLE的TEMP空间

无法再扩充时,用户的排序操作将出错。

现在来比较一下INFOMRIX的日志系统,INFORMIX没有REDO日志和回滚段,只有逻辑日志(LOGICAL LOG)

和物理日志(PHYSICAL LOG),我们可以把INFOMRIX逻辑日志和ORACLE的REDO日志做一个比较,同时可以

把物理日志想象成实现了部分UNDO SEGMENTS功能的ORACLE回滚段。INFORMIX的逻辑日志记录了所有事务

操作(包括已提交的和未提交的),而INFOMRIX的物理日志则记录了自上次CHECK POINT以来,数据库中

被修改的页的“前映像”(但并不一定是所有被修改页的前映象)。当物理日志充满度达到75%时(这个

值是系统定义的,无法用参数指定),数据库会产生一次checkpoint操作,这时,所有还在数据缓冲区中

未刷新(刷新是指将在缓冲区中被修改的脏页保存回磁盘)的页面刷新到磁盘,然后,在INFORMIX逻辑日

志中写入一个检查点信息,随后将物理日志清空。这个过程完成后,数据库的状态被称为“物理和逻辑一

致状态”。现在来看一下INFOMRIX的事务回退过程,INFOMRIX的事务回退,直接使用逻辑日志记录的事务

信息回退未提交的事务。当数据库异常关闭时,使用物理日志中所记录的前映象将数据库恢复到“逻辑和

物理一致状态”(正常关闭INFOMRIX会产生一次CHECK POINT,所以正常关闭INFORMIX后,物理日志应该

是空的。如果物理日志非空,表示INFORMIX未正常关闭。)然后使用逻辑日志,找到最近一个检查点(可

以看成是记录在逻辑日志上的一致点),然后将未提交事务回退,将已提交事务做完。

现在可以看出来,INFORMIX的事务控制,是使用LOGICAL LOG和PHYSICAL LOG协同完成的,不像ORACLE是

只使用UNDO段来完成,这样做的好处在于,INFOMRIX的逻辑日志产生了多个用途,可以用于回退事务,也

能用于灾难恢复,同时,保证一个事务只有1份COPY,不会浪费磁盘空间。INFORMIX也有“LONG

TRANSACTION”错误,当逻辑日志中记录的事务超过了“长事务高水位线”(LTXHWM参数指定的百分比)

是会产生长事务错误。

一般来说,由于INFOMRIX的物理日志不需要记录所有的未提交事务操作,且可以循环使用(75%自动清空

)因此,一般都配置得较小,相对于ORACLE 的 UNDO LOG,就显得节省多了。


再将上述的区别整理一下:

        Recover:
Informix的物理日志存储chunk上的脏数据的前映像。提供的功能只相当于oracle回滚段的recover功能。
        Rollback:
Oracle的undo段,存储了“未提交事务”对数据的所有修改,当事务需要回滚时,用undo segments中的

前映像来回滚事务。而informix使用逻辑日志(logical log)中的内容来回滚事务。
        Rollback:
“长事务”错误,两个数据库产品都会发生,但原理不同。Informix的长事务发生时,表示该事务所写的

事务日志达到了“长事务高水平线”。而oracle的长事务,表示undo段已经扩充到了“maxextents”所指

定的大小,无法再对undo段进行扩充。
        Checkpoint:
Informix的物理日志充满度达到75%,就会触发一次checkpoint,而oracle不会。Informix的checkpoint

操作,会清空物理日志(也只有checkpoint会),而oracle不会。


最后,根据上述原理说明一下如何配置数据库以使得它们能够支撑较长事务得运行:

INFOMRIX: 配置较大的LOGICAL LOG
ORACLE  : 配置较大的REDO LOG 和 UNDO SEGMENTS
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP