Структурная схема терминов
Механизм транзакций
Механизм транзакций используется для поддержания целостности БД. Транзакция – это набор операций с БД, который переводит БД из одного целостного состояния в другое. Чтобы транзакция была успешной, должны выполниться все операции, входящие в ее состав. В случае возникновения ошибки хотя бы одной из операций вся транзакция считается неуспешной, и результаты всех операций отменяются. Транзакция может быть явной и неявной как при работе с локальными, так и при работе с удаленными БД.
Для удаленной БД, кроме поддержания целостности данных, механизм транзакций позволяет определить порядок взаимодействия запросов. Для соперничающих запросов устанавливается режим одновременного доступа к одним и тем же данным.
Неявная транзакция запускается и завершается автоматически при модификации набора данных. Утверждается методом 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 разрешена модификация записей.
Механизм кэшированных изменений
КЭШем называется специально выделенная область оперативной памяти (буфер).
Кэшированные изменения БД заключаются в том, что на компьютере клиента в КЭШе создается локальная копия данных, и все изменения в данных выполняются в этой копии. Сделанные изменения можно подтвердить, перенеся их в основную БД, или отказаться от них. Этот механизм напоминает транзакции, но, в отличие от них, существенно снижает нагрузку на сеть, т.к. все изменения в основную БД передаются одним пакетом. Однако для всех записей локальной копии отсутствуют блокировки на изменение их значений, в то время как для основной БД, находящейся на сервере, они могут быть в этот момент установлены другим приложением.
Механизм кэшированных изменений реализуется в приложении через компоненты DataBase, Table, Query (при доступе с помощью BDE), а также через специально предназначенный для этого компонент UpdateSQL. Компонент UpdateSQL используется для подтверждения кэшированных изменений и обеспечивает модификацию наборов данных, доступных только для чтения.
Для наборов данных DataBase, Table, Query включением режима кэшированных изменений управляет свойство CachedUpdates, принимающее два значения:
True – активизирует режим;
False – выключает его (по умолчанию).
После включения режима кэширование производится автоматически. Подтверждение кэшированных изменений выполняют в два этапа:
· запись кэшированных изменений в основную БД;
· подтверждение или отмена сделанных изменений.
Метод ApplyUpdates набора данных записывает в БД изменения в кэшированных данных. Данные пересылаются одним пакетом, что снижает нагрузку на сеть. Однако в основной БД в текущий момент могут быть блокированные записи, поэтому потребуется обработка исключений (удобно использовать конструкцию TRY … EXCEPT).
Метод CommitUpdates набора данных подтверждает изменение.
Метод CancelUpdates отменяет их, возвращая БД в исходное состояние.
Тема 3.7.Перехват исключительных ситуаций и обработка ошибок
Дата добавления: 2021-09-25; просмотров: 334;