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。这是不是有意将信息写入日志的微软行为,或者有什么办法?请建议。
在此先感谢