롤백 작업 처리
리소스 관리자, 트랜잭션 클라이언트 또는 KTM은 트랜잭션을 커밋하지 않아야 한다고 판단하는 경우 트랜잭션을 롤백할 수 있습니다(일반적으로 오류가 감지되었기 때문).
트랜잭션을 롤백하기 위해 리소스 관리자는 ZwRollbackEnlistment를 호출할 수 있습니다. 리소스 관리자가 ZwCreateEnlistment 를 호출하여 트랜잭션에 참여한 후 ZwPrepareComplete를 호출하기 전에 언제든지 트랜잭션을 롤백할 수 있습니다.
트랜잭션 클라이언트는 ZwRollbackTransaction을 호출하여 트랜잭션을 롤백할 수 있습니다. 트랜잭션 클라이언트가 ZwCreateTransaction 을 호출하여 트랜잭션을 만든 후 ZwCommitTransaction을 호출하기 전에 언제든지 트랜잭션을 롤백할 수 있습니다.
또한 트랜잭션 클라이언트는 ZwSetInformationTransaction을 호출하여 트랜잭션에 대한 제한 시간 값을 설정할 수 있습니다. 지정된 시간만큼 커밋되지 않은 경우 KTM은 트랜잭션을 롤백합니다.
ZwRollbackEnlistment 또는 ZwRollbackTransaction을 호출하거나 시간 제한 값을 초과하는 경우 KTM은 모든 리소스 관리자에게 TRANSACTION_NOTIFY_ROLLBACK 알림을 보냅니다.
각 리소스 관리자가 TRANSACTION_NOTIFY_ROLLBACK 알림을 받으면 다음을 수행해야 합니다.
트랜잭션의 데이터를 리소스 관리자가 트랜잭션에 등록하기 전의 상태로 복원합니다.
일반적으로 리소스 관리자는 트랜잭션의 저장된 초기 데이터를 로그 스트림에서 데이터베이스의 퍼블릭 영구 스토리지로 복사하여 트랜잭션의 데이터를 복원합니다. 로그 스트림을 사용하는 방법에 대한 자세한 내용은 KTM에서 로그 스트림 사용을 참조하세요.
ZwRollbackComplete를 호출한 후 리소스 관리자는 ZwClose를 호출하여 인리스트먼트 핸들을 닫아야 합니다.
리소스 관리자가 롤백 작업을 시작한 경우 클라이언트 인터페이스를 사용하여 트랜잭션이 실패했음을 클라이언트에 알려야 합니다.