Читайте также:
|
|
Если транзакция запущена – явно посредством команды start transac_ tion или неявно сервером БД, – пользователь должен явно завершить ее, чтобы внесенные им изменения стали постоянными. Это делается с помощью команды commit, которая указывает серверу пометить изме_ нения как постоянные и высвободить все ресурсы (т. е. снять блоки_ ровку страниц или строк), используемые во время транзакции.
Если решено отменить все изменения, сделанные с момента начала транзакции, необходимо выполнить команду rollback, которая указы_ вает серверу вернуть данные в то состояние, в каком они находились до начала транзакции. После завершения выполнения rollback все ре_ сурсы, используемые сеансом, высвобождаются.
Кроме выполнения команды commit или rollback, возможны еще не_ сколько сценариев завершения транзакции – или как косвенный ре_ зультат действий пользователя, или как результат чего_то, находяще_ гося вне власти пользователя:
• Выключение сервера; в этом случае откат транзакции будет выпол_ нен автоматически при возобновлении работы сервера.
• Выполнение SQL_выражения управления схемой, например alter table, что приведет к фиксации текущей транзакции и запуску но_ вой.
• Выполнение еще одной команды start transaction, в результате чего происходит фиксация предыдущей транзакции.
• Преждевременное завершение транзакции сервером, который вы_ явил взаимоблокировку (deadlock) и решил, что виновна в этом дан_ ная транзакция. В этом случае будет выполнен откат транзакции и пользователь получит сообщение об ошибке.
Из этих четырех сценариев первый и третий довольно просты, а вот два других заслуживают некоторого внимания. Если говорить о втором сценарии, изменения базы данных, независимо от того, было ли это до_ бавление новой таблицы, индексация или удаление столбца из табли_ цы, не могут быть отменены. Таким образом, команды, изменяющие схему, должны выполняться вне транзакции. Поэтому если транзак_ ция уже запущена, сервер зафиксирует ее, выполнит команду(_ы) SQL_выражений управления схемой и затем автоматически запустит новую транзакцию для данного сеанса. Сервер не будет информиро_ вать пользователя о происходящем, поэтому следует действовать ак_ куратно, чтобы выражения, составляющие единицу работы, невзна_ чай не были разбросаны сервером по нескольким транзакциям.
Дата добавления: 2015-08-17; просмотров: 31 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Запуск транзакции | | | Работа с учебником, и изучение научной литературы по психологии |