TxF の基本的な概念
読み取り分離
トランザクション NTFS (TxF) は、読み取りコミットされた一貫性を提供します。
トランザクション ライターは、汎用読み取りアクセスの一部ではないが、汎用書き込みアクセスの一部である任意のアクセス許可で開かれたトランザクション ファイル ハンドルを参照します。 トランザクションライターは、同じトランザクションによるすべての変更を含むファイルの最新バージョンを表示します。 ファイルごとに 1 つのトランザクション ライターしか存在できません。 非トランザクション ライターは、ファイルが共有書き込みアクセス許可で開かれている場合でも、常にトランザクション ライターによってブロックされます。
トランザクション リーダーとは、汎用読み取りアクセスの一部であるが、汎用書き込みアクセスの一部ではないアクセス許可で開かれたトランザクション ファイル ハンドルを指します。 トランザクション リーダーは、ファイル ハンドルが開かれた時点で存在していたコミット済みバージョンのファイルを表示します。 トランザクション リーダーは、トランザクション ライターの影響から分離されます。 これにより、ファイル ハンドルの有効期間に対してのみファイルの一貫性のあるビューが提供され、非トランザクション ライターがブロックされます。
Note
CreateFileTransacted 関数を使用して変更のためにハンドルが開かれた場合、読み取り専用かどうかに関係なく、分離やその他のトランザクション セマンティクスのためにシステムによってトランザクション ライターに変換されるかどうかにかかわらず、そのトランザクション内で後続のすべてのファイルが開きます。 つまり、その後、読み取り専用アクセス用にハンドルが開かれると、トランザクションの開始前にハンドルはファイルのビューを受け取りません。ファイルのアクティブなトランザクション ビューを受け取ります。
トランザクション以外のファイル ハンドルでは、トランザクションがコミットされるまで、トランザクション内で行われた変更は表示されません。 非トランザクション ファイル ハンドルは、トランザクション リーダーに似た分離ビューを受け取りますが、トランザクション リーダーとは異なり、トランザクション ライターがトランザクションをコミットすると、ファイルの更新を受け取ります。
分離レベル
TxF では、読み取りコミットされた分離が提供されます。 これは、ファイルの更新がトランザクションの外部に表示されないことを意味します。 さらに、トランザクション内のファイルを読み取っている間にファイルが複数回開かれると、後続のオープンごとに異なる結果が表示される場合があります。 初めてアクセスしたファイルが使用できない (削除されたため)、またはその逆の場合があります。
トランザクション ロック
ファイルに対してトランザクション ライターを作成すると、ファイルが トランザクションによってロック されます。 トランザクションによってファイルがロックされた後、トランザクションでロックされたファイルを変更しようとするロック トランザクションの外部の他のファイル システム操作は、 ERROR_SHARING_VIOLATION または ERROR_TRANSACTIONAL_CONFLICTのいずれかで失敗します。
次の表に、トランザクション ロックの概要を示します。
現在開かれているファイル
によって試行されたファイルを開く
取引顧客
非トランザクション
Reader
リーダー/ライター
Reader
リーダー/ライター
Transacted Reader
はい
はい
はい
不可2
Transacted Reader/Writer
はい
不可2
はい
不可2
非トランザクション リーダー
はい
はい
はい
はい
非トランザクション リーダー/ライター
いいえ 1
いいえ 1
はい
はい
-
ERROR_TRANSACTIONAL_CONFLICTで失敗する
2. ERROR_SHARING_VIOLATIONで失敗する
トランザクションを使用している変更のために名前付きストリームを開いた場合、ファイル全体をロックする必要があります。
トランザクション ロックに加えて、一般的な NTFS ファイル共有ルールが適用されます。
次の 2 つのファイル共有モードを並列で検討する必要があります。
- トランザクション ロック モード。
- 通常のファイル共有モード。
より制限の厳しいモードが適用されるモードです。