日志管理-6

上次使用DUMP指令实际看了REDO日志文件的内容,这次要详细说明DUMP的重要部份。

──REDO 日志文件的内容──

REDO日志文件的DUMP

仅挑出了该REDO日志文件DUMP的transaction处理部分。

──SQL语句──

*************************************************************
DESC WORK03

 Name                            NULL?    Type
 ------------------------------- -------- ----
 EMPNO                                    NUMBER(4)
 ENAME                                    VARCHAR2(6)
 ADDRESS                                  VARCHAR2(12)
 JOB                                      VARCHAR2(8)
 MGR                                      NUMBER(4)
 SAL                                      NUMBER(7)
 COMM                                     NUMBER(7)
 DEPTNO                                   NUMBER(2)
※ EMPNO没有创建索引

UPDATE WORK03
SET ENAME = 'haneda'
WHERE EMPNO = 1001 ;
1行更新了。

COMMIT;
Commit结束。
*************************************************************

执行上面的transaction,会有四个change vector,分别纪录下面四种变更。
1. 回滚段(rollback segment)的transaction表(位于回滚段的段标题里面)
2. 回滚段的数据块
3. 表WORK03的数据块
4. commit讯息

我们一起看看这些change vector之间有什么关联。
# 第3行的DBA是地址,表示transaction表所在的磁盘上的位置。
# 第5行的uba是回滚段的数据块所在的位址。因此,它和第6列的回滚段的数据块所在的地址DBA应该会一样。
# 第18行的bdba和hdba是表WORK03的数据以及标题块所在的地址,因此应该和第27行的表WORK03的数据块与标题块所在的地址bdba和hdba相同。
# 第20、29行的slot是表示位于数据块的第几个record,所以这些数值应该相同。这个transaction的EMPNO=1001位于表WORK03的第一个record,所以是0(第5个record是4)。
# 第21、30行的size表示更新前和更新后的数据长度差,这个transaction的ENAME从narita改为haneda,数据长度是6 byte,所以size的数字都是0。假如从6byte改为5byte,第21行就会是1,第30行就会是-1。
# 第22、31行的col是表的第几列,因此这些数值应该相同;ENAME是位于表WORK03的第2项,所以这里的数字是1。
# 第22、31行的[6]是表示实际上容纳的数据的byte长度。
# 第22、31行的【6e 61 72 69 74 61】以及【68 61 6e 65 64 61】是以character code表示实际上容纳的数据,第22行的【6e 61 72 69 74 61】是更新前的数据,第31行的【68 61 6e 65 64 61】是更新后的数据。
# 第23行的DBA是代表transaction会用到的数据容纳在表WORK03的数据块的地址,所以应该和第18、27行的bdba相同。
# 第26行的uba是容纳transaction的UNDO数据的数据块的地址,因此应该和第6行的DBA相同。
# 第35行的DBA是将commit信息写入到transaction表的时候的地址,因此应该和第3行的DBA相同。
# 第37行的uba是commit的回滚段的数据块所在的地址,因此应该和第6行的DBA相同。
下次我们会说明和REDO日志有关的统计信息。

请使用浏览器的分享功能分享到微信等