- •3_Обработка транзакций в реальном масштабе времени
- •OLTP - технологии
- •Транзакция - единица работы в БД
- •Управление транзакциями
- ••Неповторяющиеся чтение - повторное чтение данных, которые были измены другой транзакцией между первым
- •Подсистема обработка транзакций СУБД
- ••Менеджер транзакций осуществляет координацию работы транзакций, выполняемых прикладными программами.
- •Транзакции и целостность БД
- •Сериализация транзакций
- ••Существует два подхода к сериализации транзакций: основанный на
- ••Сервер устанавливает блокировки автоматически в зависимости от текущего уровня изоляции транзакции, однако при
- ••SQL Server сам выбирает наиболее оптимальный объект для блокировки, однако пользователь может изменить
- •Блокировки транзакций
- •“Мертвые блокировки”
- •Метод временных меток
- •Четыре уровня изолированности транзакций (стандарт
- •Уровни определения изоляции транзакций (каждый уровень включает в себя предыдущий с предъявлением более
- •Символы выделения записи
- •Типы запросов, связанных с транзакциями
- ••Оптимистический метод управления характеризуется тем, что вместо непосредственного чтения данных берется значение из
- •Типы блокировки записей в MS Access
- ••Разделяемая блокировка (Shared Lock), обозначается латинской буквой S. Эта самый распространенный тип блокировки,
- •При добавлении, обновлении и удалении данных из таблицы можно отключить проверяемые ограничения. Отключение
- •Существует три метода обработки транзакций в языке VBA:
- ••Access поддерживает до 5 уровней вложенных транзакций
- •Создание триггера в проекте БД (ADP)
Типы блокировки записей в MS Access
Пессимистическая блокировка (adLockPessimistic)– блокировка страницы доступа к записи или записи в таблице или запросе от начала изменения поля в записи до завершения редактирования записи.
Оптимистическая блокировка (adLockOptimistic) – блокировка страницы доступа к записи или записи в таблице или запросе от начала выполнения метода Update в VBA до завершения записи в БД.
БД может быть заблокирована |
Блокировка БД через свойства ярлыка |
полностью в момент ее открытия |
|
(метод adModeShareExclusive в VBA) |
|
Чтобы заблокировать все записи в форме или объекте в режиме таблицы (и в базовых таблицах) во время их изменения, выберите параметр блокировка всех записей (свойство
RecordLocks=AllRecords).
•Разделяемая блокировка (Shared Lock), обозначается латинской буквой S. Эта самый распространенный тип блокировки, который используется при выполнении операции чтения данных. Гарантируется что данные, на которые она наложена, не будут изменены другой транзакцией. Однако чтение данных возможно.
•Монопольная блокировка (Exclusive Lock), обозначается латинской буквой X. Этот тип применяется при изменении данных. Если на ресурс установлена монопольная блокировка, гарантируется, что другие транзакции не могут не только изменять данные, но даже читать их.
При добавлении, обновлении и удалении данных из таблицы можно отключить проверяемые ограничения. Отключение проверяемых ограничений позволяет выполнить следующие транзакции:
•добавить новую строку данных в таблицу (используя инструкцию INSERT). Например, в прошлом существовало требование, ограничивающее почтовые индексы пятью цифрами, в данный момент требуется разрешить введение почтовых индексов, состоящих из девяти цифр. Старые данные с почтовыми индексами, состоящими из пяти цифр, будут сосуществовать с новыми данными, которые содержат почтовые индексы, состоящие из девяти цифр.
•изменить существующие строки (используя инструкции UPDATE). Например, можно заменить все существующие пятизначные почтовые индексы на девятизначные.
Выбирайте параметр, который отключает проверяемое ограничение во время выполнения транзакций INSERT и UPDATE, если известно, что новые данные будут нарушать ограничение, либо если ограничение применяется только к данным, уже существующим в БД.
Существует три метода обработки транзакций в языке VBA:
–BeginTrans
•Обозначает начало транзакции
–CommitTrans
•Обозначает конец успешной транзакции
–RollbackTrans
•Обозначает конец безуспешной транзакции
•Access поддерживает до 5 уровней вложенных транзакций
•Когда одна транзакция вложена в другую, обновление БД не происходит до тех пор, пока последняя вложенная транзакция не завершится успешно (т.е. пока для нее не выполнится метод CommitTrans). Если этот метод не выполняется или соответствующий метод RollbackTrans выполняется, все вложенные транзакции отменяются.
•Тип связи, установленной между таблицами, контролирует транзакцию.
•Для набора данных, использующего метод RollbackTrans для типа связей (в VBA), выполняется откат при выполнении этого метода.
•Когда данные в БД корректируются через связанные формы, пользователи имеют ограниченные права на контроль транзакций. MS Access контролирует изменения в БД.
•Решение проблем: определяйте конкурирующие транзакции (например, удалить запись без ее изменения); блокируйте записи для предотвращения выполнения более одной транзакции (блокировка записи позволяет другим читать ее без права изменения).
Создание триггера в проекте БД (ADP)
•Триггер — это объект БД, который запускается на выполнение при выполнении действия в БД. Для создания триггера необходимо указать следующее:
–текущую таблицу;
–транзакции, изменяющие данные, которые запускают триггер: добавление новых данных (INSERT), обновление существующих данных (UPDATE) или удаление существующих данных (DELETE);
–действия, которые триггер будет выполнять сразу после указанных транзакций.
•Триггеры записываются как инструкции Transact-SQL для БД Microsoft SQL Server.
–Примечание 1. Включайте в триггер инструкции RAISERROR и ROLLBACK для ситуаций, когда триггер обнаружит, что изменения не разрешены. Это обеспечит синхронизацию набора записей клиента с данными на сервере. При включении только одной из инструкций RAISERROR или ROLLBACK набор записей клиента не будет отражать текущее состояние данных на сервере. Инструкция RAISERROR должна определяться с уровнем важности >10.
–Примечание 2. Выберите параметр, который отключает ограничение внешнего ключа во время выполнения транзакций INSERT и UPDATE, если известно, что новые данные будут нарушать ограничение, либо если ограничение применяется только к данным, уже существующим в БД.