Jiniya

WEB

트랜잭션이란?

- 트랜잭션이란 정보의 교환이나 데이터베이스 갱신 등 연관되는 작업들에 대한 일련의 연속을 의미하는데, 데이터베이스의 무결성이 보장되는 상태에서 요청된 작업을 완수하기 위한 작업의 기본 단위로 간주된다.


 

- 트랜잭션의 성질을 보게 되면 원자성( 분리 할 수 없는 하나의 단위로 작업은 모두 완료 되거나 모두 취소되어야 하는 성질 ), 일관성( 사용되는 모든 데이터는 일관되어야 하는 성질), 격리성( 접근하고 있는 데이터는 다른 트랜잭션으로 부터 격리되어야 한다는 성질 ), 영속성( 트랙잭션이 정상 종료되면 그 결과는 시스템에 영구적으로 적용되어야 하는 성질 ), 순차성( 데이터를 다시 로드하고 트랜잭션을 재생하여 원래 트랜잭션이 수행된 후의 상태로 데이터를 되돌리는 것 ) 이 있다.

 


- 트랜잭션은 보통 여러 개의 작업단계로 이루어지는데, 트랜잭션이 성공적으로 끝나기 위해서는 각 작업 단계들이 모두 완성되어야 하며, 그랬을 경우 비로소 새로운 내용이 데이터베이스에 실제로 반영된다. 만약 그렇지 못했을 경우, 즉 어떤 한 작업 단계에서라도 오류가 발생하면 데이터베이스에는 아무런 수정이 이루어지지 않으며, 트랜잭션이 시작되기 이전 상태로 유지된다. 트랜잭션이 성공리에 끝났을 때 이루어지는 데이터베이스의 갱신을 "commit" 이라고 부르며, 트랜잭션이 실패되었을 때 데이터베이스의 수정 내용이 취소되는 것을 "rollback"이라고 부른다. 트랜잭션의 각 사건들을 관리 감독하는 프로그램을 트랜잭션 모니터라고 하며, 트랜잭션은 SQL에 의해 제공된다.



- 트랜잭션은 크게 네 가지 종류로 분류 될 수 있다. 우선 자동 커밋 트랜잭션 ( 각 쿼리마다 자동적으로 BEGIN TRAN ... COMMIT TRAN이 붙여지는 것을 의미한다. SQLServer는 '자동 커밋 트랜잭션'을 디폴트로 사용한다. ), 명시적 트랜잭션 ( 직접 BEGIN TRAN문과 COMMIT TRAN 또는 ROLLBACK TRAN문을 써 주는 것을 말한다 ), 암시적 트랜잭션 ( 어떤 쿼리가 나오면 자동으로 내부적으로 BEGIN TRAN을 붙여 주지만, COMMIT TRAN 또는 ROLLBACK TRAN은 직접 써 줘야 한다. ), 일괄 처리 범위의 트랜잭션( MARS(Multiple Active Result Sets)에만 해당되며, MARS 세션에서 시작되는 T-SQL 명시적 또는 암시적 트랜잭션이 일괄 처리 범위 트랜잭션이 된다. 일괄 처리가 완료될 때 커밋되거나 롤백되지 않은 일괄 처리 범위의 트랜잭션은 SQLServer에서 자동으로 롤백한다.)


 

- ROLLBACK은 로그 파일 중에서 아직 커밋이 되지 않은(즉, 데이터 파일에 적용되지 않은) 내용을 로그 파일의 처음이나 마지막 체크포인트가 설정된 지점까지 취소/삭제시키는 과정을 말한다. ROLLFORWARD는 로그 파일의 처음이나 마지막 체크포인트 이후의 COMMIT TRAN들에 대해 BEGIN TRAN ... COMMIT TRAN의 과정을 다시 수행하는 것을 의미한다.