Транзакции (Azure Synapse Analytics и Microsoft Fabric)
Область применения: хранилище платформы Аналитики Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric
Транзакция — это группа инструкций одной или нескольких баз данных, которые либо полностью фиксируются, либо полностью откатываются. Транзакции атомарны, согласованы, изолированы и устойчивы (atomic, consistent, isolated, durable — ACID). Если транзакция выполнена успешно, все инструкции в ней фиксируются. Если транзакция завершается ошибкой, то если хотя бы одна инструкция в группе завершается ошибкой, выполняется откат всей группы.
Начало и конец транзакции зависят от параметра AUTOCOMMIT и инструкций BEGIN TRANSACTION, COMMIT и ROLLBACK.
Поддерживаются следующие типы транзакций:
Явные транзакции начинаются с инструкции BEGIN TRANSACTION и заканчиваются инструкцией COMMIT или ROLLBACK.
Транзакции с автофиксацией автоматически запускаются в рамках сеанса и не начинаются с инструкции BEGIN TRANSACTION. Если для параметра AUTOCOMMIT установлено значение ON, каждая инструкция выполняется в транзакции, и явные инструкции COMMIT или ROLLBACK не требуются. Если для параметра AUTOCOMMIT установлено значение OFF, для определения результата транзакции требуется инструкция COMMIT или ROLLBACK. Операции автоматической фиксации начинаются сразу после инструкции COMMIT или ROLLBACK или после инструкции SET AUTOCOMMIT OFF.
Соглашения о синтаксисе Transact-SQL
Примечание.
Дополнительные сведения о транзакциях в Microsoft Fabric см. в разделе "Транзакции" в Microsoft Fabric.
Синтаксис
BEGIN TRANSACTION [;]
COMMIT [ TRAN | TRANSACTION | WORK ] [;]
ROLLBACK [ TRAN | TRANSACTION | WORK ] [;]
SET AUTOCOMMIT { ON | OFF } [;]
SET IMPLICIT_TRANSACTIONS { ON | OFF } [;]
Аргументы
BEGIN TRANSACTION
Отмечает начальную точку явной транзакции.
COMMIT [ WORK ]
Отмечает завершение явной транзакции или транзакции с автофиксацией. Эта инструкция вызывает изменения в транзакции, чтобы всегда быть зафиксированной в базе данных. Инструкция COMMIT идентична инструкциям COMMIT WORK, COMMIT TRAN и COMMIT TRANSACTION.
ROLLBACK [ WORK ]
Выполняет откат транзакции на начало транзакции. Никакие изменения транзакции не фиксируются в базе данных. Инструкция ROLLBACK идентична инструкциям ROLLBACK WORK, ROLLBACK TRAN и ROLLBACK TRANSACTION.
SET AUTOCOMMIT { ON | OFF }
Определяет метод запуска и завершения транзакций.
DNS
Каждая инструкция выполняется в своей транзакции, явные инструкции COMMIT или ROLLBACK не требуются. Явные транзакции разрешены, когда для параметра AUTOCOMMIT установлено значение ON.
ВЫКЛ.
Azure Synapse Analytics и Microsoft Fabric автоматически инициирует транзакцию, если транзакция еще не выполняется. Все последующие инструкции выполняются в рамках транзакции, и инструкции COMMIT или ROLLBACK необходимы для определения результата транзакции. Как только транзакция фиксирует или откатывается в этом режиме, режим остается OFF, запускается новая транзакция. Явные транзакции не разрешены, если AUTOCOMMIT имеет значение OFF.
Если изменить параметр AUTOCOMMIT в активной транзакции, этот параметр не повлияет на текущую транзакцию и вступит в силу только после завершения транзакции.
Если для параметра AUTOCOMMIT установлено значение ON, выполнение другой инструкции SET AUTOCOMMIT ON не будет иметь результата. Подобным образом, если для параметра AUTOCOMMIT установлено значение OFF, выполнение другой инструкции SET AUTOCOMMIT OFF не будет иметь результата.
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Включает те же режимы, что и SET AUTOCOMMIT. Присвоение параметру SET IMPLICIT_TRANSACTIONS значения ON устанавливает для соединения режим неявных транзакций. Значение OFF возвращает подключение в режим автофиксации. Дополнительные сведения см. в статье SET IMPLICIT_TRANSACTIONS (Transact-SQL).
Разрешения
Для выполнения инструкций, связанных с транзакциями, не нужны конкретные разрешения. Разрешения необходимы для запуска инструкций внутри транзакции.
Обработка ошибок
Если выполнить инструкции COMMIT или ROLLBACK без активной транзакции, возникает ошибка.
Если выполнить инструкцию BEGIN TRANSACTION во время выполнения транзакции, возникает ошибка. Это может произойти, если инструкция BEGIN TRANSACTION выполняется после успешного запуска инструкции BEGIN TRANSACTION или для сеанса установлено SET AUTOCOMMIT OFF.
Если ошибка, отличной от ошибки инструкции во время выполнения, предотвращает успешное завершение явной транзакции, подсистема daabase автоматически откатывает транзакцию и освобождает все ресурсы, удерживаемые транзакцией. Например, если сетевое подключение клиента нарушено или клиент регистрирует приложение, все незафиксированные транзакции для подключения откатываются, когда сеть уведомляет экземпляр перерыва.
Если ошибка инструкции во время выполнения возникает в пакете, Azure Synapse Analytics и Microsoft Fabric работают в соответствии с sql ServerXACT_ABORT задано значение ON , а вся транзакция откатывается. Дополнительные сведения о параметре XACT_ABORT см. в разделе SET XACT_ABORT (Transact-SQL).
Общие замечания
Сеанс может одновременно выполнять только одну транзакцию. Точки сохранения и вложенные транзакции не поддерживаются.
Обязанностью программиста на языке является вызов инструкции COMMIT только в том случае, когда все данные, относящиеся к транзакции, логически верны.
Если сеанс закрывается до завершения транзакции, транзакция откатывается.
Управление режимами транзакций выполняется на уровне сеанса. Например, если один сеанс запускает явную транзакцию или устанавливает для параметра AUTOCOMMIT значение OFF или для параметра IMPLICIT_TRANSACTIONS значение ON, это не влияет на режимы транзакции в других сеансах.
Ограничения
Нельзя произвести откат транзакции после вызова инструкции COMMIT, так как измененные данные уже стали частью базы данных.
Команды CREATE DATABASE (Azure Synapse Analytics) и DROP DATABASE (Transact-SQL) не используются в явной транзакции.
Azure Synapse Analytics и Microsoft Fabric не имеют механизма совместного использования транзакций. Это означает, что в любой момент времени только один сеанс может работать с транзакцией в системе.
Режим блокировки
Блокировка обеспечивает целостность транзакций и обеспечивает согласованность баз данных при одновременном доступе нескольких пользователей к данным. Блокировка используется в явных и неявных транзакциях. Каждая транзакция запрашивает блокировку разных типов ресурсов, например таблиц или баз данных, от которых эта транзакция зависит.
Все блокировки выполняются на уровне таблиц или выше. Блокировка не дает другим транзакциям изменять ресурсы, чтобы избежать ошибок в транзакции, запросившей блокировку. Каждая транзакция снимает свои блокировки, если больше не зависит от заблокированных ресурсов. Явные транзакции сохраняют блокировки до завершения транзакции — ее фиксации или отката.
Примеры:
А. Использование явной транзакции
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT;
B. Откат транзакции
В приведенном ниже примере демонстрируется результат отката транзакции. В этом примере инструкция ROLLBACK приведет к откату инструкции INSERT, но созданная таблица будет по-прежнему существовать.
CREATE TABLE ValueTable (id INT);
BEGIN TRANSACTION;
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
ROLLBACK;
В. Настройка параметра AUTOCOMMIT
В следующем примере для параметра AUTOCOMMIT устанавливается значение ON
.
SET AUTOCOMMIT ON;
В следующем примере для параметра AUTOCOMMIT устанавливается значение OFF
.
SET AUTOCOMMIT OFF;
D. Использование неявных транзакций из нескольких инструкций
SET AUTOCOMMIT OFF;
CREATE TABLE ValueTable (id INT);
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
COMMIT;