적용 대상:Azure Synapse Analytics
Analytics Platform System(PDW)
트랜잭션은 완전히 커밋되거나 롤백되는 하나 이상의 데이터베이스 문 그룹입니다. 각각의 트랜잭션은 ACID(원자성, 일관성, 격리성 및 내구성)입니다. 트랜잭션이 성공하면 그 안의 모든 문이 커밋됩니다. 트랜잭션이 실패하면 그룹의 문 중 하나 이상이 실패하는 것이며 전체 그룹이 롤백됩니다.
참고 항목
이 SET AUTOCOMMIT 명령은 Microsoft Fabric Data Warehouse에서 지원되지 않습니다. Microsoft Fabric Data Warehouse의 트랜잭션, 격리, 동시성 및 일관성에 대한 자세한 내용은 패브릭 데이터 웨어하우스의 트랜잭션을 참조하세요.
트랜잭션의 시작과 끝은 설정 및 , COMMIT및 ROLLBACK 문에 AUTOCOMMITBEGIN TRANSACTION따라 달라집니다.
지원되는 트랜잭션 유형은 다음과 같습니다.
명시적 트랜잭션은 문으로
BEGIN TRANSACTION시작하고 orROLLBACK문으로COMMIT끝납니다.자동 커밋 트랜잭션은 세션 내에서 자동으로 시작되며 문으로
BEGIN TRANSACTION시작하지 않습니다.-
AUTOCOMMIT설정이면ON각 문이 트랜잭션에서 실행되며 명시적COMMIT이거나ROLLBACK필요하지 않습니다. - 설정인
AUTOCOMMIT경우OFFCOMMIT트랜잭션의 결과를 확인하려면 문 또는ROLLBACK문이 필요합니다. 자동 커밋 트랜잭션은 문 또는 문 바로 뒤COMMIT또는ROLLBACK문 후에SET AUTOCOMMIT OFF시작됩니다.
-
구문
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 경우 이 설정은 현재 트랜잭션에 영향을 미치며 트랜잭션이 완료될 때까지 적용되지 않습니다.
이 ON경우 AUTOCOMMIT 다른 SET AUTOCOMMIT ON 문을 실행해도 아무런 효과가 없습니다. 마찬가지로, 있는 경우 AUTOCOMMITOFF다른 SET AUTOCOMMIT OFF 실행은 아무런 영향을 주지 않습니다.
켜기
각 문은 자체 트랜잭션에서 실행되며 명시적 COMMIT 또는 ROLLBACK 문이 필요하지 않습니다. 명시적 트랜잭션은 있는 경우 AUTOCOMMIT 허용됩니다 ON.
OFF
Azure Synapse Analytics는 트랜잭션이 아직 진행 중이 아닌 경우 자동으로 트랜잭션을 시작합니다. 후속 문은 트랜잭션의 일부로 실행되며 COMMIT 트랜잭션의 결과를 확인하는 데 필요하거나 ROLLBACK 필요합니다. 트랜잭션이 이 작업 모드에서 커밋하거나 롤백하는 즉시 모드가 유지 OFF되고 새 트랜잭션이 시작됩니다. 명시적 트랜잭션은 있는 경우 AUTOCOMMITOFF허용되지 않습니다.
SET IMPLICIT_TRANSACTIONS { ON | OFF }
이렇게 하면 .와 동일한 모드가 전환됩니다.SET AUTOCOMMIT
SET IMPLICIT_TRANSACTIONS 이 경우 ON연결을 암시적 트랜잭션 모드로 설정합니다. 이 경우 OFF자동 커밋 모드에 대한 연결을 반환합니다. 자세한 내용은 SET IMPLICIT_TRANSACTIONS(Transact-SQL)를 참조하세요.
사용 권한
트랜잭션 관련 문 실행에는 특정 권한이 필요하지 않습니다. 트랜잭션 안에서 문을 실행하려면 권한이 필요합니다.
오류 처리
실행 중 ROLLBACK 이고 활성 트랜잭션이 없는 경우 COMMIT 오류가 발생합니다.
트랜잭션이 BEGIN TRANSACTION 이미 진행 중인 동안 실행되면 오류가 발생합니다. 이는 성공적인 BEGIN TRANSACTION 문 이후에 발생하거나 세션이 아래에 SET AUTOCOMMIT OFF있을 때 발생할 BEGIN TRANSACTION 수 있습니다.
런타임 문 오류 이외의 오류로 인해 명시적 트랜잭션이 성공적으로 완료되지 않으면 데이터베이스 엔진이 자동으로 트랜잭션을 롤백하고 트랜잭션이 보유한 모든 리소스를 해제합니다. 예를 들어 클라이언트의 네트워크 연결이 끊어지거나 클라이언트가 애플리케이션에서 로그아웃하는 경우 네트워크에서 중단 인스턴스에 알린 경우 연결에 대한 커밋되지 않은 트랜잭션이 롤백됩니다.
일괄 처리에서 런타임 문 오류가 발생하면 Azure Synapse Analytics는 SQL Server XACT_ABORT 가 설정된 ON 것과 일치하며 전체 트랜잭션이 롤백됩니다. 설정에 대한 XACT_ABORT 자세한 내용은 SET XACT_ABORT(Transact-SQL)를 참조하세요.
비고
한 세션은 특정 시점에 한 트랜잭션만 실행할 수 있고 저장 지점과 중첩 트랜잭션은 지원되지 않습니다.
트랜잭션에서 참조하는 모든 데이터가 논리적으로 올바른 경우에만 프로그래머가 발급 COMMIT 하는 것은 프로그래머의 책임입니다.
트랜잭션 완료 전에 세션이 종료되면 트랜잭션이 롤백됩니다.
트랜잭션 모드는 세션 수준에서 관리됩니다. 예를 들어 한 세션이 명시적 트랜잭션을 시작하거나 명시적 트랜잭션으로 OFF설정 AUTOCOMMIT 하거나 설정 IMPLICIT_TRANSACTIONS 하면 ON다른 세션의 트랜잭션 모드에는 영향을 주지 않습니다.
제한점
데이터 수정이 데이터베이스의 영구적인 부분으로 만들어졌기 때문에 문이 실행된 후에 COMMIT 는 트랜잭션을 롤백할 수 없습니다.
CREATE DATABASE 및 DROP DATABASE(Transact-SQL) 명령은 명시적 트랜잭션 내에서 사용할 수 없습니다.
Azure Synapse Analytics에는 트랜잭션 공유 메커니즘이 없습니다. 즉 어느 특정 시점에 시스템에서 한 세션만 트랜잭션에 대한 작업을 수행할 수 있습니다.
잠금 동작
잠금은 트랜잭션의 무결성을 보장하고 여러 사용자가 동시에 데이터에 액세스할 때 데이터베이스의 일관성을 유지합니다. 잠금은 암시적 및 명시적 트랜잭션 모두에서 사용됩니다. 각 트랜잭션은 해당 트랜잭션이 종속되는 테이블, 데이터베이스 등의 리소스에 대해 서로 다른 유형의 잠금을 요청합니다.
모든 잠금은 테이블 수준 이상입니다. 잠금은 다른 트랜잭션의 리소스 수정을 차단하여 잠금을 요청하는 트랜잭션에 문제가 발생하지 않도록 합니다. 각 트랜잭션은 더 이상 잠긴 리소스에 종속되지 않게 되면 잠금을 해제합니다. 명시적 트랜잭션은 커밋 또는 롤백되어 트랜잭션이 완료될 때까지 잠금을 유지합니다.
예시
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 설정
다음 예제에서는 설정을 .로 ON설정합니다AUTOCOMMIT.
SET AUTOCOMMIT ON;
다음 예제에서는 설정을 .로 OFF설정합니다AUTOCOMMIT.
SET AUTOCOMMIT OFF;
D. 암시적 다중 문 트랜잭션 사용
SET AUTOCOMMIT OFF;
CREATE TABLE ValueTable (id INT);
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
COMMIT;