Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Модель транзакции в стандарте 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 с.) |