Nested Transaction은 트랜잭션 내에서 다시 트랜잭션을 정의하는 방법입니다.
그리구, savepoint 라는걸 알아볼텐데요. 이것은 전체 트랜잭션이 아니라 특정 시점까지의 트랜잭션만 취소되도록 하는 방법입니다. 9.3.1 트랜잭션 내의 트랜잭션 처리(Nested Transactions) 트랜잭션 내에서 다시 트랜잭션을 정의할수 있습니다. 그러나, 가장 먼저 시작한 트랜잭션만이 실질적인 의미를 가지며, 그속에 내장된 트랜잭션은 단순히 @@trancount값만을 증가시킵니다. 왜냐하면 어차피 트랜잭션이라는것은 그 정의 자체가 All or Nothing 개념으로 처리가 모두 되거나 아니면 모두 취소가 되기 때문이지요. 현재 트랜잭션 네스팅 상태를 보려면 @@trancount 값이나 DBCC OPENTRAN 명령을 사용하면 됩니다.
어찌보면 굉장히 복잡하게 보이지만, 어렵지 않는 내용입니다. 트랜잭션을 종료하기 위해서는 BETRAN 문을 사용한 만큼 그에 대응되는 COMMIT문을 사용하거나 BEGIN TRAN 문을 수에 상관없이 ROLLBACK문을 한번만 사용해 주면 됩니다. 위의 예제처럼 BEGIN TRAN 문을 세번 사용했다면 COMMIT 문을 세번사용해야만 완전히 트랜잭션이 완료되는 것을 알수 있습니다. 9.3.2 트랜잭션 SAVEPOINT 시점 까지만 ROLLBACK SAVEPOINT 라는것은 트랜잭션 처리중의 한 과정을 가리키는 주소 개념입니다. 이것은 트랜잭션을 처리하다가 업무 규칙상의 오류가 발생했을 때 그냥 ROLLBACK TRAN 문을 사용하여 전체 트랜잭션이 취소되는 것을 막을 수 있는 방법으로 ROLLBACK TRAN SAVEPOINT_NAME 형식을 사용하여 진행된 트랜잭션 중에서 특정 시점까지만 취소할수 있게끔 해 줍니다. 예제를 보면서 해야겠지요? 아래의 예제를 보면,
위의 예제의 결과를 보면 id trancnt ------------------ 1 2 3 2 와 같이 2번에 대한 데이타는 rollback 처리가 되었음을 알수 있습니다. 언제 이런걸 사용하게 될지는 모르겠지만, 이런 명령도 있구나 하는 정도는 알아두는것이 좋을 듯 싶어서 몇자 적어 보았습니다. 오늘도 행복하시와여.
|
|||||||||||||||