──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日志有关的统计信息。