
- •Лабораторная работа № 1.
- •Методические рекомендации по выполнению работы
- •Задания на лабораторную работу
- •Оформление отчета
- •Контрольные вопросы
- •Лабораторная работа № 2. Создания хранимых процедур и функций с использованием средства субд sql Server и языковых конструкций Transact-sql.
- •Методические рекомендации по выполнению работы
- •Задания на лабораторную работу
- •Оформление отчета
- •Лабораторная работа № 3. Использование языка манипулирования данными Transact-sql для создания курсоров
- •Методические рекомендации по выполнению работы
- •Задания на лабораторную работу
- •Оформление отчета
- •Лабораторная работа № 4 Параллельная обработка транзакций
- •Методические рекомендации по выполнению работы
- •Пример выполнения лабораторной работы
- •Задания для самостоятельного выполнения.
- •Оформление отчета
- •Лабораторная работа № 5 Обработка данных многомерной структуры
- •Список рекомендуемой литературы
Пример выполнения лабораторной работы
На основе таблицы ЗАКАЗ (см. л.р № 1) в приложении СУБД SQL Server создать таблицу ЗАРУБЕЖНЫЙ_ЗАКАЗ (z_zakaz), установить соответствующий триггер (см. л.р № 1, 2-й триггер).
Для создания таблицы аналогичной существующей, можно использовать синтаксис команды SELECT следующим образом:
SELECT имена полей (или *) INTO имя новой таблицы
FROM имя таблицы – источника
WHERE условия выборки строк (если необходимо)
С использованием присоединенной к приложению СУБД Access таблицы ЗАРУБЕЖНЫЙ_ЗАКАЗ (z_zakaz) попытаться выполнить изменение данных, нарушающие условия триггера. Проанализировать результат.
Проанализировать действия блокировок, накладываемых сервером в различных ситуациях.
Выполните изменение данных в записи присоединенной (т.е. в СУБД Access) таблицы z_zakaz и не подтверждая выполненных изменений (не перемещая курсор на следующую строку или в другую ячейку), внесите другие изменения в туже строку в таблице СУБД SQL Server подтвердив выполнение (СУБД Access и СУБД SQL Server должны быть открыты “одновременно”).
Вернитесь в СУБД Access и подтвердите внесение изменений (перейти на другую строку).
Вернитесь в СУБД SQL Server и подтвердите изменение. При этом если блокировка не будет снята, необходимо закрыть таблицу и открыть ее повторно. Это происходит из-за того, что в СУБД Access нет возможности «вручную» отменить транзакцию.
Построить график запуска транзакций и граф ожидания.
График транзакций
Время |
SQL Server (A) |
Access (B) |
t1 |
|
X-locks wait |
t2 |
|
… |
t3 |
X-locks wait |
… |
t4 |
… |
Лас-Вегас P |
t5 |
commit |
… |
t6 |
|
commit |
Результат: Изменение данных внесены транзакцией A.
Граф ожидания
Закройте присоединенную таблицу в СУБД Access. Создайте хранимую процедуру (см. л.р. № 2) реализующую следующую транзакцию:
CREATE PROCEDURE del_zakaz
AS
begin transaction T1
delete z_zakaz where (условие, определяющее удаление строк)
rollback transaction
Отладив команды, выполнить процедуру (EXEC del_zakaz), закоментировав команду rollback transaction (/*rollback transaction*/).
Перейти в СУБД Access и попытаться открыть присоединенную таблицу.
Перейти в СУБД 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.
Выполнить те же действия, что и в п. 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)