Итак, я пытаюсь найти что-то вроде проблемы взаимоблокировки здесь. Я включил ведение журнала блокировки с помощью DBCC TRACEON (1222, -1) и DBCC TRACEON (1204, -1). Я бы хотел протестировать, чтобы журнал зашел в тупик, и как я могу заставить его возникнуть в MS SQL 2005? Спасибо,
Как сознательно вызывать тупик?
Ответ 1
Здесь некоторые T-SQL намеренно вызывают тупик.
Создание объекта:
CREATE TABLE dbo.DeadLockTest (col1 INT)
INSERT dbo.DeadLockTest SELECT 1
CREATE TABLE dbo.DeadLockTest2 (col1 INT)
INSERT dbo.DeadLockTest2 SELECT 1
Откройте новое окно запроса и вставьте этот код и выполните его:
BEGIN TRAN
UPDATE dbo.DeadLockTest SET col1 = 1
Откройте еще одно новое окно запроса и вставьте и выполните этот код:
BEGIN TRAN
UPDATE dbo.DeadLockTest2 SET col1 = 1
UPDATE dbo.DeadLockTest SET col1 = 1
Вернитесь в свое первое окно запроса (с помощью первого оператора BEGIN TRAN
) и выполните этот код:
UPDATE dbo.DeadLockTest2 SET col1 = 1
Voila! Это тупик.
Ответ 2
Это должно работать:
- Вставьте две записи, A и B.
- Откройте две транзакции.
- Обновить запись A в первой транзакции и B во второй транзакции.
- Когда вы точно знаете, что эти обновления сделаны:
- Обновить запись B в первой транзакции и A во второй транзакции.