Sdílet prostřednictvím


Transakce (Azure Synapse Analytics)

platí pro: Azure Synapse AnalyticsAnalytics Platform System (PDW)

Transakce je skupina jednoho nebo více databázových příkazů, které jsou buď zcela potvrzeny, nebo zcela vráceny zpět. Každá transakce je atomická, konzistentní, izolovaná a odolná (ACID). Pokud transakce proběhne úspěšně, všechny příkazy v ní jsou potvrzeny. Pokud transakce selže, to je alespoň jeden z příkazů ve skupině selže, pak se celá skupina vrátí zpět.

Poznámka

Příkaz SET AUTOCOMMIT není ve službě Microsoft Fabric Data Warehouse podporovaný. Další informace o transakcích, izolaci, souběžnosti a konzistenci v Datovém skladu Microsoft Fabric najdete v tématu Transakce v datovém skladu Fabric.

Začátek a konec transakcí závisí na AUTOCOMMIT nastavení a BEGIN TRANSACTIONpříkazech , COMMITa ROLLBACK příkazy.

Podporují se následující typy transakcí:

  • Explicitní transakce začínají příkazem BEGIN TRANSACTION a končí příkazem COMMIT nebo ROLLBACK příkazem.

  • Transakce automatického potvrzení se inicializují automaticky v rámci relace a nezačínají příkazem BEGIN TRANSACTION .

    • AUTOCOMMIT Pokud je ONnastavení , každý příkaz běží v transakci a není explicitní COMMIT nebo ROLLBACK není nutné.
    • AUTOCOMMIT Pokud je OFFnastavení , a COMMIT nebo ROLLBACK příkaz je vyžadován k určení výsledku transakce. Transakce se automaticky zahajují hned po COMMIT příkazu nebo ROLLBACK po SET AUTOCOMMIT OFF příkazu.

Transact-SQL konvence syntaxe

Syntax

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

Argumenty

ZAHÁJIT TRANSAKCI

Označí výchozí bod explicitní transakce.

COMMIT [ PRÁCE ]

Označí konec explicitní nebo automatické transakce. Tento příkaz způsobí, že změny v transakci budou trvale potvrzeny do databáze. COMMIT Příkaz je shodný s COMMIT WORK, COMMIT TRANa COMMIT TRANSACTION.

VRÁCENÍ ZPĚT [ PRÁCE ]

Vrátí zpět transakci na začátek transakce. Do databáze nejsou potvrzeny žádné změny transakce. ROLLBACK Příkaz je shodný s ROLLBACK WORK, ROLLBACK TRANa ROLLBACK TRANSACTION.

NASTAVIT AUTOCOMMIT { ON | VYPNUTO }

Určuje, jak mohou transakce začínat a končit.

Pokud změníte AUTOCOMMIT nastavení v rámci aktivní transakce, nastavení ovlivní aktuální transakci a neprojeví se, dokud transakce nebude dokončena.

Pokud AUTOCOMMIT je , ONspuštění jiného SET AUTOCOMMIT ON příkazu nemá žádný vliv. Podobně platí, že pokud AUTOCOMMIT je OFF, spuštění jiné SET AUTOCOMMIT OFF nemá žádný vliv.

NA

Každý příkaz běží pod vlastní transakcí a není nutné explicitně COMMIT ani ROLLBACK příkaz. Explicitní transakce jsou povoleny, pokud AUTOCOMMIT je ON.

PRYČ

Azure Synapse Analytics automaticky zahájí transakci, pokud transakce ještě neprobíhá. Všechny následné příkazy jsou spuštěny jako součást transakce a COMMIT nebo ROLLBACK je nezbytné k určení výsledku transakce. Jakmile se transakce potvrdí nebo vrátí zpět v tomto režimu operace, režim zůstane OFF, bude zahájena nová transakce. Explicitní transakce nejsou povoleny, pokud AUTOCOMMIT je OFF.

SET IMPLICIT_TRANSACTIONS { ON | VYPNUTO }

Tím se přepíná stejné režimy jako SET AUTOCOMMIT. Když ONnastaví SET IMPLICIT_TRANSACTIONS připojení do implicitního režimu transakce. Když OFF, vrátí připojení do režimu automatickéhocommit. Další informace naleznete v tématuSET IMPLICIT_TRANSACTIONS (Transact-SQL).

Dovolení

Ke spuštění příkazů souvisejících s transakcemi nejsou nutná žádná konkrétní oprávnění. Oprávnění jsou nutná ke spuštění příkazů v rámci transakce.

Zpracování chyb

Pokud COMMIT nebo ROLLBACK jsou spuštěny a neexistuje žádná aktivní transakce, dojde k chybě.

BEGIN TRANSACTION Pokud je spuštěna v době, kdy transakce již probíhá, dojde k chybě. K tomu může dojít v případě, že BEGIN TRANSACTION dojde po úspěšném BEGIN TRANSACTION příkazu nebo když je relace pod SET AUTOCOMMIT OFF.

Pokud chyba jiná než chyba příkazu runtime brání úspěšnému dokončení explicitní transakce, databázový stroj automaticky vrátí transakci zpět a uvolní všechny prostředky uchovávané transakcí. Pokud je například síťové připojení klienta přerušené nebo se klient odhlásí z aplikace, všechny nepotvrzené transakce připojení se vrátí zpět, když síť oznámí instanci přerušení.

Pokud v dávce dojde k chybě příkazu za běhu, Azure Synapse Analytics se chová konzistentně s SQL Serverem XACT_ABORT nastaveným ON na a celá transakce se vrátí zpět. Další informace o XACT_ABORT nastavení naleznete v tématu SET XACT_ABORT (Transact-SQL).

Poznámky

Relace může v daném okamžiku spustit pouze jednu transakci; body uložení a vnořené transakce nejsou podporovány.

Je zodpovědností programátora vydat COMMIT pouze v okamžiku, kdy jsou všechna data odkazovaná transakcí logicky správná.

Když se relace ukončí před dokončením transakce, transakce se vrátí zpět.

Režimy transakcí se spravují na úrovni relace. Pokud například jedna relace zahájí explicitní transakci nebo nastaví AUTOCOMMIT na OFF, nebo nastaví IMPLICIT_TRANSACTIONS na ON, nemá žádný vliv na režimy transakcí žádné jiné relace.

Omezení

Transakci nelze vrátit zpět po COMMIT vydání příkazu, protože změny dat byly provedeny trvalou součástí databáze.

Příkazy CREATE DATABASE a DROP DATABASE (Transact-SQL) nelze použít uvnitř explicitní transakce.

Azure Synapse Analytics nemá mechanismus sdílení transakcí. To znamená, že v libovolném časovém okamžiku může pracovat pouze jedna relace na jakékoli transakci v systému.

Chování při uzamčení

Uzamčení zajišťuje integritu transakcí a udržuje konzistenci databází, když více uživatelů přistupuje k datům najednou. Uzamčení se používá implicitními i explicitními transakcemi. Každá transakce vyžaduje zámky různých typů prostředků, jako jsou tabulky nebo databáze, na kterých transakce závisí.

Všechny zámky jsou na úrovni tabulky nebo vyšší. Zámky blokují další transakce v úpravě prostředků způsobem, který by způsoboval problémy pro transakci požadující zámek. Každá transakce uvolní své zámky, pokud již nemá závislost na uzamčených prostředcích; explicitní transakce si zachovají zámky, dokud se transakce neskončila, pokud je potvrzena nebo vrácena zpět.

Examples

A. Použití explicitní transakce

BEGIN TRANSACTION;  
       DELETE FROM HumanResources.JobCandidate  
       WHERE JobCandidateID = 13;
COMMIT;  

B. Vrácení otevřené transakce zpět

Následující příklad ukazuje účinek vrácení transakce zpět. V tomto příkladu příkaz ROLLBACK vrátí příkaz zpět INSERT , ale vytvořená tabulka bude stále existovat.

CREATE TABLE ValueTable (id INT);  

BEGIN TRANSACTION;  
       INSERT INTO ValueTable VALUES(1);  
       INSERT INTO ValueTable VALUES(2);  
ROLLBACK;  

C. Nastavení funkce AUTOCOMMIT

Následující příklad nastaví AUTOCOMMIT nastavení na ON.

SET AUTOCOMMIT ON;  

Následující příklad nastaví AUTOCOMMIT nastavení na OFF.

SET AUTOCOMMIT OFF;  

D. Použití implicitní transakce s více příkazy

SET AUTOCOMMIT OFF;  

CREATE TABLE ValueTable (id INT);  
INSERT INTO ValueTable VALUES(1);  
INSERT INTO ValueTable VALUES(2);  

COMMIT;