Изучение средств обеспечения целостности данных в SQL Server 2005. Транзакции и блокировки (Лабораторная работа № 5), страница 4

2.1. Выбрать любую таблицу в базе данных, созданной в лабораторной работе №2. В эту таблицу будут вноситься изменения.

2.2. Написать скрипт, содержащий вложенные транзакции, в соответствии со следующей схемой:

begin tran

     любое изменение (insert, update, delete)

     просмотр таблицы (select)

     begin tran

                 любое другое изменение (insert, update, delete)

                 просмотр таблицы (select)

     commit

просмотр таблицы (select)

rollback

просмотр таблицы (select)

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

3. Изучить уровни изолированности транзакций в Microsoft SQL.

Необходимо смоделировать ситуации, когда к одному и тому же объекту базы данных одновременно обращаются две транзакции. Для этого требуется открыть два окна редактирования скриптов, написать и запустить каждую транзакцию в отдельном окне.

3.1. Выбрать таблицу для записи/чтения данных.

3.2. Смоделировать ситуацию: одна транзакция модифицирует данные в таблице, а другая в это же производит выборку из нее. Для этого необходимо в первом и втором окне написать транзакции следующего вида:

Первое окно:

begin tran

Изменение данных

Задержка

rollback (изменения не фиксировать!)

Второе окно:

Чтение данных

Затем следует запустить на выполнение первую транзакцию и, не дожидаясь ее отката, вторую. Эксперимент должен включать два испытания, на каждом из которых для второй транзакции задается свой уровень изолированности:

·  испытание 1 – уровень readuncommitted;

·  испытание 2 – уровень readcommitted.

Для каждого испытания выяснить:

·  в какой момент времени вторая транзакция выполняет выборку;

·  отражаются ли в результате выборки те изменения, что были внесены первой транзакцией.

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

3.3. Смоделировать ситуацию, при которой возникает проблема неповторяемого чтения. Для этого необходимо в первом и втором окне написать транзакции следующего вида:

Первое окно:

begin tran

Выборка (с хинтом tablock)

Задержка

Выборка

commit

Второе окно

Изменение данных

Затем следует запустить первую транзакцию. Вторая транзакция запускается во время задержки выполнения первой транзакции. Эксперимент должен включать в себя два испытания, в каждом из которых для первой транзакции выбирается уровень изолированности:

·  испытание 1 – уровень readcommitted;

·  испытание 2 – уровень repeatableread.

Сделать вывод: на каком из двух испытаний проблема неповторяемого чтения была решена и каким образом.

3.4. Смоделировать ситуацию: транзакция из первого соединения модифицирует строки по логическому условию (логическое условие должно быть обязательно!) и задерживается; во втором соединении последовательно выполняются запросы на выборку из этой таблицы:

·  с хинтом readuncommitted;

·  с хинтом readpast;

·  с хинтом readcommitted.

Вначале запускается транзакция из первого соединения. Во время задержки поочередно выполняются select-запросы во втором соединении. Запускаются они по отдельности. Для каждого запроса необходимо пронаблюдать:

·  выполняется ли он сразу, т. е. до завершения первой транзакции;

·  если выполняется, то все ли строки отображаются в результирующем наборе.

4. Подготовить и защитить отчет.

5. Содержание отчета

1. Цель работы.

2. Выполнение пункта 2.2: скрипт, содержащий вложенные транзакции, и выводы.

3. Для каждого эксперимента из пункта 3:

·  SQL-скрипты параллельно работающих транзакций;

·  наблюдаемые эффекты;

·  выводы.

4. Общие выводы по работе.

6. Литература

1. Мамаев Е. В. Microsoft ® SQL Server 2000. – СПб.: БХВ-Петербург, 2004. – 1280 с.: ил.