Dateitabellenkompatibilität mit anderen SQL Server-Features

Gilt für:SQL Server

Beschreibt, wie FileTables mit anderen Funktionen von SQL Server funktionieren.

AlwaysOn-Verfügbarkeitsgruppen und FileTables

Wenn die Datenbank, die FILESTREAM- oder FileTable-Daten enthält, zu einer Always On-Verfügbarkeitsgruppe gehört:

  • Die FileTable-Funktionalität wird teilweise von AlwaysOn-Verfügbarkeitsgruppen unterstützt. Nach einem Failover kann auf FileTable-Daten im primären Replikat zugegriffen werden, aber auf FileTable-Daten kann nicht auf lesbare sekundäre Replikate zugegriffen werden.

    Hinweis

    Nachdem ein Failover alle FILESTREAM-Funktionen unterstützt wurde. Sowohl auf lesbaren sekundären Replikaten als auch auf dem neuen primären Replikat kann auf FILESTREAM-Daten zugegriffen werden.

  • Die FILESTREAM-Funktion und die FileTable-Funktion akzeptieren oder geben virtuelle Netzwerknamen (VNNs) statt Computernamen zurück. Weitere Informationen zu diesen Funktionen finden Sie unter FILESTREAM- und FileTable-Funktionen (Transact-SQL).

  • Bei allen Zugriffen auf FILESTREAM- oder FileTable-Daten über Dateisystem-APIs sollten VNNs statt der Computernamen verwendet werden. Weitere Informationen finden Sie unter Verwenden von FILESTREAM und FileTable mit AlwaysOn-Verfügbarkeitsgruppen.

Partition und FileTables

Die Partitionierung wird in FileTables nicht unterstützt. Mit der Unterstützung für mehrere FILESTREAM-Dateigruppen können in den meisten Szenarien reine Skalierungsprobleme behandelt werden, ohne dass hierfür auf die Partitionierung zurückgegriffen werden muss (im Gegensatz zu SQL 2008-FILESTREAMs).

Replikation und FileTables

Replikation und zugehörige Features (einschließlich Transaktionsreplikation, Zusammenführungsreplikation, Datenerfassung und Änderungsnachverfolgung) werden mit FileTables nicht unterstützt.

Transaktionssemantik und FileTables

Windows-Anwendungen

Windows-Anwendungen verstehen keine Datenbanktransaktionen, sodass Windows-Schreibvorgänge die ACID-Eigenschaften einer Datenbanktransaktion nicht bereitstellen. Daher sind Transaktionsrollbacks und -wiederherstellungen mit Windows Update-Vorgängen nicht möglich.

Transact-SQL-Anwendungen

Bei Transact-SQL-Anwendungen, die an der SPALTE FILESTREAM (file_stream) in einer FileTable arbeiten, sind die Isolationsemantik mit dem FILESTREAM-Datentyp in einer regulären Benutzertabelle identisch.

Abfragebenachrichtigungen und FileTables

Die Abfrage kann keinen Verweis auf die FILESTREAM-Spalte in der FileTable, in der WHERE-Klausel oder in einem anderen Teil der Abfrage enthalten.

SELECT INTO und FileTables

SELECT INTO-Anweisungen aus einer FileTable verteilen die FileTable-Semantik nicht in der erstellten Zieltabelle (genau wie FILESTREAM-Spalten in einer regulären Tabelle). Alle Zieltabellenspalten verhalten sich wie normale Spalten. Sie haben keine FileTable-Semantik zugeordnet.

Trigger und FileTables

DDL (Data Definition Language) Trigger

Es gibt keine besonderen Überlegungen für DDL-Trigger mit FileTables. Normale DDL-Trigger werden für Create/Alter-Datenbankvorgänge sowie CREATE/ALTER TABLE-Vorgänge für FileTables ausgelöst. Trigger können durch Aufrufen der EVENTDATA()-Funktion die tatsächlichen Ereignisdaten abrufen, einschließlich des DDL-Befehlstexts und sonstiger Informationen. Es gibt keine neuen Ereignisse oder Änderungen an dem vorhandenen Eventdata-Schema.

DML -Trigger (Datenmanipulationssprache)

Diese Einschränkungen werden während des DDL-Vorgangs erzwungen, um Trigger zu erstellen.

  • FileTables unterstützen NICHT ANSTELLE VON Triggern für DML-Vorgänge. Dies ist eine bestehende Einschränkung für alle Tabellen, die FILESTREAM-Spalten enthalten.

  • FileTables unterstützt AFTER-Trigger für DML-Vorgänge.

  • Für eine FileTable definierte Trigger können keine FileTables aktualisieren (einschließlich der übergeordneten FileTable). Diese Einschränkung verhindert hauptsächlich, dass ein Trigger in einen Sperrkonflikt mit den vom Dateisystem verhängten Sperren in derselben Transaktion gerät.

Nicht transaktionaler Zugriff und Auswirkungen auf Trigger

  • Wenn der nicht transaktionale Updatezugriff in einer Datenbank zulässig ist, können direkte Updates der FILESTREAM-Daten in beliebigen Tabellen ausgeführt werden, u. a. auch für FileTable in dieser Datenbank. Aufgrund dieser Möglichkeit ist das BEFORE-Image des FILESTREAM-Inhalts für den Trigger möglicherweise nicht verfügbar.

  • Bei Nichttransaktionsaktualisierungsvorgängen über das Dateisystem erstellt SQL Server eine interne Transaktion, um den CloseHandle-Vorgang zu erfassen, und alle definierten DML-Trigger können als Teil dieser Transaktion ausgelöst werden. Ein Rollback einer solchen Transaktion innerhalb des Triggertexts, während sie nicht verhindert wird, führt kein Rollback der Änderungen durch, die am FILESTREAM vorgenommen wurden. Ein solcher Rollback kann ebenfalls verhindern, dass die UPDATE-Trigger ausgelöst werden, selbst wenn der FILESTREAM-Inhalt geändert wurde.

  • Zusätzlich zu diesen Auswirkungen gelten für Trigger in FileTables zwei zusätzliche Verhalten:

    • Bei Nichttransaktionsaktualisierungsvorgängen auf FileTable über das Dateisystem ist es möglich, dass der FILESTREAM-Inhalt von anderen Win32-Vorgängen exklusiv gesperrt werden kann und möglicherweise nicht für Lese-/Schreibzugriff über den Triggertext zugänglich ist. In solchen Fällen kann durch den versuchten Zugriff auf den FILESTREAM-Inhalt im Triggertext ein Freigabeverletzungsfehler ausgegeben werden. Trigger müssen so konzipiert werden, dass solche Fehler entsprechend behandelt werden.

    • After image of the FILESTREAM may not be stable, da es in einigen Fällen aktiv von anderen nicht transaktionalen Updates gleichzeitig geschrieben wird (aufgrund der im Dateisystemzugriff zulässigen Freigabemodi).

  • Abnorme Beendigung von Win32-Handles, z. B. das explizite Töten von Win32-Handles durch einen Administrator ODER einen Datenbankabsturz, führen Sie während der Wiederherstellungsvorgänge keine Benutzertrigger aus, obwohl der FILESTREAM-Inhalt möglicherweise von der ungewöhnlich beendeten Win32-Anwendung geändert wurde.

Sichten und FileTables

Ansichten

Eine Sicht kann in einer FileTable genau wie in einer anderen Tabelle erstellt werden. Die folgenden Überlegungen gelten jedoch für eine in einer FileTable erstellten Sicht:

  • Ansichten können keine FileTable-Semantik aufweisen. Das heißt, die Spalten in der Ansicht (einschließlich Dateiattributespalten) verhalten sich genauso wie normale Ansichtsspalten ohne spezielle Semantik und dasselbe gilt für Zeilen, die Dateien/Verzeichnisse darstellen.

  • Ansichten können basierend auf der Semantik der "aktualisierbaren Ansicht" aktualisiert werden, aber die zugrunde liegenden Tabelleneinschränkungen können die Aktualisierungen wie in der Tabelle ablehnen.

  • Der Dateipfad für eine Datei kann in der Ansicht visualisiert werden, indem er sie als explizite Spalte in der Ansicht hinzufügt. Beispiel:

    CREATE VIEW MP3FILES AS SELECT column1, column2, ..., GetFileNamespacePath() AS PATH, column3,... FROM Documents

Indizierte Sichten

Derzeit indizierte Ansichten können keine FILESTREAM-Spalten oder berechnete/persistente berechnete Spalten enthalten, die von den FILESTREAM-Spalten abhängen. Dieses Verhalten bleibt auch bei in der FileTable definierten Sichten unverändert.

Momentaufnahmeisolation und FileTables

Read Committed Snapshot Isolation (RCSI) und Snapshot Isolation (SI) verlassen sich auf die Möglichkeit, eine Momentaufnahme der Daten für Leser verfügbar zu haben, auch wenn Aktualisierungsvorgänge für die Daten ausgeführt werden. FileTables lassen jedoch nicht transaktionalen Schreibzugriff auf Filestream-Daten zu. Daher gelten die folgenden Einschränkungen für diese Features in Datenbanken, die FileTables enthalten:

  • Eine Datenbank, die FileTables enthält, kann so geändert werden, dass RCSI/SI aktiviert wird.

  • Wenn der nicht transaktionale Zugriff für die Datenbank auf FULL festgelegt wird, wird eine Transaktion unter RCSI ausgeführt, oder SI weist das folgende Verhalten auf:

    • Alle Transact-SQL-Lesevorgänge der FileTable file_stream Spalte schlagen fehl. Insert and UPDATE to the column still succeed, as they don't read from the file_stream column.

    • Wenn die Transact-SQL-Anweisung Hinweise auf READCOMMITTEDLOCK-Tabellen angibt, wird der Lesevorgang erfolgreich ausgeführt, und es werden Sperren für die Zeilen verwendet, anstatt Zeilenversionsverwaltung zu verwenden.

    • Transaktive Win32 FileStream-Öffnungsanforderungen sind ebenfalls fehlerhaft.

    • Nicht transaktiver FileTable-Win32-Zugriff ist erfolgreich. Alle internen Abfragen, die von FileTable ausgeführt werden, sind nicht betroffen.

    • Die Volltextindizierung ist immer erfolgreich, unabhängig von den Datenbankoptionen (READ_COMMITTED_SNAPSHOT oder ALLOW_SNAPSHOT_ISOLATION).

Lesbare sekundäre Datenbanken

Die gleichen Überlegungen gelten sowohl für lesbare sekundäre Datenbank als auch für Momentaufnahmen. Selbiges ist im vorherigen Abschnitt Momentaufnahmeisolation und FileTablesbeschrieben.

Enthaltene Datenbanken und FileTables

Die FILESTREAM-Funktion, von der die FileTable-Funktion abhängt, erfordert einen gewissen Konfigurationsaufwand außerhalb der Datenbank. Daher ist eine Datenbank, die FILESTREAM oder FileTable verwendet, nicht vollständig enthalten.

Sie können den Einschlusstyp der Datenbank auf PARTIAL festlegen, wenn Sie bestimmte Funktionen eigenständiger Datenbanken verwenden möchten, z. B. eigenständige Benutzer. In diesem Fall sind jedoch einige Datenbankeinstellungen nicht in der Datenbank enthalten und werden nicht automatisch verschoben, wenn die Datenbank verschoben wird.