Данная команда устанавливает один из четырех возможных уровней изолированности для всех транзакций, выполняющихся в текущем соединении. При выполнении настоящей лабораторной работы студентам предлагается самостоятельно изучить каждый уровень изолированности и ответить на вопрос, в каких именно случаях целесообразно устанавливать тот или иной уровень изолированности транзакций в соединении.
2.4. Установка уровня блокирования и изолированности для отдельных команд SQL
При открытии нового соединения для всех транзакций устанавливается умалчиваемый уровень изолированности readcommitted. При необходимости можно задать другой уровень. Кроме того, в SQL Server 2005 существует возможность управлять изолированностью и способом блокирования на уровне команд insert, update, delete, select. Для этого применяются специальные ключевые слова, называемые хинтами. Каждый хинт соответствует уровню изолированности или типу блокировки, которую требуется наложить на данные, обрабатываемые данным SQL-оператором. Хинты включаются в вызов SQL-оператора, ставятся после ключевого слова with и заключаются в круглые скобки.
Рассмотрим следующий пример. Из БД пассажирских перевозок требуется получить сведения обо всех фирменных поездах. Во время выборки требуется наложить блокировку на считываемые строки, чтобы ни одна другая транзакция не могла модифицировать их во время выполнения команды. Для этого в операторе select указывается хинт rowlock. Полностью SQL-вызов выглядит следующим образом:
select * from trains with (rowlock)
where train_type = ‘фирменный’
Аналогичным образом хинты используются в командах insert, update, delete.
Описание хинтов SQL Server 2005
1. rowlock
Устанавливает блокировку на уровне строк, с которыми работает команда.
2. paglock
Блокирует страницу, к которой осуществлялось обращение.
3. tablock
Блокирует таблицу целиком и удерживает блокировку до конца выполнения команды. В то же время, если хинт tablock используется совместно с holdlock (см. ниже), блокировка сохраняется до завершения транзакции. Если tablock используется в команде select, другим транзакциям разрешается читать блокированные данные.
4. tablockx
Блокирует таблицу полностью до завершения транзакции. До снятия блокировки запрещается модификация и чтение данных другими транзакциями.
5. holdlock
В большинстве случаев используется совместно с хинтами rowlock, paglock и tablock, сохраняя блокировку строк, страниц или таблиц до завершения транзакции.
6. updlock
Позволяет установить на ресурсы так называемую блокировку обновления до конца выполнения транзакции. Такие блокировки позволяют другим транзакциям читать данные, но запрещают модифицировать их. Когда же необходимо выполнить обновление данных, менеджер блокировок автоматически повышает блокировку обновления до монопольной блокировки. После этого другие транзакции не могут даже читать данные.
7. nolock
Устанавливает для данной команды уровень изолированности readuncommitted. Хинт nolock разрешается использовать только в команде выборки.
8. readuncommitted
Аналогичен nolock.
9. readcommitted
Устанавливает для команды уровень изолированности readcommitted.
10. repeatableread
Устанавливает для команды уровень изолированности repeatableread.
11. serializable
Устанавливает для команды уровень изолированности serializable.
12. readpast
При выборке данных с этим хинтом СУБД будет пропускать строки, блокированные другими транзакциями, не ожидая разблокирования ресурсов. Хинт readpast можно использовать только в команде select. При этом в текущем соединении должен быть установлен уровень изолированности readcommitted.
3. Программа работы
1. Изучение SQL-операторов управления транзакциями.
2. Изучение уровней изолированности транзакций и способов блокирования.
1. Изучить основные сведения из теории.
2. Изучить SQL-операторы обработки транзакций.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.