Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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

Поиск

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

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

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

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

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

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

 

 

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

 

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

Инструкции COMMIT и rollbackможно использовать и в интерактивном режиме, но на практике это случается редко. Обычно интерактивный SQL применяется для запросов на выборку и гораздо реже — для запросов на изменение; изменения, состоящиеиз нескольких инструкций, практически никогда не вводятся в интерактивном режиме Поэтому в интерактивном режиме транзакции не играют большой роли. На самом деле во многих интерактивных СУБДпо умолчанию установлен режим «автоматическогозавершения», при котором инструкция COMMITавтоматически выполняется после каждой инструкции SQL, вводимой пользователем. В результате каждая интерактивнаяинструкция SQL становится отдельной транзакцией.

 

Другие модели транзакций

Внескольких коммерческих СУБДиспользуется модель транзакции, отличная от модели ANSI/ISO и DB2, что предоставляет пользователям дополнительные возможности при выполнении транзакций. Одной из таких СУБДявляется Sybase, предназначеннаядля создания приложений, связанных с оперативной обработкой транзакций. В СУБД SQL Server, созданной на основе Sybase, используется та же модель транзакции, что и в Sybase.

В Sybase применяется диалект Transact-SQL, в котором для обработки транзакций используются четыре инструкции:

■ Инструкция begin transactionсообщает о начале транзакции В отличие от модели транзакции в стандарте ANSI/ISO, где окончание предыдущей транзакции неявно задает начало следующей, в Sybase начало транзакции задается явно с помощью данной инструкции.

■ Инструкция commit transactionсообщает об успешномокончании транзакции. Как и в модели стандарта ANSI/ISO, все изменения, сделанные в базе данных в ходе выполнения транзакции, становятся постоянными. Однако новая транзакция не начинается автоматически.

■ Инструкция SAVE TRANSACTIONсоздает внутри транзакции точку сохранения. СУБД Sybase записывает состояние базы данных в текущей точке транзакции и присваивает сохраненному состоянию имя точки сохранения, указанное в инструкции.

■ Инструкция rollbackиграет две роли. Если в ней указана точка сохранения (форма ROLLBACK ТО имя_точки _сохранения ), то Sybase отменяет изменения, сделанные в базе данных после точки сохранения, возвращая транзакцию к месту, где была выполнена инструкция SAVE TRANSACTION.Если точка сохранения не указана, то инструкция ROLLBACKотменяет все изменения, сделанные в базе дан­ных после инструкции BEGIN TRANSACTION.

 

Журнал транзакций *

Реализация в СУБД принципа «все или ничего» по отношению к инструкциям транзакции кажется неискушенному пользователю почти чудом. Каким образом СУБД может отменить изменения, внесенные в базу данных, если во время выполнения транзакции происходит системная ошибка? В различных СУБД для этого используются различные методы. Но все они, как правило, основаны на применении журнала транзакций (рис. 12.3). Ниже в упрощенной форме объясняется, для чего он служит.

 

 

Рисунок 12.3 – Журнал транзакций

 

Когда пользователь выполняет запрос на изменение базы данных, СУБД автоматически вносит в журнал транзакций одну запись для каждой строки, измененной в процессе выполнения запроса. Эта запись содержит две копии строки. Одна копия представляет собой строку до изменения, а другая — после изменения. Только когда в журнале будет сделана запись, СУБД изменит физическую строку на диске. Затем, если пользователь выполняет инструкцию commit, вжурнале отмечается конец транзакции. Если пользователь выполняет инструкцию rollback,СУБД обращается к журналу и извлекает из него «исходные» копии строк, измененных во время транзакции. Используя эти копии, СУБД возвращает строки в прежнее состояние и таким образом отменяет изменения, внесенные в базу данных в ходе транзакции.

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

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

 



Поделиться:


Последнее изменение этой страницы: 2021-05-27; просмотров: 119; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.32.6 (0.009 с.)