Set transaction

Обычно эта команда используется для определения начала транзакции. Если после задания команды set transaction (но до появления команды завершения транзакции) будут выполнены какие-либо изменения базы данных, все сделанные изменения будут рассматриваться как часть гранзакции. Оператор set transaction не является обязательным, поскольку транзакция автоматически запускается при следующих обстоятельствах:

{ Сразу после того, как вы вошли в Oracle через SQL*Plus и выполнили пер­вую команду

{ Непосредственно после выдачи команд commit или rollback, завершающих транзакцию

{ При выходе пользователя из SQL*PIus В В случае отказа системы

{ При появлении команды языка определения данных, например alter database

По умолчанию транзакция предоставляет доступ для чтения и записи, если только вы не изменили это правило умолчания, задав команду set transaction read only. Кроме того, с помощью команды set transaction можно устанавливать уровень локализации. Команда set transaction isolation level senali zable специфицирует для приводимой в последовательную форму (senalizable) транзакции уровень локализации в соответствии с тем, как он определен в SQL92. Если такая транзакция содержит операторы DML, пытающиеся обновить любой ресурс, который, возможно, был обновлен другой транзакцией, незавершенной к моменту начала текущей транзакции, оператор DML завершится аварийно. Определением поведения транзакции Oracle по умолчанию является команда set transaction isolation level read committed. Если транзакция содержит оператор DML, требующий блокировки строк, удерживаемых другой транзакцией, этот оператор переходит в состояние ожидания, пока не будет снята блокировка этих строк. Ниже приведен пример:

SQL> SET TRANSACTION READ ONLY;

Transaction set.

SQL> rollback,-

Rollback complete.

SQL> SET TRANSACTION READ WRITE;

Transaction set.

SQL> rollback;

Rollback complete.

SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Transaction set.

SQL> rollback,

Rollback complete.

SQL> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

Transaction set.

SQL> rollback,

Rollback complete.

СоветКоманда set transaction может появиться только как первый оператор в начале транзакции. Следовательно, мы обязаны каждую транзакцию завершать явно командой rollback, прежде чем начать следующую транзакцию с помощью команды set transaction.

Commit

В обработке транзакций оператор commit отражает момент времени, когда пользователь выполнил все изменения, которые он объединил в единую логическую группу, и, поскольку при этом не было сделано никаких ошибок, он готов сохранить результаты проделанной работы. Ключевое слово work является дополнительным словом в синтаксисе оператора commit, которое добавляется исключительно для удобочитаемости. При выдаче оператора commit неявно начинается новая транзакция базы данных, так как этот оператор закрывает текущую транзакцию и запускает новую. При этом все сделанные в базе данных изменения делаются постоянными. Предыдущее состояние данных теряется. Теперь все пользователи могут видеть все данные, а все контрольные точки стираются. Кроме того, важно понимать, что неявная операция commit происходит в базе данных при выходе пользователя из SQL*Plus или в том случае, если он выдает команду DDL, например create table, используемую для создания объектов базы данных, или alter table, используемую для их изменения. Ниже приведен пример:

SQL> COMMIT;

Commit complete.

SQL> COMMIT WORK;

Commit complete.

 

rollback

Если вы в какой-то момент выдали нежелательный оператор изменения данных, с помощью оператора rollback можно отказаться от сделанных в базе данных изменений. В результате выполнения этого оператора восстанавливается состояние данных, предшествующее началу транзакции. Снимаются блокировки со всех задействованных строк. Сразу после выдачи оператора rollback сеанс пользователя неявно начинает следующую транзакцию. В дополнение к откатам, выполняемым при появлении операторов rollback, неявные операторы rollback выполняются и в случае аварийного заверше­ния оператора по любой причине, а также если пользователь прервал выполнение оператора, нажав на клавиши Ctrl+C. Ниже приведен пример:

SQL> ROLLBACK;

Rollback complete.

SQL> ROLLBACK WORK;

Rollback complete.

После того как была выдана команда commit, становится невозможно выпол­нить откат (rollback) изменений Это становится ясно из следующего примера:

SQL> update emp set sal = 20000 where ename = 'KING;

1 row updated.

SQL> select sal from emp where enarne = 'KING;

SAL

SQL> commit;

Commit complete.

SQL> rollback;

Rollback complete.

SQL> select sal from emp where ename = 'KING';

SAL

savepoint

В некоторых случаях, когда, например, транзакция длится достаточно долго или если в ее рамках выполняется очень большое число изменений данных, вы, естественно, вовсе не будете в восторге, если потеряете все сделанные изменения только потому, что оказалось, что в последнем операторе содержались нежелательные изменения. Контрольные точки — это специальные операции, позволяющие разбить всю работу транзакции на несколько сегментов. В этом случае операции отката можно выполнять не до начала транзакции, а до последней контрольной точки, что позволяет оставить нетронутыми сделанные ранее изменения. Контрольные точки хороши в ситуации, когда необходимо восстановить какую-то часть незафиксированной (uncommitted) транзакции. В силу того что в приведенном ниже блоке кода был выполнен оператор rollback to savepoint so_far_so_good, при выполнении оператора commit будут сохранены только те изменения, которые были сделаны до того, как была установлена контрольная точка:

SQL> UPDATE products

2 SET quantity = 55

3 WHERE product» = 59495;

4 1 row updated.

SQL> SAVEPOINT so_far_so_good;

Savepoint created.

SQL> UPDATE spanky.products

2 set quantity = 504; 1 row updated.

SQL> ROLLBACK TO SAVEPOINT ao_far_so_good;

Rolloack complete.

SQL> COMMIT, Commit complete.

SQL> select quantity from spanky.products

3 where product* = 59495;

QUANTITY








Дата добавления: 2015-08-21; просмотров: 800;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.009 сек.