русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Инструкции COMMIT и ROLLBACK


Дата добавления: 2013-12-24; просмотров: 3344; Нарушение авторских прав


ТРАНЗАКЦИИ

Как правило, изменения в базе данных обусловлены реальными событиями, такими, например, как увольнение сотрудника. При этом подобное событие приводит не к одному, а к нескольким изменениям в базе данных, реляционная схема которой приведена в приложении:

- закрепление всех объектов, увольняемого сотрудника за другими сотрудниками отделения;

- удаление записи сотрудника из базы данных.

Чтобы в базе данных не возникли противоречия, указанные изменения следует выполнить как одно целое. Если из-за системного сбоя или другой ошибки получится, что одна часть изменений была внесена, а другая – нет, то это нарушит целостность хранимых данных. При последующих вычислениях результаты окажутся неверными. Поэтому несколько изменений базы данных, которые вызваны одним событием, необходимо вносить по принципу “либо все, либо ничего”. Это обеспечивается средствами обработки транзакций.

Транзакцией называют несколько последовательных инструкций SQL, которые рассматриваются как единое целое. Инструкции, входящие в транзакцию, выполняют взаимосвязанные действия. Каждая инструкция решает часть общей задачи, но для того, чтобы задачу можно было считать решенной, требуется выполнить все эти инструкции.

Понятие транзакции является очень важным для программ, изменяющих содержимое базы данных, так как позволяет обеспечить ее целостность. Транзакции в реляционной СУБД подчиняются следующему правилу:

Инструкции, входящие в транзакцию, рассматриваются как неделимое целое. Либо все инструкции будут выполнены успешно, либо ни одна из них не должна быть выполнена”.

Как следует из рисунка 22, СУБД должна подчиняться этому правилу, даже если во время выполнения транзакции произойдет ошибка в программе или аппаратный сбой. В любом случае СУБД должна гарантировать, что при восстановлении базы данных после сбоя “частичное выполнение транзакции” в ней отражено не будет.



 

 

Рисунок 22 Понятие транзакции

В СУБД обработка транзакций реализована с помощью двух инструкций:

• инструкция COMMIT сообщает об успешном окончании транзакции. Она информирует СУБД о том, что транзакция завершена, все инструкции, входящие в состав транзакции, выполнены успешно и противоречия в базе данных не возникли;

• инструкция ROLLBACK сообщает о неуспешном окончании транзакции. Она информирует СУБД о том, что пользователь не хочет завершать транзакцию; СУБД должна отменить все изменения, внесенные в базу данных в результате выполнения транзакции, т.е. СУБД должна возвратить базу данных в состояние, в котором она находилась до начала транзакции.

Инструкции COMMIT и ROLLBACK являются такими же инструкциями SQL, как и SELECT, INSERT или UPDATE. Однако в отличие от инструкций, изменяющих данные в базе, инструкции управления транзакциями редко употребляются в интерактивном режиме. При интерактивной обработке смысл их применения становится очевидным в контексте параллельной работы с сетевой базой данных нескольких пользователей. Вопросы обработки СУБД транзакций в многопользовательском режиме рассматриваются ниже в настоящем разделе. Здесь же следует отметить, что проверка успешности выполнения инструкций, входящих в транзакцию и выполнение отката транзакции (ROLLBACK) или подтверждение ее успешного выполнения (COMMIT) осуществляется обычно программно, посредством специально разработанных и стандартизированных интерфейсов. Программа в таком случае должна обеспечить корректную генерацию строк запросов SQL с целью дальнейшей их пересылки на выполнение СУБД. В функцию интерфейсов помимо пересылки по сети пользовательских запросов входит также обеспечение корректного соединения с базами данных на основе существующих сетевых протоколов, а также предварительная обработка запросов, включающая их грамматический разбор и “связывание” параметров в предложениях WHERE. Рассмотрение одного из таких средств разработки приложений баз данных будет рассмотрено на примере ODBC API (Open Database Connectivity –Открытый доступ к базам данных, Application Programming Interface – интерфейс прикладного программирования), который в настоящее время является de facto отраслевым стандартом.

22.2. Модель транзакции в стандарте ANSI/ISO

В стандарте ANSI/ISO определена модель транзакции, а также указаны задачи инструкций COMMIT и ROLLBACK. В большинстве коммерческих СУБД (однако, не во всех) используется именно эта модель, которая была создана на основе модели, принятой в СУБД DB2. В стандарте говорится, что транзакция автоматически начинается с выполнения пользователем или программой первой инструкции SQL. Далее происходит последовательное выполнение остальных инструкций SQL до тех пор, пока транзакция не завершится одним из четырех способов:

• Инструкция COMMIT завершает выполнение текущей транзакции. Изменения, внесенные в базу данных, становятся постоянными. Новая транзакция начинается непосредственно после инструкции COMMIT.

• Инструкция ROLLBACK отменяет выполнение текущей транзакции. Произведенные изменения отменяются. Новая транзакция начинается непосредственно после инструкции ROLLBACK.

• Успешное завершение программы (для программного SQL) считается также и успешным окончанием транзакции, как если бы была выполнена инструкция COMMIT. Поскольку программа завершена, новая транзакция не начинается.

• Неуспешное завершение программы (для программного SQL) считается также и неуспешным окончанием транзакции, как если бы была выполнена инструкция ROLLBACK. Поскольку программа завершена, новая транзакция не начинается. На рисунке 23 в графическом виде представлены типичные транзакции, иллюстрирующие четыре перечисленные ситуации.

 

 

Рисунок 23 Выполненные и отмененные транзакции

 

Отметим, что, согласно модели транзакции в стандарте ANSI/ISO, пользователь или программа могут выполнить транзакцию всегда. Чтобы начать транзакцию, не требуется предпринимать никаких специальных действий; транзакция начинается автоматически вместе с первой инструкцией SQL или непосредственно после окончания предыдущей транзакции.

В стандарте ANSI/ISO существует понятие программного SQL, предназначенного для использования в прикладных программах. В программном SQL транзакции играют важную роль, поскольку даже в простых прикладных программах для выполнения определенной задачи часто приходится применять последовательность из двух или трех инструкций. В связи с тем, что пользователь может изменить принятое решение или могут возникнуть какие-либо другие обстоятельства (например, на складе отсутствует продукция, которую пользователь хочет заказать), прикладная программа после частичного выполнения транзакции должна иметь возможность выбора: либо выполнить транзакцию до конца, либо отменить ее. Инструкции COMMIT и ROLLBACK обеспечивают именно такую возможность.

Как уже указывалось, инструкции COMMIT и ROLLBACK можно использовать и в интерактивном режиме, но на практике это случается редко. Обычно интерактивный режим применяется для запросов на выборку и гораздо реже – для запросов на изменение; изменения, состоящие из нескольких инструкций, практически никогда не вводятся в интерактивном режиме. Поэтому в интерактивном режиме транзакции не играют большой роли. На самом деле во многих интерактивных СУБД (не во всех) по умолчанию установлен режим “автоматического завершения”, при котором инструкция COMMIT автоматически выполняется после каждой инструкции SQL, вводимой пользователем. В результате каждая интерактивная инструкция SQL становится отдельной транзакцией. В СУБД ORACLE при работе в интерактивном режиме после ввода последовательно нескольких инструкций по изменению содержимого базы данных необходимо указывать инструкцию COMMIT, иначе произведенные изменения будут зафиксированы только в журнале транзакций, т.е. они не будут иметь “постоянного” характера, так как данные таблиц останутся без изменений.



<== предыдущая лекция | следующая лекция ==>
Изменение первичных и внешних ключей | Транзакции и работа в многопользовательском режиме


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.132 сек.