Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РЭУБД лекции.doc
Скачиваний:
25
Добавлен:
27.08.2019
Размер:
399.36 Кб
Скачать

Управление транзакциями и кэширование памяти

Структурная схема терминов

Механизм транзакций

Механизм транзакций используется для поддержания целостности БД. Транзакция – это набор операций с БД, который переводит БД из одного целостного состояния в другое. Чтобы транзакция была успешной, должны выполниться все операции, входящие в ее состав. В случае возникновения ошибки хотя бы одной из операций вся транзакция считается неуспешной, и результаты всех операций отменяются. Транзакция может быть явной и неявной как при работе с локальными, так и при работе с удаленными БД.

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

Неявная транзакция запускается и завершается автоматически при модификации набора данных. Утверждается методом Post, а отменяется Cancel для локальных БД. Для удаленных БД используется PassThrough SQL-запрос, его выполнение приводит к запуску неявной транзакции. Такой SQL-запрос по модификации данных выполняется с помощью метода ExecSQL компонента Query. Способ взаимодействия с сервером на уровне такой транзакции определяет параметр SQLPASSTHRU MODE псевдонима БД или драйвера (в нашем случае InterBase).

Явной транзакцией управляет программист. Для реализации механизма явных транзакций Delphi предоставляет специальные методы компонента DataBase:

StartTransaction – метод начинает транзакцию. После него располагаются инструкции, составляющие транзакцию. При выполнении операций производится обработка возникающих исключений.

Commit – подтверждает успешную транзакцию. После него все изменения вступают в силу.

Rollback – отменяет транзакцию и действия всех операций в ее рамках. Вызывается при возникновении исключения.

Можно использовать аналогичные инструкции языка SQL-сервера:

  • SET TRANSACTION;

  • COMMIT;

  • 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 COMMITED разрешена модификация записей;

  • SHARED READ – разрешены чтение и модификация записей;

  • SHARED WRITE – разрешено чтение записей, а для транзакций с уровнем изоляции SNAPSHOT или READ COMMITED разрешена модификация записей.