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

Лекции / Л-6 - Сеансы, транзакции и блокировки

.pdf
Скачиваний:
12
Добавлен:
28.06.2021
Размер:
569.37 Кб
Скачать

Сеансы, транзакции и блокировки

Сеансы и параметры сеансов Транзакции. Сериализация транзакций Блокировки

Особенности реальной работы СУБД

БД наполняются многими пользователями из множества источников (в т. ч. непроверенных) разных форматов, часто в непредсказуемое время. Вопросы:

Какие данные должны быть видимы пользователям?

Какой из модификаций при сохранении данных отдать предпочтение?

Как гарантировать сохранность данных в ходе выполнения длительной процедуры?

Ответы на эти и множество других вопросов даются в терминах сеансов, транзакций и блокировок.

Сеансы

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

Когда клиентское приложение подключается к серверу БД, говорят, что открывается сеанс (сессия). Сеанс – частный канал взаимодействия приложения с СУБД.

Детали реализации сессий в разных СУБД различаются, но базовые принципы одни и те же.

На сервере можно запустить множество экземпляров утилит доступа к СУБД, при этом каждый экземпляр создаст свой сеанс, изолированный от других сессий.

Параметры сеанса

Когда установлен сеанс подключения к СУБД, режим его работы определяют специальные параметры.

Пользователь может изменить некоторые параметры сеанса (например, язык или формат даты), но изменения будут действительны только до завершения сеанса.

Администратор БД может сделать эти изменения

постоянными.

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

Примеры установки параметров сеанса

Инструкции управления сеансами в стандарте SQL:

CONNECT TO – установка сеанса SQL;

DISCONNECT – завершение сеанса SQL.

Установка параметров сеанса в утилите SQL*Plus:

SET AUTOCOMMIT {ON | OFF | IMMEDIATE}

установка режима внесения изменений в БД.

SET ECHO {ON | OFF} – включение/выключение вывода на экран команд, содержащихся в запущенном сценарии.

Завершение сеанса

Когда сеанс завершается (по желанию клиента, либо вследствие ошибки), все значения параметров теряются.

Все ожидающие транзакции неявно подтверждаются при нормальном завершении сессии, и откатываются, если сеанс был прерван в результате ошибки.

Сессия может быть прервана администратором БД – синтаксис операции свой в каждой конкретной СУБД.

Осиротевшие сеансы образуются, если инициировавшее их приложение завершается сбоем, не закрыв открытый им сеанс.

Транзакции (1)

Транзакция – один из механизмов, реализованных в

SQL с целью поддержания целостности и согласованности данных.

Дополняют концепцию сеансов дополнительным уровнем гранулярности. Разбивают операции в сессии на логические единицы и позволяют выполнять их поэтапно.

Концепция транзакции изначально заложена в стандарте SQL и постепенно развивалась в новых версиях. Детали этого механизма отличаются в отдельных реализациях.

Транзакции (2)

Транзакции являются одной из самых важных концеп-

ций, необходимой для построения надежных БД (обеспечивают целостность данных в любых ситуациях).

Транзакция представляет собой одну или несколько инструкций SQL, которые либо успешно завершаются, либо отменяются как единое целое. Разработчик сам определяет, какие операции составят транзакцию.

Структурные модификации объектов БД, выполняемые инструкциями DDL, не являются транзакционными, т.е. не допускают отката операции (неявно – COMMIT).

Варианты завершения транзакций

Фиксация транзакции обеспечивает запись на диск изменений, сделанных в процессе выполнения транзакции.

Откат транзакции обеспечивает аннулирование всех изменений, сделанных операторами в теле транзакции

Классическая транзакционная машина – банкомат

После аутентификации и ввода снимаемой со счета суммы инициируется транзакция:

банкомат проверяет, достаточно ли денег на счете;

банкомат вычитает деньги со счета;

банкомат выдает купюры;

если какое-то действие завершается неудачей, транзакция откатывается.

В любой момент пользователь может прервать операцию, после чего выполняется полный откат транзакции.