Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Beschreibt, wie Dateisystem-E/A in einer FileTable funktioniert.
Erste Schritte mit Datei-E/A-APIs mit FileTables
Die primäre Verwendung von FileTables wird voraussichtlich über das Windows-Dateisystem und die Datei-E/A-APIs erfolgen. FileTables unterstützen nicht-transaktionalen Zugriff über die umfangreiche Auswahl verfügbarer Datei-I/O-APIs.
Der Datei-E/A-API-Zugriff beginnt in der Regel mit dem Abrufen eines logischen UNC-Pfads für die Datei oder das Verzeichnis. Anwendungen können eine Transact-SQL-Anweisung mit der GetFileNamespacePath (Transact-SQL) -Funktion verwenden, um den logischen Pfad für die Datei oder das Verzeichnis abzurufen. Weitere Informationen finden Sie unter Arbeiten mit Verzeichnissen und Pfaden in FileTables.
Anschließend verwendet die Anwendung diesen logischen Pfad, um ein Handle für die Datei oder das Verzeichnis abzurufen und eine Aktion mit dem Objekt auszuführen. Der Pfad kann an jede unterstützte Dateisystem-API-Funktion übergeben werden, z. B. CreateFile() oder CreateDirectory(), um eine Datei zu erstellen oder zu öffnen und ein Handle abzurufen. Das Handle kann dann zum Streamen von Daten, zum Aufzählen oder Organisieren von Verzeichnissen, zum Abrufen oder Festlegen von Dateiattributen, zum Löschen von Dateien oder Verzeichnissen usw. verwendet werden.
Erstellen von Dateien und Verzeichnissen in einer FileTable
Eine Datei oder ein Verzeichnis kann in einer FileTable erstellt werden, indem Datei-E/A-APIs wie CreateFile oder CreateDirectory aufgerufen werden.
Alle Erstellungsdispositionskennzeichnungen, Freigabemodi und Zugriffsmodi werden unterstützt. Dies umfasst die Erstellung, Löschung und direkte Änderung von Dateien. Unterstützt werden auch Dateinamespace-Updates, d. h. Verzeichniserstellungs-/Löschvorgänge, Umbenennen und Verschieben.
Die Erstellung 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 spalte file_stream gespeichert; für Verzeichnisse ist diese Spalte NULL.
Bei Dateien enthält die spalte is_directory"false". Bei Verzeichnissen enthält diese Spalte "true".
Freigabe und Parallelität des Zugriffs werden erzwungen, wenn mehrere gleichzeitige Datei-E/A-Vorgänge oder Transact-SQL Vorgänge die gleiche Datei oder dasselbe Verzeichnis in der Hierarchie betreffen.
Lesen von Dateien und Verzeichnissen in einer FileTable
Die Read Committed-Isolationssemantik wird in SQL Server für alle Datei-E/A-Zugriffsvorgänge auf Datenstrom- und Attributdaten durchgesetzt.
Schreiben und Aktualisieren von Dateien und Verzeichnissen in einer FileTable
Alle Datei-E/A-Schreib- oder Aktualisierungsvorgänge in einer FileTable sind nicht transaktional. Das heißt, keine SQL Server-Transaktion ist an diese Vorgänge gebunden, und es werden keine ACID-Garantien bereitgestellt.
Alle Datei-E/A-Streaming- und In-Place-Updates werden für die FileTable unterstützt.
Aktualisierungen der FILESTREAM-Daten oder Attribute über Datei-E/A-APIs führen zu Aktualisierungen der entsprechenden file_stream - und Dateiattributespalten in der FileTable.
Löschen von Dateien und Verzeichnissen in einer FileTable
Die Windows-Datei-E/A-API-Semantiken werden angewendet, wenn Sie eine Datei oder ein Verzeichnis löschen.
Das Löschen eines Verzeichnisses schlägt fehl, wenn das Verzeichnis Dateien oder Unterverzeichnisse enthält.
Durch das Löschen einer Datei oder eines Verzeichnisses wird die entsprechende Zeile aus der FileTable entfernt. Dies entspricht dem Löschen der Zeile durch einen Transact-SQL Vorgang.
Unterstützte Dateisystemvorgänge
FileTables unterstützen die Dateisystem-APIs im Zusammenhang mit den folgenden Dateisystemvorgängen:
Verzeichnisverwaltung
Dateiverwaltung
FileTables unterstützen die folgenden Vorgänge nicht:
Datenträgerverwaltung
Volumenverwaltung
Transaktions-NTFS
Zusätzliche Überlegungen für Datei-E/A-Zugriff auf FileTables
Verwenden von Virtuellen Netzwerknamen (Virtual Network Names, VNNs) mit AlwaysOn-Verfügbarkeitsgruppen
Wenn die Datenbank, die FILESTREAM- oder FileTable-Daten enthält, zu einer AlwaysOn-Verfügbarkeitsgruppe gehört, sollten alle Zugriffe auf FILESTREAM- oder FileTable-Daten über die Dateisystem-APIs VNs anstelle von Computernamen verwenden. Weitere Informationen finden Sie unter FILESTREAM und FileTable mit AlwaysOn-Verfügbarkeitsgruppen (SQL Server).
Teilaktualisierungen
Ein schreibbares Handle für FILESTREAM-Daten in einer FileTable, das mit der Funktion GetFileNamespacePath (Transact-SQL) gewonnen wird, kann verwendet werden, um direkte, teilweise Aktualisierungen des FILESTREAM-Inhalts vorzunehmen. Dieses Verhalten unterscheidet sich vom transaktionalen FILESTREAM-Zugriff über ein Handle, das durch Aufrufen von OpenSQLFILESTREAM() und durch das Übergeben eines expliziten Transaktionskontexts abgerufen wird.
Transaktionssemantik
Wenn Sie mithilfe von Datei-E/A-APIs auf die Dateien in einer FileTable zugreifen, sind diese Vorgänge keine Benutzertransaktionen zugeordnet und weisen die folgenden zusätzlichen Merkmale auf:
Da der Nichttransaktionszugriff auf FILESTREAM-Daten in einer FileTable keiner Transaktion zugeordnet ist, gibt es keine spezifische Isolationsemantik. SQL Server kann jedoch interne Transaktionen verwenden, um die Sperr- oder Parallelitätsemantik für die FileTable-Daten zu erzwingen. Alle internen Transaktionen dieses Typs werden mit lesesicherer Isolation durchgeführt.
Es gibt keine ACID-Garantien für diese nicht durchgeführten Vorgänge in FILESTREAM-Daten. Die Konsistenzgarantien ähneln denen für Dateiaktualisierungen, die von Anwendungen im Dateisystem vorgenommen werden.
Diese Änderungen können nicht zurückgesetzt werden.
Auf die FILESTREAM-Spalte in einer FileTable kann jedoch auch über den transaktionsfähigen FILESTREAM-Zugriff zugegriffen werden, indem OpenSqlFileStream()" aufgerufen wird. Diese Art von Zugriff kann vollständig transaktional sein und berücksichtigt alle Transaktionsstufen konsistent, die derzeit unterstützt werden.
Gleichzeitigkeitssteuerung
SQL Server erzwingt die Parallelitätssteuerung für den FileTable-Zugriff zwischen Dateisystemanwendungen und zwischen Dateisystemanwendungen und Transact-SQL Anwendungen. Diese Parallelitätskontrolle wird durch die Anwendung geeigneter Sperren auf die FileTable-Zeilen erreicht.
Auslöser
Das Erstellen, Ändern oder Löschen von Dateien oder Verzeichnissen oder deren Attribute über das Dateisystem führt zu entsprechenden Einfüge-, Aktualisierungs- oder 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 | Es gibt Unterstützung für Oplocks der Ebene 2, Ebene 1, Batch und Filter. |
| Erweiterte Attribute | Nein | |
| Reparse-Punkte | Nein | |
| Persistent ACLs | Nein | |
| Benannte Datenströme | Nein | |
| Wenige Dateien | Ja | Die Geringe Größe 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 das FileTable-Feature sparse Dateien, indem die Anforderungen an das NTFS-Dateisystem weitergeleitet werden. |
| Komprimierung | Ja | |
| Verschlüsseln | Ja | |
| TxF | Nein | |
| Datei-IDs | Nein | |
| Objekt-IDs | Nein | |
| Symbolische Verknüpfungen | Nein | |
| Harte Links | Nein | |
| Kurznamen | Nein | |
| Verzeichnisänderungsbenachrichtigungen | Nein | |
| Bytebereich sperren | Ja | Anforderungen für die Bytebereichssperre werden an das NTFS-Dateisystem übergeben. |
| Zugeordnete Speicherdateien | Nein | |
| E/A abbrechen | Ja | |
| Sicherheit | Nein | Sicherheit auf Windows-Freigabeebene sowie auf SQL Server-Tabellen- und Spaltenebene werden durchgesetzt. |
| 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 nicht im NTFS USN-Journal protokolliert (mit Ausnahme von Änderungen der Größe). Sql Server-Funktionen zur Änderungsnachverfolgung können verwendet werden, um ähnliche Informationen zu erfassen. |
Siehe auch
Dateien in FileTables laden
Arbeiten mit Verzeichnissen und Pfaden in FileTables
Zugreifen auf FileTables mit Transact-SQL
FileTable DDL, Funktionen, gespeicherte Prozeduren und Ansichten