Megosztás:


KEZDJE TRANZAKCIÓT (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)Raktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Egy explicit, helyi tranzakció kiindulópontját jelöli meg. Az explicit tranzakciók az BEGIN TRANSACTION utasítással kezdődnek, és az vagy COMMIT utasítással ROLLBACK végződnek.

Transact-SQL szintaxis konvenciók

Syntax

Szintaxis az SQL Serverhez, az Azure SQL Database-hez, a felügyelt Azure SQL-példányhoz és a Microsoft Fabric SQL-adatbázishoz.

BEGIN { TRAN | TRANSACTION }
    [ { transaction_name | @tran_name_variable }
      [ WITH MARK [ 'description' ] ]
    ]
[ ; ]

A Fabric Data Warehouse, az Azure Synapse Analytics és az Analytics Platform System (PDW) szintaxisa.

BEGIN { TRAN | TRANSACTION }
[ ; ]

Arguments

transaction_name

A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Felügyelt Azure SQL-példány, SQL Database a Microsoft Fabricben.

A tranzakcióhoz rendelt név. transaction_name meg kell felelnie az azonosítókra vonatkozó szabályoknak, de a 32 karakternél hosszabb azonosítók nem engedélyezettek. Csak a legkülső páron BEGIN...COMMIT vagy BEGIN...ROLLBACK utasításokon használjon tranzakcióneveket. transaction_name mindig megkülönbözteti a kis- és nagybetűk megkülönböztetése, még akkor is, ha az adatbázismotor-példány nem érzékeny a kis- és nagybetűkre.

@tran_name_variable

A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Felügyelt Azure SQL-példány, SQL Database a Microsoft Fabricben.

Egy felhasználó által definiált változó neve, amely érvényes tranzakciónevet tartalmaz. A változót karakter, varchar, nchar vagy nvarchar adattípussal kell deklarálni. Ha 32 karakternél több karaktert ad át a változónak, csak az első 32 karaktert használja a rendszer. A többi karakter csonkolt.

MARKKAL [ 'leírás' ]

A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Felügyelt Azure SQL-példány, SQL Database a Microsoft Fabricben.

Megadja, hogy a tranzakció szerepel-e a tranzakciónaplóban. a leírás egy sztring, amely a jelet írja le. A 128 karakternél hosszabb leírásokat a rendszer 128 karakterre csonkolja, mielőtt a msdb.dbo.logmarkhistory táblában tárolva lett volna.

Ha WITH MARK ezt használja, meg kell adnia egy tranzakciónevet. WITH MARK lehetővé teszi a tranzakciónapló visszaállítását a jel által azonosított pontra.

Remarks

BEGIN TRANSACTIONnövekmények @@TRANCOUNT .1

BEGIN TRANSACTION olyan pontot jelöl, ahol a munkamenet által hivatkozott adatok bizonyos konzisztenciával rendelkeznek. A visszaállítás után BEGIN TRANSACTION végrehajtott összes adatmódosítás az adatok ezen ismert konzisztenciájának visszaállításához. Minden tranzakció addig tart, amíg COMMIT TRANSACTION a módosításokat az adatbázis állandó részévé nem teszik, vagy az összes módosítást egy ROLLBACK TRANSACTION utasítással törli a rendszer.

A tranzakciók automatikusan visszaállíthatók, ha tranzakció-megszakítási hiba történik, vagy ha futásidejű hiba történik, és a XACT_ABORT munkamenet-beállítás értéke ONa következő. További információ: SET XACT_ABORT.

BEGIN TRANSACTION elindít egy helyi tranzakciót az utasítást kibocsátó munkamenethez. Az aktuális tranzakcióelkülönítési szint beállításaitól függően a munkamenet által kiadott Transact-SQL utasítások támogatásához beszerzett erőforrásokat a tranzakció zárolja, amíg egy vagy ROLLBACK TRANSACTION utasítással COMMIT TRANSACTION nem fejeződik be. A hosszú ideig fennálló tranzakciók megakadályozhatják, hogy más munkamenetek hozzáférjenek ezekhez a zárolt erőforrásokhoz, és megakadályozhatják a tranzakciónapló csonkolását és a verziótár törlését is.

Bár BEGIN TRANSACTION elindít egy helyi tranzakciót, az nem lesz rögzítve a tranzakciónaplóban, amíg az alkalmazás nem hajt végre egy, a naplóban rögzítendő műveletet, például egy INSERT, UPDATEvagy DELETE utasítás végrehajtását. A tranzakció elindítása után az adatbázismotor olyan műveleteket hajthat végre, mint a zárolások beszerzése az utasítások tranzakcióelkülönítési SELECT szintjének védelme érdekében, de a tranzakciónaplóban semmi sem lesz rögzítve, amíg az alkalmazás nem hajt végre módosítási műveletet.

A kibocsátás BEGIN TRANSACTIONután ismét kiadhat BEGIN TRANSACTION egy vagy több belső tranzakció elindításához. Annak ellenére, hogy megadhat transaction_name egy belső tranzakcióhoz, a rendszer csak az első (legkülső) tranzakciónevet regisztrálja a rendszerben. Bármely más névre való visszaállítás (az érvényes savepoint-név kivételével) hibát okoz anélkül, hogy az utasítások bármelyikét visszaállítanák. Az utasítások csak a külső tranzakció visszahozásakor lesznek visszaállítva.

Az utasítás által BEGIN TRANSACTION indított helyi tranzakció akkor lesz előléptetve elosztott tranzakcióra, ha a következő műveleteket hajtja végre az utasítás véglegesítése vagy visszaállítása előtt:

  • A INSERTrendszer végrehajt egy, a csatolt kiszolgálón lévő távoli táblára hivatkozó , DELETEvagy UPDATE utasítást. Az INSERT, UPDATEvagy DELETE utasítás meghiúsul, ha a csatolt kiszolgáló eléréséhez használt OLE DB-szolgáltató nem támogatja a ITransactionJoin felületet.

  • A távoli tárolt eljárás hívása akkor történik, ha a REMOTE_PROC_TRANSACTIONS beállítás értéke ON.

A helyi adatbázismotor-példány lesz a tranzakcióvezérlő, és a Microsoft Distributed Transaction Coordinator (MS DTC) használatával kezeli az elosztott tranzakciót.

A tranzakciók explicit módon végrehajthatók elosztott tranzakcióként a használatával BEGIN DISTRIBUTED TRANSACTION. További információ: BEGIN DISTRIBUTED TRANSACTION.

Ha SET IMPLICIT_TRANSACTIONS be van állítva ON, az BEGIN TRANSACTION utasítás egy külső és egy belső tranzakciót hoz létre, 2 értékre állítva @@TRANCOUNT . További információ: SET IMPLICIT_TRANSACTIONS.

Megjegyzés:

Az adatbázismotor nem támogatja az egymástól függetlenül kezelhető beágyazott tranzakciókat. Belső tranzakciós decrements @@TRANCOUNT véglegesítés, de nincs más hatása. A belső tranzakciók visszaállítása mindig visszaállítja a külső tranzakciót, kivéve, ha létezik mentési pont , és az ROLLBACK utasításban meg van adva.

Megjelölt tranzakciók

A WITH MARK beállítás hatására a tranzakció neve rögzítve lesz a tranzakciónaplóban. Ha egy adatbázist egy korábbi állapotba állít vissza, a megjelölt tranzakcióval dátum és idő helyett megadható a visszaállítási pont. További információ: A megjelölt tranzakciók használata a kapcsolódó adatbázisok konzisztens helyreállításához és a VISSZAÁLLÍTÁSI utasításokhoz.

Emellett tranzakciónapló-jelekre is szükség van, ha egy kapcsolódó adatbáziskészletet egy bizonyos megosztott konzisztenciaállapotba kell helyreállítania. Egy olyan alkalmazás, amely tisztában van minden adatbázis konzisztenciájának állapotával, jeleket helyezhet el a kapcsolódó adatbázisok tranzakciónaplóiban egy adatbázisközi vagy elosztott tranzakció használatával. A kapcsolódó adatbázisok ezen jelekre való helyreállítása olyan adatbázisok készletét eredményezi, amelyek ismert megosztott konzisztenciaállapottal rendelkeznek.

A jelölés csak akkor kerül a tranzakciónaplóba, ha az adatbázist a megjelölt tranzakció frissíti. Az adatokat nem módosító tranzakciókat a rendszer nem rögzíti a naplóban.

BEGIN TRANSACTION <new_name> WITH MARK belső tranzakció indításakor használható. Ebben az esetben <new_name> akkor lesz a tranzakció neve, ha a külső tranzakció nincs megjelölve. Az alábbi fogalmi példában M2 a védjegy neve látható.

BEGIN TRAN T1;

UPDATE table1 ...;

BEGIN TRAN M2 WITH MARK;

UPDATE table2 ...;

SELECT column1 FROM table1;

COMMIT TRAN M2;

UPDATE table3 ...;

COMMIT TRAN T1;

Ha egy belső tranzakciót jelöl meg, a következő figyelmeztető üzenetet kapja, ha egy már megjelölt tranzakciót próbál megjelölni:

Server: Msg 3920, Level 16, State 1, Line 3
WITH MARK option only applies to the first BEGIN TRAN WITH MARK.
The option is ignored.

Permissions

Tagságot igényel a public szerepkörben.

Examples

A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.

A. Explicit tranzakció használata

A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Felügyelt Azure SQL-példány, SQL Database a Microsoft Fabricben, Azure Synapse Analytics, Analytics Platform System (PDW)

BEGIN TRANSACTION;

DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;

COMMIT TRANSACTION;

B. Tranzakció visszaállítása

A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Felügyelt Azure SQL-példány, SQL Database a Microsoft Fabricben, Azure Synapse Analytics, Analytics Platform System (PDW)

Az alábbi példa egy tranzakció visszagördülésének hatását mutatja be. Ebben a példában az ROLLBACK utasítás visszaállítja az INSERT utasítást, de a létrehozott tábla továbbra is létezik.

CREATE TABLE ValueTable
(
    id INT
);

BEGIN TRANSACTION;

INSERT INTO ValueTable VALUES (1);
INSERT INTO ValueTable VALUES (2);

ROLLBACK;

C. Tranzakció elnevezése

A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Felügyelt Azure SQL-példány, SQL Database a Microsoft Fabricben

Az alábbi példa bemutatja, hogyan nevezhet el egy tranzakciót.

DECLARE @TranName AS VARCHAR (20);
SELECT @TranName = 'MyTransaction';

BEGIN TRANSACTION @TranName;

DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;

COMMIT TRANSACTION @TranName;

D. Tranzakció megjelölése

A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Felügyelt Azure SQL-példány, SQL Database a Microsoft Fabricben

Az alábbi példa bemutatja, hogyan jelölhet meg egy tranzakciót. A tranzakció CandidateDelete meg van jelölve.

BEGIN TRANSACTION CandidateDelete
    WITH MARK N'Deleting a Job Candidate';

DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;

COMMIT TRANSACTION CandidateDelete;