|
Программирование >> Реализация баз данных
,35 е транзакциями овками в SQ Глава 12 Занятие 2. Управление транзакциями в SQL Seer В составе можно исполнять почти все операторы Если при выполнение шакцин не возникает никаких ошибок, то все модификации БД, сделанные во время выполнения становятся постоянными. Все транзакции, во время которых выполняется данных, достигнут новой точки согласованности и будут зафиксированы, либо для них выполняется откат с возвратом к исходному состоянию согласованности. Транзакции не остаются в промежуточном состоянии, в котором БД не согласована адств\ет несколько типов транзакций. Транзакция характеризуется рядом В этом занятии рассказано о свойствах транзакций и типах транзакций, Server, а также о том, как начинать и завершать транзакции, применяя Transact-SQL. Изучив материал этог 1тия, вы сможете: перечислить свойства транзакций; / дать определение различным типам транзакций; запускать и останавливать транзакции с помощью Transact-SQL. Продолжительность занятии - около 35 минут. Обзор транзакций SQL Server Транзакция - это последовательность операций, выполняемая как целостная логическая единица работы. Четыре свойства логической единицы работы позволяют отнести ее к транзакциям. Эти свойства (атомарность, согласованность, изоляция и устойчивость) называются АСШ-свойствами (от англ. atomicity, consistency, isolation, durability). Атомарность. Транзакциядолжиа представлять собой атомарную (неделимую) едини цу работы (исполняются либо всг модификации, из которых состоит транзакция, либо ни одна). Согласованность. По завершении транзакции все данные должны остаться в согласованном состоянии. Чтобы сохранить всех данных, необходимо выполне-ни икации транзакций по всем правилам тенным в реляционных СУБД. По завершении транзакции внутренние структуры данных, например индексы в виде В-дерева и должны остаться целыми. Модификации, выполняемые транзакциями, следует изолировать от модификаций, параллельно выполняемых другими транзакциями. Данные доступны для транзакции в том состоянии, в котором они пребывали до изменения их другой параллельной транзакцией или после ее завершения. Данные в промежуточном состоянии не доступны для транзакции. способ называется упорядочением, поскольку он воспроизводит результат путем загрузки исходных данных и повтора серии транзакций. Устойчивость. По завершение кции ее результат должен сохраниться в системе. Модификации не исчезают же при аварии системы. SQL Server предоставляет обеспечивающие изоляцию тран- закций. SQL Server также предоставляет средства обеспечения устойчивости транзакций. Даже в случае отказа аппаратной ч; сти сервера, ошибки ОС или самого SQL Server при повторном запуске SQL Server с транзакций удастся вернуть БД в со- стояние на момент аварии, автоматически откатив все незавершенные транзакции. Кроме того, SQL Server поддерживаем правления транзакциями, обеспечивающие их 13-2051 атомарность и согласованность. Запущенная транзакция должна быть успешно заверше-в противном случае SQL Server отменит все модификации данных, выполненные после начала Приложения управляют транзакциями, главным образом определяя моменты их начала и окончания. Можно задать эти параметры средствами операторов Transact-SQL или функций API БД. Кроме того, система должна корректно обрабатывать ошибки, которые прерывают транзакцию до ее завершения. Управление транзакциями етвляется на уровне соединения. После начала транзакции в соединении и до ее завершения все выполненные в этом соединении операторы Transact-SQL становятся частью транзакции. Определение границ транзакции Для определения момента начала и окончания транзакции используют операторы Transact- SQL, функции и методы API. Операторы Transact-SQL. Границы транзакции определяются операторами BEGIN TRANSACTION, COMMIT TRANSACTION, COMMIT WORK, ROLLBACK TRANSACTION, ROLLBACKWORKhSETIMPLICIT TRANSACTIONS. Их применяют главным образом в приложениях DB-Library и сценариях Transact-SQL (например, в сие-нариях, использующих утилиту командной строки Функции и методы API. API БД, например ODBC, OLE DB и ADO, содержат функции и методы, задать границы Эти механизмы в основном используются для управления транзакциями в приложениях SQL Server. Каждая транзакция управляется только одним из этих методов. Если вы попробуете воспользоваться для управления одной транзакции двумя методами сразу, рискуете получить неопределенный результат. Например, не следует начинать транзакцию с помощью функции ODBC API, а завершать ее средствами оператора Transact-SQL COMMIT, иначе драйвер SQL Server ODBC не получит уведомления о завершении транзакции. В этом случае для завершения стоит использовать функцию ODBC Оператор ct-SQL, разрешенные в транзакциях В транзакциях допустимо использовать все операторы Transact-SQL, кроме перечисленных ниже: ALTER DATABASE LOAD DATABASE BACKUP LOG LOAD I RANSACTION, CREATE DATABASE RECONFIGURE DISKINiT RESTORE DATABASE DROP DATABASE RESTORE LOG DUMP TRANSACTION UPDATE STATISTICS Кроме в транзакциях нельзя устанавливать параметры БД с процедуры sp dboption или применять другие системные процедуры, модифицирующие БД master. Программирование эффективных транзакций Рекомендуется создавать как можно более короткие шакиии. После начала транзакции СУБД приходится резервировать много ресурсов и удерживать их до завершения транзакции, чтобы обеспечить ее ACID-свонства. При модификации данных изменяемые строки следует защитить монопольными блокировками, не допускающими чтения этих строк другими транзакциями, причем необходимо, чтобы блокировки удерживались до фикса- ции транзакции или ее отката. мости от заданного уровня изоляции транзакции операторы SELECT устанавливают которые необходимо удерживать до фик- сации транзакции или ее отката. Следует делать транзакции как можно короче, чтобы снизить конкурентную борьбу за блокировки между это осо- бенно важно в многопользовательских системах. Медленные, малоэффективные транзакции не создают особых проблем в системах с небольшим числом пользователей, но в системах с тысячами пользователей они недопустимы. Чтобы программировать эффективные транзакции, следует придерживаться следующих правил: нельзя требовать от пользователей ввода информации во время транзакции; не стоит начинать транзакцию ЕО время просмотра данных; транзакции должны быть максимально короткими; разумно используйте нижние уровни изоляции транзакций и параметры параллельного выполнения курсора низкого уровня, в частности параметры оптимистического параллельного выполнения; необходимо минимизироват.см данных, к которым имеет доступ транзакция. Как избежать проблем с параллельным выполнением Чтобы при параллельном выполнении не возникало проблем, соблюдать ос- торожность при управлении неявными транзакциями. При использование мных транзакций любой оператор Transact-S(JL, следующий за COMMIT и ROLLBACK, автоматически запускает нову мкцию В такой ситуации новая транзакции .ке г быть начата во время просмотра данных приложением или даже во время ожидания ввода информации пользователем. После выполнения последней транзакции, необходимой для зашиты модифицированных данных, следует отключить режим неявных транзакций до момента, пока он снова не потребуется для защиты модифицированных данных. Этот процесс позволяет SQL Server использовать режим автоматического подтверждения транзакций во время просмотра данных и вводимой пользователем информации. Ошибки, возникающие при обработке транзакции Если из-за серьезной ошибка лкииа завершилась неудачно, SQL Server автоматически откатывает ее и освобождает ресурсы, которые она удерживала. При обрыве сетевого соединения с клиентом сеть уведомляет SQL Server об этом событии и выполняется откат всех незавершенных транзакций этого соединения. Соединение разрывается при сбое в работе клиентского приложения, отключении или перезапуске клиентского компьютера. При этом после получения от сети уведомления о разрыве соединения, SQL Server откатывает все прерванные транзакции. Если клиент завершает приложение, все незавершенные транзакции также Если при исполнении пакета возникает ошибка периода выполнения (например, нарушение ограничения), SQL Server по умолчанию откатывает только результаты вызвавшего ошибку оператора. Режим по умолчанию разрешается изменить посредством оператора SET XACTABORT. После исполнения оператора SET XACTABORT любая ошибка периода выполнения вызывает автоматический откат текущей транзакции. SET XACTABORT не действует на ошибки компиляц.ги (например, на синтаксические ошибки). Именно программист отвечает за выбор приложением правильного действия (COMMIT или ROLLBACK) при возникновении ошибки периода выполнения или ошибки компиляции.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |