트랜잭션(Azure Synapse Analytics 및 Microsoft Fabric)
적용 대상: Microsoft Fabric의 Azure Synapse Analytics Analytics Platform System(PDW)웨어하우스
트랜잭션은 완전히 커밋되거나 롤백되는 하나 이상의 데이터베이스 문 그룹입니다. 각각의 트랜잭션은 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 문 후에 시작됩니다.
참고 항목
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 }
트랜잭션의 시작과 종료 방법을 결정합니다.
켜기
각 문은 자체 트랜잭션에서 실행되며 COMMIT 또는 ROLLBACK 문이 필요하지 않습니다. AUTOCOMMIT이 ON일 때 명시적 트랜잭션이 허용됩니다.
OFF
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 상태인 경우 이 상황이 일어날 수 있습니다.
런타임 문 오류 이외의 오류로 인해 명시적 트랜잭션이 성공적으로 완료되지 않으면 데이터베이스 엔진이 자동으로 트랜잭션을 롤백하고 트랜잭션이 보유한 모든 리소스를 해제합니다. 예를 들어 클라이언트의 네트워크 연결이 끊어지거나 클라이언트가 애플리케이션에서 로그오프하는 경우 네트워크에서 중단 인스턴스에 알린 경우 연결에 대한 커밋되지 않은 트랜잭션이 롤백됩니다.
일괄 처리에서 런타임 문 오류가 발생하면 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에는 트랜잭션 공유 메커니즘이 없습니다. 즉 어느 특정 시점에 시스템에서 한 세션만 트랜잭션에 대한 작업을 수행할 수 있습니다.
잠금 동작
잠금은 트랜잭션의 무결성을 보장하고 여러 사용자가 동시에 데이터에 액세스할 때 데이터베이스의 일관성을 유지합니다. 잠금은 암시적 및 명시적 트랜잭션 모두에서 사용됩니다. 각 트랜잭션은 해당 트랜잭션이 종속되는 테이블, 데이터베이스 등의 리소스에 대해 서로 다른 유형의 잠금을 요청합니다.
모든 잠금은 테이블 수준 이상입니다. 잠금은 다른 트랜잭션의 리소스 수정을 차단하여 잠금을 요청하는 트랜잭션에 문제가 발생하지 않도록 합니다. 각 트랜잭션은 더 이상 잠긴 리소스에 종속되지 않게 되면 잠금을 해제합니다. 명시적 트랜잭션은 커밋 또는 롤백되어 트랜잭션이 완료될 때까지 잠금을 유지합니다.
예:
A. 명시적 트랜잭션 사용
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;
C. 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;