Sdílet prostřednictvím


Transakce (Azure Synapse Analytics a Microsoft Fabric)

platí pro:Azure Synapse AnalyticsAnalytics Platform System (PDW)Warehouse v Microsoft Fabric

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.

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

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

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

  • transakce automatického potvrzení inicializovat automaticky v rámci relace a nezačínat příkazem BEGIN TRANSACTION. Pokud je nastavení AUTOCOMMIT ZAPNUTO, každý příkaz běží v transakci a není nutné explicitní COMMIT nebo ROLLBACK. Pokud je nastavení AUTOCOMMIT VYPNUTo, je vyžadován příkaz COMMIT nebo ROLLBACK k určení výsledku transakce. Transakce autocommit začínají okamžitě po POTVRZENÍ nebo ROLLBACK příkaz, nebo po SET AUTOCOMMIT OFF příkaz.

Transact-SQL konvence syntaxe

Poznámka

Další informace o transakcích v Microsoft Fabric naleznete v tématu Transakce v Microsoft Fabric.

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. Příkaz COMMIT je stejný jako COMMIT WORK, COMMIT TRAN a 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. Příkaz ROLLBACK je stejný jako ROLLBACK WORK, ROLLBACK TRAN a ROLLBACK TRANSACTION.

SET AUTOCOMMIT { ON | VYPNUTO }
Určuje, jak mohou transakce začínat a končit.

NA
Každý příkaz běží pod vlastní transakcí a není nutné žádné explicitní POTVRZENÍ ani ROLLBACK příkaz. Explicitní transakce jsou povoleny, pokud je FUNKCE AUTOCOMMIT ZAPNUTÁ.

PRYČ
Azure Synapse Analytics a Microsoft Fabric 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 transakce potvrdí nebo vrátí zpět v tomto režimu operace, režim zůstane vypnutý, zahájí se nová transakce. Explicitní transakce nejsou povoleny, pokud je funkce AUTOCOMMIT VYPNUTÁ.

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

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

SET IMPLICIT_TRANSACTIONS { ON | OFF }
Tím se přepíná stejné režimy jako SET AUTOCOMMIT. Pokud je zapnuto, SET IMPLICIT_TRANSACTIONS nastaví připojení do implicitního režimu transakce. Když je vypnuto, vrátí připojení do režimu automatického dokončování. 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 jsou spuštěny commit nebo ROLLBACK a neexistuje žádná aktivní transakce, dojde k chybě.

Pokud je spuštěna BEGIN TRANSACTION v době, kdy transakce již probíhá, je vyvolána chyba. K tomu může dojít, pokud BEGIN TRANSACTION nastane po úspěšném příkazu BEGIN TRANSACTION nebo když relace je v 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 klient odhlásí aplikaci, všechny nepotvrzené transakce připojení se vrátí zpět, když síť upozorní instanci přerušení.

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

Obecné 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 všechna data odkazovaná transakcí je 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í a omezení

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

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

Azure Synapse Analytics a Microsoft Fabric nemají 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í 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.

Příklady:

A. Použití explicitní transakce

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

B. Vrácení transakce zpět

Následující příklad ukazuje účinek vrácení transakce zpět. V tomto příkladu vrátí příkaz ROLLBACK příkaz 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í ON.

SET AUTOCOMMIT ON;  

Následující příklad nastaví AUTOCOMMIT nastavení 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;  

Další kroky