Grundlegende TxF-Konzepte
Leseisolation
Transaktions-NTFS (TxF) bietet schreibgeschützte Konsistenz.
Ein Transacted Writer bezieht sich auf ein Transaktionsdateihandle, das mit einer beliebigen Berechtigung geöffnet wird, die nicht Teil des generischen Lesezugriffs ist, sondern Teil des generischen Schreibzugriffs ist. Ein Transacted Writer stellt die neueste Version einer Datei dar, die alle Änderungen durch dieselbe Transaktion enthält. Pro Datei kann nur ein transaktionsfähiger Writer vorhanden sein. Nicht transaktionierte Autoren werden immer von einem transaktionsbasierten Writer blockiert, auch wenn die Datei mit freigegebenen Schreibberechtigungen geöffnet wird.
Ein transacted reader bezieht sich auf ein Transaktionsdateihandle, das mit einer beliebigen Berechtigung geöffnet wird, die teil des generischen Lesezugriffs ist, aber nicht Teil des generischen Schreibzugriffs ist. Ein Transaktionsleser sieht eine commitierte Version der Datei, die zum Zeitpunkt des Öffnens des Dateihandles vorhanden war. Der transacted Reader ist von den Auswirkungen von Transaktionsschreibern isoliert. Dies bietet eine konsistente Ansicht der Datei nur für die Lebensdauer des Dateihandles und blockiert nicht transaktionierte Writer.
Hinweis
Wenn ein Handle zur Änderung mit der CreateFileTransacted-Funktion geöffnet wurde, werden alle nachfolgenden Öffnungen der Datei innerhalb dieser Transaktion, unabhängig davon, ob sie schreibgeschützt sind oder nicht, vom System zum Zweck der Isolation und anderer Transaktionssemantik in einen transaktionsbasierten Writer konvertiert. Dies bedeutet, dass das Handle, wenn anschließend ein Handle für schreibgeschützten Zugriff geöffnet wird, vor Beginn der Transaktion keine Ansicht der Datei empfängt; Sie empfängt die aktive Transaktionsansicht der Datei.
Bei einem nicht transaktionsbasierten Dateihandle werden keine Änderungen innerhalb einer Transaktion angezeigt, bis die Transaktion committet wurde. Das nicht transaktionierte Dateihandle empfängt eine isolierte Ansicht, die einem transacted reader ähnelt, empfängt aber im Gegensatz zu einem transacted reader das Dateiupdate, wenn ein Transacted Writer die Transaktion committet.
Isolationsstufen
TxF bietet Lesezugriffsisolation. Dies bedeutet, dass Dateiupdates außerhalb der Transaktion nicht angezeigt werden. Wenn eine Datei außerdem beim Lesen von Dateien innerhalb der Transaktion mehrmals geöffnet wird, können bei jedem nachfolgenden Öffnen unterschiedliche Ergebnisse angezeigt werden. Dateien, die beim ersten Zugriff verfügbar waren, sind möglicherweise nicht verfügbar (weil sie gelöscht wurden), oder umgekehrt.
Transaktionssperre
Durch das Erstellen eines Transaktionsschreibers für eine Datei wird die Datei transaktional gesperrt . Nachdem eine Datei durch eine Transaktion gesperrt wurde, schlagen andere Dateisystemvorgänge außerhalb der Sperrtransaktion, die versuchen, die transaktionsseitig gesperrte Datei zu ändern, entweder mit ERROR_SHARING_VIOLATION oder ERROR_TRANSACTIONAL_CONFLICT fehl.
In der folgenden Tabelle sind die Transaktionssperren zusammengefasst.
Datei, die derzeit von geöffnet wurde
Datei öffnen versucht von
Transacted
Nicht transaktioniert
Leser
Reader/Writer
Leser
Reader/Writer
Transacted Reader
Ja
Ja
Ja
Nein 2
Transacted Reader/Writer
Ja
Nein 2
Ja
Nein 2
Nicht transacted Reader
Ja
Ja
Ja
Ja
Nicht transacted Reader/Writer
Nein
Nein
Ja
Ja
- Fehler bei ERROR_TRANSACTIONAL_CONFLICT
2. Fehler bei ERROR_SHARING_VIOLATION
Wenn Sie einen benannten Stream für eine Änderung öffnen, die eine Transaktion verwendet, muss die gesamte Datei gesperrt werden.
Zusätzlich zur Transaktionssperre gelten typische NTFS-Dateifreigaberegeln.
Sie müssen die folgenden beiden Dateifreigabemodi parallel berücksichtigen:
- Der Transaktionssperrmodus.
- Normale Dateifreigabemodi.
Welcher Modus restriktiver ist, ist der, der angewendet wird.