2013-03-19 2 views
4

Я пытаюсь понять внутренности журнала tranaction mssql. я следующая транзакцияКак найти измененное значение дельты для транзакции обновления после откат в журнале транзакций в SQL Server

Begin TRANSACTION 
update xyz1 set a=6 
Rollback TRANSACTION 

Изначально значение столбца «а» 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) является идентификатор страницы, которые могут быть найдены в приведенной выше таблице

dbcc traceon(3604) 
dbcc page(lumrecon,1,558,3) 

идти в слот 0 и rowoffset 4, чтобы увидеть данные изменено

00000000: 10000800 01000000 010000†††††††††††††...........  

Мы наблюдаем из дампа памяти, что находим только значение откатной транзакции, т. е. a = 1.

Но мой вопрос заключается в том, как найти исходное значение i.e 6 в произошедшем tranaction. Является ли это поведение Microsoft, которое не намеренно записывает информацию в журнал или есть какой-либо способ? пожалуйста, предложите.

Заранее спасибо

ответ

0

"0x06" в журнале строке

LOP_MODIFY_ROW 0x01 0x06  dbo.xyz1 

это новое значение записывается в столбец. Поскольку транзакция откатывается, информация о «6» теперь находится только в журнале, а не в буфере страницы (памяти). В памяти всегда есть последнее значение для строки (включая незавершенные транзакции), потенциально защищенную логической блокировкой, а иногда и защелкой.