4
我想了解mssql的tranaction日誌的內部。 我做了以下交易如何在SQL Server的事務日誌中完成回滾後更新事務找到更改的增量值
Begin TRANSACTION
update xyz1 set a=6
Rollback TRANSACTION
最初列'a'的值是5。因此事務的結果被發現如下所示使用
SELECT
Operation, [RowLog Contents 0], [RowLog Contents 1, AllocUnitName, [Page ID],
[Slot ID], [Offset in Row],[Transaction ID]
FROM
sys.fn_dblog(NULL,NULL)
operation rowcontent0 row content 1 AllocUnitName Page ID Slot ID Offset
LOP_BEGIN_XACT NULL NULL NULL NULL NULL
LOP_MODIFY_ROW 0x01 0x06 dbo.xyz1 0001:0000022e 0 4
LOP_MODIFY_ROW 0x 0x01 dbo.xyz1 0001:0000022e 0 4
LOP_ABORT_XACT NULL NULL NULL NULL NULL
正如我們從這些數據中發生變化,從1至6,並再次其改爲1,因爲回滾已發生上述值看到。
然後得到我使用下面的命令,其中558(22E)是頁面ID可以在上表
dbcc traceon(3604)
dbcc page(lumrecon,1,558,3)
去找到到時隙0和rowoffset 4看到的數據存儲器中的信息已更改
00000000: 10000800 01000000 010000†††††††††††††...........
我們從內存轉儲中觀察到,我們僅查找回滾事務的值,即a = 1。
但我的問題是我們如何找到原始值,即在發生的tranaction中的6。這是不是有意將信息寫入日誌的微軟行爲,或者有什麼辦法?請建議。
在此先感謝