Использование поименованных транзакций и точек сохранения
Транзакция.
Транзакция – это логическая единица работы, которую должен выполнить SQL-Server. Она может включать в себя один или несколько операторов SQL-Server; при этом серверу должно быть понятно, какие операторы из пакета являются частью транзакции.
Транзакции, состоящие из одного оператора, можно выполнить с помощью программы ISQL. Для этого нужно ввести их текст и набрать команду GO. Такие транзакции идеальны в случае, если требуется выполнить одну простую операцию, и она является самодостаточной.
Ограничения, налагаемые на транзакции.
Существуют операции, которые нельзя выполнить с помощью транзакций. Речь идет о таких операциях, которые нельзя отменить вообще или, по крайней мере, без существенного влияния на основные компоненты системы. Транзакции предназначены для локальной защиты информации от обрабатывающихся в данный момент SQL-Операторов, а не для резервирования данных. Если необходимо защититься от возможного изменения, ведущего к повреждению системы, сначала сделайте резервную копию базы данных и журнала транзакций, а затем уже приступайте к выполнению операции.
Основные сведения о блокировке
Основным рабочим объектом в SQL-Server является страница данных размером в 8 Кбайт. Это означает, что любые операции, выполняемые сервером, обычно охватывают фрагменты данных, которые занимают, по меньшей мере, 8 Кбайт.
Существует три типа блокировки, которые затрагивают большие, чем одна строка, фрагменты данных: страницу, таблицу и экстент.
Блокировка страницы происходит в случае, когда пользователь обращается к нескольким строкам одной страницы данных. В результате блокируется намного больший объем данных, чем при обращении к единственной строке.
Блокировка таблицы происходит в том случае, когда пользователь делает запрос на обновление таблицы, не включив в нее директиву WHERE. Кроме того, такой тип блокировки происходит, когда количество заблокированных страниц данных превосходит некоторый заранее установленный порог.
Блокировка экстента происходит в случае, когда для ответа на запрос пользователя SQL-Server нужно создать новый экстент базы данных.
Типы блокировки
SQL-Server может применить различные типы блокировки к строкам, страницам и таблицам базы данных: SHARED (Разделяемая), EXCLUSIVE (Монопольная), UPDATE (Обновляемая). Названия блокировок типа SHARED и EXCLUSIVE говорят сами за себя:
первая позволяет другому процессу выполнять блокировку одной и той же строки или страницы, а вторая нет.
Использование поименованных транзакций и точек сохранения
При написании больших хранимых процедур и приложений восприятие кода значительно усложняется. Остается лишь надеяться, что программисты будут применять один и тот же стиль форматирования кода.
Но даже самый аккуратный программист обнаружит, что совершенно невозможно запомнить, сколько отступов было сделано до выдачи команды ROLLBACK в случае возникновения ошибки или некоторого программного ограничения. Именно для этих целей и используются поименованные транзакции и точки сохранения. Они представляют собой отмены операций вплоть до поименованной или сохраненной части выполняющегося кода, даже если эта часть находится на более высоком уровне вложения.
Поименованные транзакции представляют собой удобный способ назначения идентификатора всему телу программы. С их помощью можно легко отменить большие фрагменты кода. Чтобы создать поименованную транзакцию, добавьте ее имя в операторе BEGIN TRAN.
Точка сохранения (SavePoint) - в некотором смысле является аналогом поименованной транзакции. С ее помощью можно отметить место в коде, до которого при помощи оператора ROLLBACK можно будет отметить выполнение операции. Чтобы создать точку сохранения, необходимо выполнить следующую функцию:
SAVE TRANSACTION tran_name
А затем в операторе ROLLBAC нужно указать идентификатор tran_name.
Пример транзакции:
BEGIN TRAN
INSERT Товар (Название, остаток)
VALUES ('v',40)
COMMIT TRAN
Вывод: Изучил понятие транзакции и блокировки.