mssql のトランザクション ログの内部を理解しようとしています。私は次の取引を行います
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 と行オフセット 4 に移動して、データが変更されたことを確認します
00000000: 10000800 01000000 010000†††††††††††††...........
メモリ ダンプから、ロールバックされたトランザクションの値、つまり =1 しか見つからないことがわかります。
しかし、私の質問は、発生したトランザクションで元の値、つまり 6 をどのように見つけるかです。これは意図的にログに情報を書き込まないマイクロソフトの動作ですか、それとも何か方法はありますか?? 提案してください 。
前もって感謝します