ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 日志管理-4

日志管理-4

原创 Linux操作系统 作者:xhailiang 时间:2006-11-24 00:00:00 0 删除 编辑
上次我们说明了DBWR和LGWR的物理I/O的不同点。这次要向大家说明写入「重做日志缓冲区(REDO Log Buffer)」的信息。

──写入重做日志缓冲(REDO Log Buffer)的信息──



对于数据库内所有被更改的数据块,Oracle会把所有更改内容记录在REDO日志缓冲区。更改内容包括数据段,索引段和回滚段(rollback segment)。 数据库内任意数据块所产生的一次更改,会被记录为一个变更向量(Change Vector)。 变更向量里包含了发生变化的数据块的地址和更新前的数据。

数据库记录变更的最小单位是变更向量,一系列相关变更向量的集合称为重做记录 (REDO Record)。有些事务(transaction)会产生不止一个重做记录, 每个重做记录里都包含了一连串的变更向量。下面,我们就以实例追踪变更向量和重做记录产生的过程。

──SQL语句──
*************************************************************
UPDATE WORK03
SET EMPNO = 9999
WHERE EMPNO = 1111 ;

※ EMPNO项目尚未创建索引
*************************************************************

运行上面的UPDATE语句之后,会产生下面的变更向量。

1. 对于回滚段的事务表(header)的变更向量
事务表中包含被修改的数据块的地址、该事务的状态(commit或active)、 以及存有该事务的UNDO的回滚段的位置,如果事务表被修改,就会产生针对于它的变更向量。

2. 对于回滚段的数据块的变更向量
将修改前的值(1111)存储(修改)到回滚段里的数据块时,就会产生变更向量。

3. 对于WORK03表内的数据块的变更向量
将修改后的值(9999)覆盖(修改)到WORK03表内的数据块时,就会产生变更向量。

由上面的例子可知,对于这个事务,重做记录中会有三个变更向量。当然可能有其他情况会产生重做记录, 例如修改的项目如果有索引,就必须修改索引,这时候就会产生第二个重做记录。 这时候的重做记录还是和第一个重做记录一样,包含不止一个变更向量。此外, 在事务完成之后运行commit语句,就会产生第三个重做记录。

大家已经了解变更向量与重做记录了吗?下次我们会用dump命令实际看一看 「重做日志缓冲区(REDO Log Buffer)」的内部信息。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/308563/viewspace-171947/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 日志管理-3
下一篇: 日志管理-5
请登录后发表评论 登录
全部评论

注册时间:2008-02-17

  • 博文量
    270
  • 访问量
    414467