double arrow

Rollback transaction

5. Отладив команды, выполнить процедуру (EXEC del_zakaz), закоментировав команду rollback transaction (/*rollback transaction*/).

6. Перейти в СУБД Access и попытаться открыть присоединенную таблицу.

7. Перейти в СУБД SQL Server и выполнить запрос

select * from z_zakaz

Построить график запуска транзакций и граф ожидания.

График транзакций

Время SQL Server – QA (A) Access (B) SQL Server – QA (С)
t1 X-locks Лас-Вегас ® P    
t2 wait    
t3 S-locks  
t4 wait  
t5 S-locks
t6 wait
t7

Результат: Тупиковая ситуация – взаимное ожидание разблокировки.

Граф ожидания

Замечание: Здесь граф ожидания имеет цикл за счет того, что транзакция А является искусственно незавершенной и постоянно вступает в конфликт с транзакциями, пытающимися параллельно считать данные (транзакции В и С).

Для корректного завершения смеси транзакций, независимо выполните команду rollback transaction в Query Analyzer.

8. Выполнить те же действия, что и в п. 4, но с первоначально открытой таблицей в приложении СУБД Access, в которой до запуска транзакции в SQL Server выполнены (но не подтверждены) изменения. После выполнения процедуры del_zakaz без завершения (/*rollback transaction*/) вернитесь в СУБД Access и подтвердите сделанные изменения.

Построить график запуска транзакций и граф ожидания.

График транзакций

Время SQL Server – QA (A) Access (B) SQL Server – QA (С)
t1   X-locks Лас-Вегас ® P  
t2   wait  
t3 X-locks  
t4 wait  
t5 S-locks
t6 wait
t7

Результат: Тупиковая ситуация – взаимное ожидание разблокировки.

Граф ожидания

Замечание: Здесь также граф ожидания имеет цикл за счет того, что транзакция А и В являются искусственно незавершенными и постоянно вступают в конфликт с транзакциями, пытающимися параллельно считать данные.

Для корректного завершения смеси транзакций, независимо выполните команду rollback transaction в Query Analyzer.

(4)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: