mssql transaction 예제

COMMIT 명령은 트랜잭션이 호출한 변경 내용을 데이터베이스에 저장하는 데 사용되는 트랜잭션 명령입니다. COMMIT 명령은 마지막 COMMIT 또는 ROLLBACK 명령 이후 모든 트랜잭션을 데이터베이스에 저장합니다. BEGIN TRANSACTION 문으로 시작된 로컬 트랜잭션은 문이 커밋되거나 롤백되기 전에 다음 작업이 수행되는 경우 분산 트랜잭션으로 에스컬레이션됩니다. 삽입 문 다음에 Update 문입니다. 이 두 문이 모두 성공적으로 완료되어야 하며 그렇지 않으면 그 중 어느 것을 실행해서는 안 됩니다. 실제로 많은 SQL 쿼리를 그룹으로 연결하면 트랜잭션의 일부로 모두 함께 실행됩니다. 롤백 트랜잭션은 트랜잭션의 시작 부분또는 트랜잭션 내부의 저장 지점으로 명시적 또는 암시적 트랜잭션을 롤백합니다. 또한 트랜잭션이 보유한 리소스를 해제합니다. MS 마크는 표시된 트랜잭션에 의해 데이터베이스가 업데이트되는 경우에만 트랜잭션 로그에 배치됩니다. 데이터를 수정하지 않는 트랜잭션은 표시되지 않습니다. SQL Server 트랜잭션을 사용하면 데이터베이스 무결성과 일관성을 유지하는 데 도움이 됩니다. 반면에 잘못 작성된 트랜잭션은 데이터베이스 리소스를 장시간 잠그면 시스템의 전반적인 성능에 영향을 줄 수 있습니다. 이 문제를 해결하려면 트랜잭션을 작성할 때 다음 사항을 고려하는 것이 좋습니다.

그림 1과 그림 2에서 볼 수 있듯이 트랜잭션을 중첩하고 @@TRANCOUNT 자동 변수를 사용하여 수준을 검색할 수 있습니다. 또한 커밋 및 롤백이 대칭적으로 행동하지 않는다는 것을 배웠습니다. COMMIT은 @@TRANCOUNT 값을 줄이고 ROLLBACK은 0으로 재설정합니다. 이는 마지막 COMMIT가 발행될 때까지 트랜잭션이 완전히 커밋되지 않는다는 의미입니다. 트랜잭션 집합을 얼마나 깊이 중첩하든 마지막 COMMIT만 영향을 미칩니다. BEGIN 트랜잭션이 로컬 트랜잭션을 시작하지만 응용 프로그램이 이후에 INSERT, UPDATE 또는 DELETE 문을 실행하는 등 로그에 기록되어야 하는 작업을 수행할 때까지 트랜잭션 로그에 기록되지 않습니다. 응용 프로그램은 SELECT 문의 트랜잭션 격리 수준을 보호하기 위해 잠금을 획득하는 등의 작업을 수행할 수 있지만 응용 프로그램이 수정 작업을 수행할 때까지 로그에 기록되지 않습니다. 또한 XACT_ABORT를 ON으로 설정하여 원자성을 달성할 수도 있습니다.

XACT_ABORT를 ON으로 설정하면 오류가 발생했을 때 트랜잭션 내의 모든 문을 롤백할 수 있습니다. ROLLBACK 명령은 데이터베이스에 아직 저장되지 않은 트랜잭션을 실행 취소하는 데 사용되는 트랜잭션 명령입니다. 이 명령은 마지막 COMMIT 또는 ROLLBACK 명령이 사용된 이후 트랜잭션을 취소하는 데만 사용할 수 있습니다. 이 예제에서는 중첩된 COMMIT TRAN에도 불구하고 외부 ROLLBACK이 데이터베이스 트랜잭션을 시작하는 데 사용되고 다음 트랜잭션의 특성을 지정하는 데 사용되는 의 효과를 여전히 반대로 합니다.

©2019 DemiJohn

Log in with your credentials

Forgot your details?