Поддержка транзакций в языке SQL

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

Языковые правила поддержки транзакций для различных СУБД несколько различаются. Например, в Microsoft SQL Server поддерживается команда начала транзакции BEGIN TRANS[ACTION]. В Oracle такой команды нет, но существуют четкие правила, регламентирующие моменты начала и завершения транзакции:

1). Любая команда ddl выполняется как отдельная транзакция. Иными словами, поступление на сервер команды DDL автоматически фиксирует результаты предыдущих команд DML этого сеанса (если таковые были) и начинает новую транзакцию, а при завершении команды DDL автоматически фиксируются ее результаты. Таким образом, одна команда DDL вызывает те же действия, что и последовательность команд:

COMMIT

команда DDL

COMMIT

Получается, что несколько команд DDL нельзя объединить в единую транзакцию и откатить команду DDL при помощи стандартной команды ROLLBACK в Oracle также нельзя.

2). Результаты выполнения команд dml автоматически фиксируются только при включенном режиме AUTOCOMMIT (например, в настройках утилиты SQL*Plus есть возможность включения этого режима). По умолчанию этот режим отключен. Таким образом, все идущие подряд команды DML воспринимаются как одна транзакция.

Инициализация транзакции (неявная команда BEGIN TRANSACTION) происходит в следующих случаях:

· первая команда в сеансе связи

· первая команда после команд COMMIT или ROLLBACK

· первая команда после команды DDL

 

Завершение транзакции происходит при поступлении команд commit (завершение транзакции с фиксацией изменений) или rollback (завершение транзакции с откатом изменений). Можно неявно зафиксировать команду транзакцию из последовательности команд dml любой следующей за ней командой ddl.

Стандарт SQL и многие СУБД, в том числе Oracle, предусматривают так называемые точки сохранения. Точка сохранения задается оператором

SAVEPOINT имя_точки_сохранения

и в операторе ROLLBACK имеется возможность отката транзакции не к началу, а к указанной точке сохранения:

ROLLBACK TO имя_точки_сохранения

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








Дата добавления: 2015-08-26; просмотров: 1263;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.