Zugreifen auf FileTables mit Datei-E/A-APIs

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

In diesem Thema

Ich möchte…

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

  • Erstellen von Dateien und Verzeichnissen in einer FileTable

  • Lesen von Dateien und Verzeichnissen in einer FileTable

  • Aktualisieren von Dateien und Verzeichnissen in einer FileTable

  • Löschen von Dateien und Verzeichnissen in einer FileTable

Weitere Informationen

  • Unterstützte Dateisystemvorgänge

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

    • Verwenden von virtuellen Netzwerknamen mit (VNNs) AlwaysOn-Verfügbarkeitsgruppen

    • Teilupdates

    • Transaktionssemantik

    • Parallelitätssteuerung

    • Trigger

  • In FileTables unterstützte Dateisystemfunktionalität

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

Die primäre Verwendung von FileTables wird durch das Windows-Dateisystem und Datei-E/A-APIs erwartet. 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 GetFileNamespacePath (Transact-SQL)-Funktion verwenden, um den logischen Pfad für eine Datei oder ein Verzeichnis abzurufen. Weitere Informationen finden Sie unter Arbeiten mit Verzeichnissen und Pfaden 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.

[NACH OBEN]

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. Updates von Dateinamespaces (beispielsweise 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 0 entspricht.

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

  • Freigabe und Parallelität des Zugriffs werden erzwungen, wenn sich mehrere gleichzeitige Datei-E/A-Vorgänge oder Transact-SQL-Vorgänge in die Hierarchie auf die gleiche Datei oder das Verzeichnis auswirken.

[NACH OBEN]

Lesen von Dateien und Verzeichnissen in einer FileTable

Alle Datei-E/A-Zugriffsvorgänge (für Datenstrom- und Attributdaten) verfügen über eine Read Committed-Isolationssemantik für diese Daten in SQL Server.

[NACH OBEN]

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.

[NACH OBEN]

Löschen von Dateien und Verzeichnissen in einer FileTable

Jede Windows-Datei-E/A-API-Semantik wird erzwungen, wenn Sie eine Datei oder ein Verzeichnis löschen.

  • Beim Löschen eines Verzeichnisses tritt ein Fehler auf, wenn das Verzeichnis Unterverzeichnisse mit Dateien 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.

[NACH OBEN]

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

[NACH OBEN]

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

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

Wenn die Datenbank, die FILESTREAM oder FileTable-Daten enthält, zu einer AlwaysOn-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 bei AlwaysOn-Verfügbarkeitsgruppen (SQL Server).

Teilupdates

Ein überschreibbares Handle, das Daten in einer FileTable mit der GetFileNamespacePath (Transact-SQL)-Funktion abruft, kann verwendet werden, um auf den FILESTREAM-Inhalt direkte Teilupdates auszuführen. Dies steht im Gegensatz zu dem transaktiven FILESTREAM-Zugriff über ein Handle, das durch den OpenSQLFILESTREAM()-Befehl und durch das Übergeben eines expliziten Transaktionskontexts abgerufen wurde.

[NACH OBEN]

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:

  • Nicht transaktiver Zugriff auf FILESTREAM-Daten in einer FileTable ist keinen Transaktionen zugeordnet und verfügt daher nicht über eine spezifische Isolationssemantik. Von SQL Server wird jedoch möglicherweise Sperren- oder Parallelitätssemantik mithilfe von internen Transaktionen auf den FileTable-Daten erzwungen. 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.

[NACH OBEN]

Parallelitätssteuerung

SQL Server erzwingt die Parallelitätssteuerung für den FileTable-Zugriff unter Dateisystemanwendungen sowie zwischen Dateisystemanwendungen und Transact-SQL-Anwendungen. Diese Parallelitätssteuerung wird durch entsprechende Sperren in den FileTable-Zeilen erreicht.

[NACH OBEN]

Trigger

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.

[NACH OBEN]

In FileTables unterstützte Dateisystemfunktionalität

Funktion

Unterstützt

Kommentare

Oplocks

Ja

Ebene 2, Ebene 1, Batch- und Filter-Oplocks werden unterstützt.

Erweiterte Attribute

Nein

Reparse Points

Nein

Persistente ACLs

Nein

Benannte Datenströme

Nein

Dateien von geringer Dichte

Ja

Geringe Dichte kann nur für Dateien festgelegt werden und wirkt sich auf die Speicherung des Datenstroms aus. Da FILESTREAM-Daten auf NTFS-Volumes gespeichert werden, unterstützt die FileTable-Funktion Dateien mit geringer Dichte, indem er die Anforderungen an das NTFS-Dateisystem weiterleitet.

Komprimierung

Ja

Verschlüsselung

Ja

TxF

Nein

Datei-IDs

Nein

Objekt-IDs

Nein

Symbolische Links

Nein

Harte Links

Nein

Kurze Namen

Nein

Benachrichtigungen über Verzeichnisänderungen

Nein

Bytebereichssperren

Ja

Anforderungen zur Bytebereichssperre werden an das NTFS-Dateisystem übergeben.

Im Speicher abgebildete Dateien

Nein

Abbrechen von E/A

Ja

Sicherheit

Nein

Sicherheit auf Windows-Freigabeebene und Sicherheit auf SQL Server-Tabellen-/Spaltenebene wird erzwungen.

USN-Journal

Nein

Metadatenänderungen an Dateien und Verzeichnissen in einer FileTable 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.

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

[NACH OBEN]

Siehe auch

Konzepte

Laden von Dateien in FileTables

Arbeiten mit Verzeichnissen und Pfaden in FileTables

Zugreifen auf FileTables mit Transact-SQL

FileTable-DDL, Funktionen, gespeicherte Prozeduren und Sichten