Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания к лабораторным работам.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.29 Mб
Скачать

Пример выполнения лабораторной работы

На основе таблицы ЗАКАЗ (см. л.р № 1) в приложении СУБД SQL Server создать таблицу ЗАРУБЕЖНЫЙ_ЗАКАЗ (z_zakaz), установить соответствующий триггер (см. л.р № 1, 2-й триггер).

Для создания таблицы аналогичной существующей, можно использовать синтаксис команды SELECT следующим образом:

SELECT имена полей (или *) INTO имя новой таблицы

FROM имя таблицы – источника

WHERE условия выборки строк (если необходимо)

С использованием присоединенной к приложению СУБД Access таблицы ЗАРУБЕЖНЫЙ_ЗАКАЗ (z_zakaz) попытаться выполнить изменение данных, нарушающие условия триггера. Проанализировать результат.

Проанализировать действия блокировок, накладываемых сервером в различных ситуациях.

  1. Выполните изменение данных в записи присоединенной (т.е. в СУБД Access) таблицы z_zakaz и не подтверждая выполненных изменений (не перемещая курсор на следующую строку или в другую ячейку), внесите другие изменения в туже строку в таблице СУБД SQL Server подтвердив выполнение (СУБД Access и СУБД SQL Server должны быть открыты “одновременно”).

  2. Вернитесь в СУБД Access и подтвердите внесение изменений (перейти на другую строку).

  3. Вернитесь в СУБД SQL Server и подтвердите изменение. При этом если блокировка не будет снята, необходимо закрыть таблицу и открыть ее повторно. Это происходит из-за того, что в СУБД Access нет возможности «вручную» отменить транзакцию.

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

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

Время

SQL Server (A)

Access (B)

t1

X-locks

wait

t2

t3

X-locks

wait

t4

Лас-Вегас  P

t5

commit

t6

commit

Результат: Изменение данных внесены транзакцией A.

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

  1. Закройте присоединенную таблицу в СУБД Access. Создайте хранимую процедуру (см. л.р. № 2) реализующую следующую транзакцию:

CREATE PROCEDURE del_zakaz

AS

begin transaction T1

delete z_zakaz where (условие, определяющее удаление строк)

rollback transaction

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

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

  3. Перейти в СУБД 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.

  1. Выполнить те же действия, что и в п. 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)