트랜잭션 NTFS를 사용 하는 방법

트랜잭션 된 파일 핸들

트랜잭션 NTFS (TxF)는 파일 핸들을 트랜잭션에 바인딩합니다. 핸들 (예: ReadFileWriteFile 함수)에서 작동 하는 작업의 경우 실제 API 함수 호출이 변경 되지 않습니다. 이름을 사용 하는 파일 작업의 경우 이러한 작업에 대해 명시적 트랜잭션 함수를 사용 합니다. 예를 들어 CreateFile를 호출 하는 대신 CreateFileTransacted를 호출 합니다. 그러면 핸들이 필요한 모든 파일 작업에 사용할 수 있는 트랜잭션 파일 핸들이 생성 됩니다. 이 핸들을 사용 하는 모든 후속 작업은 트랜잭션 작업입니다.

기본 TxF 사용

다음 일련의 단계는 TxF의 가장 기본적인 사용량을 나타냅니다. 응용 프로그램 디자이너의 재량에 따라서 더 복잡 한 시나리오도 지원 됩니다.

  1. CreateTransaction 또는 DTC ( DTC(Distributed Transaction Coordinator) )의 IKernelTransaction 인터페이스를 사용 하 여 KTM 함수를 호출 하 여 트랜잭션을 만듭니다.
  2. CreateFileTransacted을 호출 하 여 트랜잭션 된 파일 핸들을 가져옵니다.
  3. 트랜잭션 된 파일 핸들을 사용 하 여 필요에 따라 파일을 수정 합니다.
  4. 1 단계에서 만든 트랜잭션과 연결 된 모든 트랜잭션 파일 핸들을 닫습니다.
  5. 해당 KTM 또는 DTC 함수를 호출 하 여 트랜잭션을 커밋하거나 중단 합니다.

TxF 프로그래밍 모델의 핵심 사항

TxF 프로그래밍 모델에는 TxF 응용 프로그램을 개발할 때 고려해 야 할 다음과 같은 주요 사항이 있습니다.

  • 트랜잭션을 커밋하거나 롤백하려면 먼저 응용 프로그램에서 모든 트랜잭션 파일 핸들을 닫는 것이 좋습니다. 시스템은 트랜잭션이 종료 될 때 모든 트 랜 잭 트 핸들을 무효화 합니다. 트랜잭션이 종료 된 후 트랜잭션 핸들에 대해 close를 제외한 모든 작업은 다음 오류를 반환 합니다. 오류 _ 핸들이 _ _ 더 이상 _ 유효 하지 않습니다.
  • 파일이 저장소 단위로 표시 됩니다. 부분 업데이트 및 전체 파일 덮어쓰기가 지원 됩니다. 여러 트랜잭션이 동시에 동일한 파일을 수정할 수 없습니다.
  • 메모리 매핑된 i/o는 투명 하 고 일반 파일 i/o와 일치 합니다. 응용 프로그램은 트랜잭션을 커밋하기 전에 열린 섹션을 플러시하고 닫아야 합니다. 이 작업을 수행 하지 못하면 트랜잭션 내에서 매핑된 파일이 부분적으로 변경 될 수 있습니다. 이 작업이 수행 되지 않으면 롤백이 실패 합니다.

일반적인 프로그래밍 오류

트랜잭션 응용 프로그램을 개발할 때 다음과 같은 일반적인 오류가 발생할 수 있습니다.

  • 트랜잭션이 완료 된 후 파일 핸들을 사용 합니다.
  • 트랜잭션을 커밋하기 전에 삭제 된 파일 및 디렉터리에 대 한 핸들을 닫지 못하면 삭제 작업이 발생 하지 않습니다. 이 이벤트는 삭제 작업을 트랜잭션의 일부로 간주 하기 위해 커밋을 수행 하기 전에 발생 해야 합니다. 이는 Windows 파일 i/o 하위 시스템의 일부로 작업이 트랜잭션 되지 않은 경우에도 시스템에서 마지막 핸들을 닫을 때까지 파일을 실제로 삭제 하지 않기 때문입니다.
  • 시스템에서 시작한 트랜잭션 롤백을 고려 하지 못했습니다. 언제 든 지 발생할 수 있습니다. 예를 들어 시스템 리소스가 고갈 되 면 트랜잭션이 롤백됩니다.