Поделиться через


Транзакции (Azure Synapse Analytics)

Область применения:Azure Synapse Analytics AnalyticsPlatform System (PDW)

Транзакция — это группа инструкций одной или нескольких баз данных, которые либо полностью фиксируются, либо полностью откатываются. Транзакции атомарны, согласованы, изолированы и устойчивы (atomic, consistent, isolated, durable — ACID). Если транзакция выполнена успешно, все инструкции в ней фиксируются. Если транзакция завершается ошибкой, то если хотя бы одна инструкция в группе завершается ошибкой, выполняется откат всей группы.

Примечание.

Команда SET AUTOCOMMIT не поддерживается в хранилище данных Microsoft Fabric. Дополнительные сведения о транзакциях, изоляции, параллелизме и согласованности в хранилище данных Microsoft Fabric см. в разделе "Транзакции в хранилище данных Fabric".

Начало и конец транзакций зависит от AUTOCOMMIT параметра и BEGIN TRANSACTIONCOMMITинструкций, а также ROLLBACK операторов.

Поддерживаются следующие типы транзакций:

  • Явные транзакции начинаются с инструкции BEGIN TRANSACTION и заканчиваются оператором или ROLLBACK операторомCOMMIT.

  • Операции автоматической фиксации инициируются автоматически в сеансе и не начинаются с инструкции BEGIN TRANSACTION .

    • AUTOCOMMIT Если задан параметрON, каждая инструкция выполняется в транзакции и не требуется явных COMMIT или ROLLBACK не требуется.
    • AUTOCOMMIT Если задан параметрOFF, COMMIT требуется инструкция или ROLLBACK инструкция для определения результата транзакции. Автоматические транзакции начинаются сразу после COMMIT инструкции или ROLLBACK инструкции SET AUTOCOMMIT OFF .

Соглашения о синтаксисе Transact-SQL

Синтаксис

BEGIN TRANSACTION [;]  
COMMIT [ TRAN | TRANSACTION | WORK ] [;]  
ROLLBACK [ TRAN | TRANSACTION | WORK ] [;]  
SET AUTOCOMMIT { ON | OFF } [;]  
SET IMPLICIT_TRANSACTIONS { ON | OFF } [;]  

Аргументы

НАЧАТЬ ТРАНЗАКЦИЮ

Отмечает начальную точку явной транзакции.

COMMIT [ WORK ]

Отмечает завершение явной транзакции или транзакции с автофиксацией. Эта инструкция вызывает изменения в транзакции, чтобы всегда быть зафиксированной в базе данных. Оператор COMMIT идентичен оператору COMMIT WORK, COMMIT TRANи COMMIT TRANSACTION.

ROLLBACK [ WORK ]

Выполняет откат транзакции на начало транзакции. Никакие изменения транзакции не фиксируются в базе данных. Оператор ROLLBACK идентичен оператору ROLLBACK WORK, ROLLBACK TRANи ROLLBACK TRANSACTION.

SET AUTOCOMMIT { ON | OFF }

Определяет метод запуска и завершения транзакций.

При изменении AUTOCOMMIT параметра в активной транзакции параметр влияет на текущую транзакцию и не действует до завершения транзакции.

В противном AUTOCOMMITONслучае выполнение другой SET AUTOCOMMIT ON инструкции не влияет. Аналогичным образом, если AUTOCOMMIT есть OFF, выполнение другого SET AUTOCOMMIT OFF не имеет эффекта.

DNS

Каждая инструкция выполняется под собственной транзакцией и не требуется явных COMMIT инструкций или ROLLBACK инструкций. Явные транзакции допускаются при AUTOCOMMIT наличии ON.

ВЫКЛ.

Azure Synapse Analytics автоматически инициирует транзакцию, если транзакция еще не выполняется. Все последующие инструкции выполняются как часть транзакции и COMMITROLLBACK необходимы для определения результата транзакции. Как только транзакция фиксирует или откатывается в этом режиме работы, режим остается OFF, запускается новая транзакция. Явные транзакции не допускаются при 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.

Если ошибка, отличной от ошибки инструкции во время выполнения, предотвращает успешное завершение явной транзакции, ядро СУБД автоматически откатывает транзакцию и освобождает все ресурсы, удерживаемые транзакцией. Например, если сетевое подключение клиента нарушено или клиент выходит из приложения, все незафиксированные транзакции для подключения откатываются, когда сеть уведомляет экземпляр разрыва.

Если ошибка инструкции во время выполнения возникает в пакете, Azure Synapse Analytics работает в соответствии с набором ON SQL Server XACT_ABORT и откат всей транзакции. Дополнительные сведения о параметре XACT_ABORT см. в разделе SET XACT_ABORT (Transact-SQL).

Замечания

Сеанс может одновременно выполнять только одну транзакцию. Точки сохранения и вложенные транзакции не поддерживаются.

Это ответственность программиста выдавать COMMIT только в момент, когда все данные, на которые ссылается транзакция, логически правильно.

Если сеанс закрывается до завершения транзакции, транзакция откатывается.

Управление режимами транзакций выполняется на уровне сеанса. Например, если один сеанс начинает явную транзакцию или задает AUTOCOMMITOFFзначение или задает IMPLICIT_TRANSACTIONS значение ON, он не влияет на режимы транзакций любого другого сеанса.

Ограничения

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

Команды CREATE DATABASE и DROP DATABASE (Transact-SQL) нельзя использовать внутри явной транзакции.

Azure Synapse Analytics не имеет механизма совместного использования транзакций. Это означает, что в любой момент времени только один сеанс может работать с транзакцией в системе.

Поведение блокировки

Блокировка обеспечивает целостность транзакций и обеспечивает согласованность баз данных при одновременном доступе нескольких пользователей к данным. Блокировка используется в явных и неявных транзакциях. Каждая транзакция запрашивает блокировку разных типов ресурсов, например таблиц или баз данных, от которых эта транзакция зависит.

Все блокировки выполняются на уровне таблиц или выше. Блокировка не дает другим транзакциям изменять ресурсы, чтобы избежать ошибок в транзакции, запросившей блокировку. Каждая транзакция снимает свои блокировки, если больше не зависит от заблокированных ресурсов. Явные транзакции сохраняют блокировки до завершения транзакции — ее фиксации или отката.

Примеры

А. Использование явной транзакции

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;