기본 TxF 개념

스레드 격리

트랜잭션 NTFS(TxF)는 읽기 커밋된 일관성을 제공합니다.

트랜잭션된 기록기는 일반 읽기 액세스의 일부가 아니지만 일반 쓰기 액세스의 일부인 모든 권한에 의해 열린 트랜잭션된 파일 핸들입니다. 트랜잭션된 기록기는 동일한 트랜잭션에 의한 모든 변경 내용을 포함하는 파일의 최신 버전을 봅니다. 트랜잭션된 기록기는 파일당 하나만 있을 수 있습니다. 트랜잭션되지 않은 기록기는 파일이 공유-쓰기 권한으로 열려 있는 경우에도 트랜잭션된 기록기에 의해 항상 차단됩니다.

트랜잭션된 판독기는 일반 읽기 액세스의 일부이며 일반 쓰기 액세스의 일부가 아닌 모든 권한으로 열린 트랜잭션된 파일 핸들을 나타냅니다. 트랜잭션된 판독기는 파일 핸들이 열릴 때 존재했던 커밋된 버전의 파일을 봅니다. 트랜잭션된 판독기는 트랜잭션된 기록기의 영향으로부터 격리됩니다. 이는 파일 핸들의 수명 동안만 파일의 일관된 보기를 제공하고 트랜잭션되지 않은 기록기를 차단합니다.

참고

CreateFileTransacted 함수를 사용하여 수정하기 위해 핸들을 열면 해당 트랜잭션 내의 모든 후속 파일 열기가 읽기 전용인지 아닌지 여부에 관계없이 격리 및 기타 트랜잭션 의미 체계를 위해 시스템에 의해 트랜잭션 기록기로 변환됩니다. 즉, 이후에 읽기 전용 액세스를 위해 핸들을 열면 트랜잭션이 시작되기 전에 핸들이 파일 보기를 수신하지 않습니다. 파일의 활성 트랜잭션 뷰를 수신합니다.

트랜잭션되지 않은 파일 핸들은 트랜잭션이 커밋될 때까지 트랜잭션 내에서 변경된 내용을 볼 수 없습니다. 트랜잭션되지 않은 파일 핸들은 트랜잭션된 판독기와 유사한 격리된 뷰를 수신하지만 트랜잭션된 판독기와 달리 트랜잭션된 기록기가 트랜잭션을 커밋할 때 파일 업데이트를 받습니다.

격리 수준

TxF는 읽기 커밋된 격리를 제공합니다. 즉, 트랜잭션 외부에서 파일 업데이트가 보이지 않습니다. 또한 트랜잭션 내에서 파일을 읽는 동안 파일이 두 번 이상 열린 경우, 이후에 열 때마다 다른 결과가 발생할 수도 있습니다. 처음 액세스했을 때 사용할 수 있었던 파일은 (삭제되었기 때문에) 사용하지 못할 수 있으며 그 반대의 경우도 가능합니다.

트랜잭션 잠금

파일에 트랜잭션된 기록기를 만들면 파일이 트랜잭션 방식으로 잠기게 됩니다. 트랜잭션에 의해 파일이 잠기면 트랜잭션에서 잠긴 파일을 수정하려는 잠금 트랜잭션 외부의 다른 파일 시스템 작업이 ERROR_SHARING_VIOLATION 또는 ERROR_TRANSACTIONAL_CONFLICT 실패를 합니다.

다음 표에서는 트랜잭션 잠금을 요약합니다.

파일을 현재 연 사람

파일을 열려고 시도한 사람

트랜잭션 처리됨

비트랜잭션

판독기

판독기/기록기

판독기

판독기/기록기

트랜잭션된 판독기

Yes

Yes

아니요2

트랜잭션된 판독기/기록기

Yes

아니요2

Yes

아니요2

트랜잭션되지 않은 판독기

Yes

Yes

트랜잭션되지 않은 판독기/기록기

아니요1

아니요1

Yes

  1. ERROR_TRANSACTIONAL_CONFLICT 실패
    2. ERROR_SHARING_VIOLATION 실패

트랜잭션을 사용하는 수정을 위해 명명된 스트림을 열면 전체 파일을 잠가야 합니다.

트랜잭션 잠금 외에도 일반적인 NTFS 파일 공유 규칙이 적용됩니다.

다음 두 파일 공유 모드를 동시에 고려해야 합니다.

  • 트랜잭션 잠금 모드입니다.
  • 일반 파일 공유 모드입니다.

더 제한적인 모드는 적용되는 모드입니다.