Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Desktop / For_exams / Smirnov / 1 - копия (26)

.txt
Скачиваний:
34
Добавлен:
27.03.2015
Размер:
4.13 Кб
Скачать
27. Транзакции Механизм реализации
Механизм транзакций используется для поддержания целостности БД: транзакция переводит БД из одного целостного состояния в другое. Чтобы транзакция была успешной должны выполниться все операции, входящие в ее состав. В случае возникновения ошибки в хотя бы одной из операций вся транзакция считается неуспешной, и результаты всех операций отменяются. Транзакция может быть явной и неявной.
Неявная транзакция запускается и завершается автоматически, явной транзакцией управляет программист. Рассмотренные средства компонента Database можно использовать и для удаленных баз данных. Кроме того, для удаленных БД имеются дополнительные возможности по управлению транзакциями.
При модификации удаленной БД также осуществляются неявные и явные транзакции. Для удаленных БД, кроме поддержания целостности данных, использование механизма транзакций позволяет определить порядок взаимодействия запросов. Для соперничающих запросов устанавливается режим одновременного доступа к одним и тем же данным.

Для модификации данных может использоваться SQL-запрос, выполняемый с помощью метода ExecSQL компонента Query. Такой запрос называют PassThrough SQL, его выполнение приводит к запуску неявной транзакции. Способ взаимодействия с сервером на уровне такой транзакции определяет параметр sqlpassthru mode псевдонима БД или драйвера (в нашем случае типа InterBase), который может принимать следующие значения:
1. shared autocommit — операторами модификации БД, например, update или insert, автоматически запускается неявная транзакция (по умолчанию); после внесения изменений эта транзакция автоматически подтверждается; разные транзакции могут использовать общее соединение с БД;
2. shared no autocommit — операторами модификации БД также автоматически запускается неявная транзакция, но автоматического ее подтверждения не происходит, и нужно самостоятельно выполнять оператор commit; разные транзакции могут использовать общее соединение с БД;
3. not shared — транзакции должны использовать различные соединения с БД и подтверждаться выполнением оператора commit.

Возможность явного управления транзакциями предоставляет язык SQL сервера, который имеет в своем составе следующие операторы:
1. set transaction — начать транзакцию;
2. commit — подтвердить транзакцию;
3. rollback — отменить транзакцию.
Оператор запуска явной транзакции имеет формат:
SET TRANSACTION
[READ WRITE | READ ONLY]
[WAIT | NO WAIT]
[[ISOLATION LEVEL]
{SNAPSHOT [TABLE STABILITY] | READ COMMITED}] [RESERVING <Список таблиц>
[FOR [{SHARED | PROTECTED}] [{READ | WRITE}]];
Все операнды этого оператора являются необязательными и позволяют управлять перечисленными ниже режимами транзакции.

Режим доступа к данным:
• read write — разрешены чтение и модификация записей (по умолчанию);
• read only — разрешено только чтение записей.

Поведение в случае конфликта транзакций при обновлении записей:
• wait — ожидание завершения другой транзакции (по умолчанию);
• no wait — прекращение данной транзакции.

Уровень изоляции от других транзакций (операнд isolation level):
• snapshot — чтение данных в состоянии на момент начала транзакции (по умолчанию); изменения, сделанные другими транзакциями, в данной транзакции не видны;
• snapshot table stability — предоставление транзакции исключительного доступа к таблицам; другие транзакции могут читать записи из таблиц;
• read commited — чтение только подтвержденных изменений в записях; если изменения еще не подтверждены, то читается предыдущая версия записи.

Блокирование таблиц, указанных в списке операнда reserving, для других транзакций:
• protected read — разрешено только чтение записей;
• protected write — для транзакций с уровнем изоляции snapshot или read committed разрешено только чтение записей;
• shared read — разрешены чтение и модификация записей;
• shared write — разрешено чтение записей; для транзакций с уровнем изоляции snapshot или read committed разрешена модификация записей.

Действие операторов commit и rollback по утверждению и отмене транзакции аналогично действию одноименных методов компонента Database.
Соседние файлы в папке Smirnov