|
|
Re: 可以的
最初由 biti_rainy 发布
[B]
假如存在顺序未提交事务 a,b,c
分别存在before image a1,b1,c1
a1 是原始数据
b1包含了a 的改变
c1包含了a和b的改变
就算提交了任何一个 事务 的数据
也可以通过before image 的数据来回滚
这里要提醒注意的一点是:
回滚不是用 回滚段中的block 去替换 datafile 中的block
如果是这样那肯定无法 恢复 到不丢失数据状态
回滚,是 DML 的逆操作
也就是
insert ---- delete
delete --- insert
update-----update [/B]
這里的 b1 為何會包括 a 的改變呀。
我的理解是﹐三個 事務 都是回滾段中的同一個塊中存在的 block image 中來讀取 before image 的﹐因為它們只是有先后的不同﹐然而事務并沒有提交呀。 不然我們 在各個 事務中進行 select 時那如何得到這一致性的呀。
如在 事務 c 中進行 select ﹐因為有事務 a﹑b 先進行改變﹐那它的 before image 還是原來那個未曾改變的塊吧﹐而不至少已含有 a 的改變.... |
|