DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Операторы управления транзакциями

 

В Oracle нет необходимости в операторе “начала транзакции”. Транзакция на­чинается неявно с первым же оператором, который модифицирует данные (пер­вый оператор, получающий блокировку TX). Вы можете явно начать транзакцию, используя команду SET TRANSACTION или пакет DBMS_TRANSACTION, но этот шаг в Oracle не обязателен, в отличие от различных прочих СУБД. Оператор COMMIT или ROLLBACK явно завершает транзакцию. 
На заметку! Команда ROLLBACK TO SAVEPOINT не завершает транзакцию! Только полная правильная команда ROLLBACK может ее завершить. 
Вы всегда должны явно завершать транзакцию с помощью COMMIT или ROLLBACK, в противном случае инструмент/среда, используемая вами, самостоятельно выбе­рет то или другое за вас. Если вы нормально выходите их сеанса SQL*Plus, без фик­сации или отката, то SQL*Plus предполагает, что вы хотите зафиксировать вашу работу и делает это. С другой стороны, если вы выходите из программы Pro*C, то имеет место неявный откат транзакции. Никогда не полагайтесь на неявное пове­дение, потому что в будущем оно может измениться. Всегда завершайте явно свои транзакции командами COMMIT или ROLLBACK. 
Транзакции в Oracle атомарны — в том смысле, что каждый оператор, состав­ляющий транзакцию, фиксируется (становится постоянным) или же происходит откат их всех. Эта защита распространяется также и на индивидуальные операто­ры. Весь оператор либо полностью успешен, либо полностью неудачен. Обратите внимание, что я сказал, что “оператор” откатывается. Сбой одного оператора не вызывает автоматического отката всех предыдущих операторов. Их работа предо­храняется и должна быть либо зафиксирована, либо отменена (путем отката) вами. Прежде чем мы обратимся к деталям относительно того, что означает атомарность для оператора и транзакции, давайте рассмотрим различные операторы управле­ния транзакциями, которые доступны нам. 
COMMIT. Чтобы использовать простейшую форму этого оператора, вы про­сто пишете COMMIT. Можно применить более многословную форму и запи­сать COMMIT WORK, но эти две формы эквивалентны. COMMIT завершает вашу транзакцию и фиксирует все проведенные в ней изменения как постоянные. Существуют расширения оператора COMMIT для распределенных транзакций. Эти расширения позволяют вам пометить COMMIT некоторым осмысленным комментарием и принудительно зафиксировать распределенную транзакцию. 

•         ROLLBACK. Чтобы использовать простейшую форму этого оператора, вы про­сто пишете ROLLBACK. Опять же, существует более многословный вариант ROLLBACK WORK, но эти формы эквивалентны. Откат (rollback) завершает вашу транзакцию и отменяет все незафиксированные изменения, проведенные в 
ней. Это делается посредством чтения информации, хранящейся в сегментах отката/отмены (я пойду дальше, и стану называть их сегментами отмены (undo segments), как это принято в терминологии Oracle 10g) и восстановле­ния блоков базы данных в состояние, в котором они пребывали до начала транзакции. SAVEPOINT. SAVEPOINT позволяет вам создать “маркерную точку” внутри транзакции. В одной транзакции можно иметь множество таких точек. 
ROLLBACK TO <SAVEPOINT>. Этот оператор применяется вместе с командой SAVEPOINT. Вы можете откатить транзакцию к этой маркерной точке, не отка­тывая работу, выполненную до нее. Таким образом, вы можете написать два оператора UPDATE, за которыми следует SAVEPOINT, и затем — два оператора DELETE. Если ошибка или любого рода исключительная ситуация случится во время выполнения операторов DELETE, вы можете перехватить исключе­ние и выполнить команду ROLLBACK TO SAVEPOINT— транзакция откатится к именованной SAVEPOINT, отменяя всю работу, выполненную операторами DELETE, но оставляя в силе то, что сделано операторами UPDATE. 
SET TRANSACTION. Этот оператор позволяет устанавливать различные тран­закционные атрибуты, такие как уровень изоляции транзакции и указание на то, является ли она транзакцией только для чтения или для чтения-записи. Вы можете также применять этот оператор для того, чтобы заставить тран­закцию использовать специфический сегмент отката при ручном управлении отменой, хотя это и не рекомендуется. Автоматическое и ручное управление отменой мы рассмотрим более подробно в главе 9. 

Вот и все, больше нет никаких других операторов управления транзакциями. Наиболее часто используемые управляющие операторы — это COMMIT и ROLLBACK. Оператор SAVEPOINT имеет довольно-таки специальное назначение. Внутренне Oracle использует его часто, и вы также можете найти ему применение в своих приложениях.
 


Кондиционеры lg кондиционеры panasonic кондиционеры mitsubishi кондиционеры daikin. . дрочить







jAntivirus