Введение в стандарты языка баз данных SQL



         

Транзакции, подключения к базе данных, сессии


SQL-агентом называется зависимый от реализации объект, вызывающий выполнение операторов SQL. Под SQL-транзакцией (иногда называемой просто транзакцией) понимается последовательность выполнения операторов SQL, являющаяся атомарной по отношению к восстановлению. Эти операции выполняются одной или более единицами компиляции и модулями или путем прямого вызова SQL. От реализации зависит, могут ли в одной транзакции выполняться динамические и/или статические операторы выборки и манипулирования данными и динамические и/или статические операторы определения и манипулирования схемой. Если такие сочетания допускаются, то поведение открытого курсора, подготовленного динамического оператора, отложенного ограничения определяются в реализации.

Каждый модуль или прямой вызов SQL, инициирующие выполнение оператора, ассоциируются с транзакцией. SQL-транзакция начинается при выполнении процедуры из некоторого модуля или прямого вызова оператора SQL вне активной транзакции. Транзакция завершается при выполнении операторов COMMIT или ROLLBACK. Если SQL-транзакция завершается успешным выполнением оператора COMMIT, то все изменения, произведенные ею над данными и/или схемой становятся постоянно хранимыми и доступными всем параллельно выполняющимся или образуемым впоследствии транзакциям. Если транзакция завершается оператором ROLLBACK или если выполнение оператора COMMIT оказывается неуспешным, то все изменения, произведенные транзакцией над данными и/или схемой, ликвидируются. Если выполнение оператора COMMIT было начато, но при этом возникли определенные исключительные условия, то неизвестно, зафиксированы или уничтожены результаты этой транзакции.

У каждой SQL-транзакции имеется режим доступа - "только чтение" или "чтение и запись". Режим доступа может быть явно установлен оператором SETTRANSACTION; по умолчанию он устанавливается в "чтение-запись". Термин "только чтение" применяется только к постоянно хранимым базовым и представляемым таблицам.

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

Транзакции, инициированные разными SQL-агентами, которые обращаются к одним и тем же данным и/или схемам, являются конкурирующими (concurrent; по-русски обычно такие транзакции называют "параллельно" выполняющимися).

Каждой SQL-транзакции приписывается некоторый уровень изоляции: READUNCOMMITTED, READCOMMITTED, REPEATABLEREAD или SERIALIZABLE. Уровень изоляции транзакции определяет степень, в которой на операции этой транзакции влияют операции параллельно выполняющихся транзакций и в которой операции данной транзакции влияют на операции других транзакций. Уровень изоляции может быть явно установлен оператором SETTRANSACTION. По умолчанию устанавливается уровень изоляции SERIALIZABLE. При выполнении конкурирующих транзакций на этом уровне изоляции гарантируется их сериализуемость. Сериализованное выполнение - это такое выполнение операций конкурирующих транзакций, которое производит тот же самый окончательный эффект, что и некоторое последовательное выполнение этих транзакций (т.е. такое выполнение, при котором каждая транзакция полностью завершается до начала следующей). Уровень изоляции определяет вид явления, которое может произойти при параллельном выполнении транзакций. Возможны следующие виды явлений:




    Содержание  Назад  Вперед