Mit Datei-Eingabe-/Ausgabe-APIs auf FileTables zugreifen

Gilt für:SQL Server

Beschreibt, wie Dateisystem-E/A in einer FileTable funktioniert.

Erste Schritte mit Datei-E/A-APIs mit FileTables

Die Hauptverwendung von FileTables erfolgt voraussichtlich über das Windows-Dateisystem und die Datei-E/A-APIs. FileTables unterstützt den nicht transaktionalen Zugriff durch den umfangreichen Satz verfügbarer Datei-E/A-APIs.

  1. Datei-E/A-API-Zugriff beginnt in der Regel, indem er einen logischen UNC-Pfad für die Datei oder das Verzeichnis anfordert. Anwendungen können eine Transact-SQL-Anweisung mit der Funktion GetFileNamespacePath (Transact-SQL) verwenden, um den logischen Pfad für die Datei oder das Verzeichnis abzurufen. Weitere Informationen finden Sie unter Work with Directories and Paths in FileTables.

  2. Von der Anwendung wird dieser logische Pfad anschließend verwendet, um ein Handle für die Datei oder das Verzeichnis abzurufen und etwas mit dem Objekt auszuführen. Der Pfad kann an jede unterstützte Dateisystem-API-Funktion, z. B. CreateFile() oder CreateDirectory(), übergeben werden, um eine Datei zu erstellen oder zu öffnen und ein Handle abzurufen. Das Handle kann verwendet werden, um dann Daten zu streamen, aufzuzählen oder Verzeichnisse zu organisieren oder um Dateiattribute zu erhalten bzw. festzulegen oder umd Dateien oder Verzeichnisse usw. zu löschen.

Erstellen von Dateien und Verzeichnissen in einer FileTable

Eine Datei oder ein Verzeichnis kann in einer FileTable mithilfe von Datei-E/A-APIs, beispielsweise CreateFile oder CreateDirectory, erstellt werden.

  • Sämtliche CREATION_DISPOSITION-Flags, Freigabemodi und Zugriffsmodi werden unterstützt. Dies schließt die Erstellung, Löschung und direkte Änderung von Dateien ein. Aktualisierungen von Dateinamespaces (z. B. Erstellen und Löschen von Verzeichnissen, Umbenennungs- und Verschiebevorgänge) werden ebenfalls unterstützt.

  • Das Erstellen einer neuen Datei oder eines neuen Verzeichnisses entspricht der Erstellung einer neuen Zeile in der zugrunde liegenden FileTable.

  • Bei Dateien werden die Datenstromdaten in der file_stream -Spalte gespeichert, wohingegen diese Spalte bei Verzeichnissen NULL entspricht.

  • Für Dateien enthält die is_directory -Spalte den Wert false. Für Verzeichnisse enthält diese Spalte den Wert true.

  • Gemeinsamer und gleichzeitiger Zugriff werden durchgesetzt, wenn mehrere gleichzeitige Datei-E/A-Vorgänge oder Transact-SQL-Vorgänge dieselbe Datei bzw. dasselbe Verzeichnis in der Hierarchie betreffen.

Lesen von Dateien und Verzeichnissen in einer FileTable

Die Semantik zum Lesen der zugesicherten Isolation wird in SQL Server für alle Datei-E/A-Zugriffsvorgänge für Datenstrom- und Attributdaten erzwungen.

Schreiben und Aktualisieren von Dateien und Verzeichnissen in einer FileTable

  • Alle Datei-E/A-Schreib-/Updatevorgänge auf einer FileTable sind nicht transaktional. Das heißt, keine SQL Server-Transaktion wird an diese Vorgänge gebunden, und es werden keine ACID-Garantien bereitgestellt.

  • Alle Datei-E/A-Streaming- bzw. direkten Updates werden für die FileTable unterstützt.

  • Updates der FILESTREAM-Daten oder -attribute über die Datei-E/A-APIs haben Updates der entsprechenden file_stream - und Dateiattributspalten in der FileTable zur Folge.

Löschen von Dateien und Verzeichnissen in einer FileTable

Beim Löschen einer Datei oder eines Verzeichnisses gelten alle Semantiken der Windows-Datei-E/A-API.

  • Beim Löschen eines Verzeichnisses tritt ein Fehler auf, wenn das Verzeichnis irgendwelche Dateien oder Unterverzeichnisse enthält.

  • Durch Löschen einer Datei oder eines Verzeichnisses wird die entsprechende Zeile aus der FileTable entfernt. Dies entspricht dem Löschen dieser Zeile durch einen Transact-SQL-Vorgang.

Unterstützte Dateisystemvorgänge

FileTables unterstützen die Dateisystem-APIs, die sich auf die folgenden Dateisystemvorgänge beziehen:

  • Verzeichnisverwaltung

  • Dateiverwaltung

FileTables unterstützen die folgenden Vorgänge nicht:

  • Datenträgerverwaltung

  • Volumeverwaltung

  • Transaktions-NTFS

Weitere Überlegungen für Datei-E/A-Zugriff auf FileTables

Verwenden von virtuellen Netzwerknamen (VNNs) mit Always On-Verfügbarkeitsgruppen

Wenn die Datenbank, die FILESTREAM oder FileTable-Daten enthält, zu einer Always On-Verfügbarkeitsgruppe gehört, dann sollten bei allen Zugriffen auf FILESTREAM oder FileTable-Daten über die Dateisystem-APIs VNNs statt der Computernamen verwendet werden. Weitere Informationen finden Sie unter FILESTREAM und FileTable mit Always On-Verfügbarkeitsgruppen (SQL Server).

Teilupdates

Ein beschreibbares Handle, das für FILESTREAM-Daten in einer FileTable mithilfe der Funktion GetFileNamespacePath (Transact-SQL) abgerufen wurde, kann verwendet werden, um direkte partielle Aktualisierungen am FILESTREAM-Inhalt vorzunehmen. Dieses Verhalten unterscheidet sich von dem FILESTREAM-Zugriff innerhalb einer Transaktion über ein Handle, das durch Aufrufen von OpenSQLFILESTREAM() und Übergabe eines expliziten Transaktionskontexts erhalten wird.

Transaktionssemantik

Wenn Sie mit Datei-E/A-APIs auf die Dateien in einer FileTable zugreifen, sind diese Vorgänge keinen Benutzertransaktionen zugeordnet und haben die folgenden zusätzlichen Eigenschaften:

  • Da der nicht transaktionsgebundene Zugriff auf FILESTREAM-Daten in einer FileTable mit keiner Transaktion verknüpft ist, weist er keine spezifische Isolationssemantik auf. SQL Server kann jedoch interne Transaktionen verwenden, um die Sperr- oder Parallelitätssemantik für die FileTable-Daten durchzusetzen. Alle internen Transaktionen dieses Typs werden mit Read Committed-Isolation ausgeführt.

  • Es gibt keine ACID-Garantien für diese nicht transaktiven Vorgänge hinsichtlich FILESTREAM-Daten. Die Konsistenzgarantien ähneln denen für Dateiupdates, die von Anwendungen im Dateisystem erstellt wurden.

  • Für diese Änderungen ist kein Rollback möglich.

Auf die Spalte FILESTREAM in einer FileTable kann jedoch auch mit Transaktions-FILESTREAM-Zugriff zugegriffen werden, indem OpenSqlFileStream()aufgerufen wird. Diese Art von Zugriff kann vollständig transaktionsgebunden sein und berücksichtigt alle derzeit einheitlich unterstützten Transaktionen.

Nebenläufigkeitskontrolle

SQL Server erzwingt die Parallelitätssteuerung für den Dateitabellen-Zugriff unter Dateisystemanwendungen sowie zwischen Dateisystemanwendungen und Transact–SQL-Anwendungen. Diese Parallelitätssteuerung erfolgt durch das Setzen entsprechender Sperren auf die FileTable-Zeilen.

Auslöser

Das Erstellen/Ändern/Löschen von Dateien/Verzeichnissen oder deren Attributen über das Dateisystem führt zu entsprechenden Einfüge-/Update-/Löschvorgängen in der FileTable. Alle zugeordneten Transact-SQL-DML-Trigger werden als Teil dieser Vorgänge ausgelöst.

In FileTables unterstützte Dateisystemfunktionalität

Fähigkeit Unterstützt Kommentare
Oplocks Ja Ebene 2, Ebene 1, Batch- und Filter-Oplocks werden unterstützt.
Erweiterte Attribute No
Analysepunkte No
Persistente ACLs No
Benannte Datenströme No
Sparse Files Ja Die Sparse-Eigenschaft kann nur für Dateien festgelegt werden und beeinflusst die Speicherung des Datenstroms. Da FILESTREAM-Daten auf NTFS-Volumes gespeichert werden, unterstützt die Dateitabellenfunktion Sparsedateien, indem sie die Anforderungen an das NTFS-Dateisystem weiterleitet.
Komprimierung Ja
Verschlüsselung Ja
TxF No
Datei-IDs No
Objekt-IDs No
Symbolische Links No
Harte Links No
Kurze Namen No
Benachrichtigungen über Verzeichnisänderungen No
Bytebereichssperren Ja Anforderungen zur Bytebereichssperre werden an das NTFS-Dateisystem übergeben.
Im Speicher abgebildete Dateien No
E/A abbrechen Ja
Security No Sicherheit auf Windows-Freigabeebene und SQL Server-Tabelle und Spaltenebene werden erzwungen.
USN-Journal No Metadatenänderungen an Dateien und Verzeichnissen in einer Dateitabelle sind DML-Vorgänge in einer SQL Server-Datenbank. Daher werden sie in der entsprechenden Datenbankprotokolldatei protokolliert. Sie werden jedoch (abgesehen von Änderungen an der Größe) nicht im NTFS-USN-Journal protokolliert.

SQL Server-Änderungsnachverfolgung kann verwendet werden, um ähnliche Informationen zu erfassen.