Verwalten von FileTables

Gilt für:SQL Server

Beschreibt allgemeine administrative Tasks zum Verwalten von FileTables.

Vorgehensweise: Abrufen einer Liste von FileTables und verbundenen Objekten

Um eine Liste von FileTables abzurufen, fragen Sie eine der folgenden Katalogsichten ab:

SELECT * FROM sys.filetables;  
GO  
  
SELECT * FROM sys.tables WHERE is_filetable = 1;  
GO  

Um eine Liste der systemdefinierten Objekte abzurufen, die bei der Erstellung der zugeordneten Dateitabelle erstellt wurden, fragen Sie die Katalogsicht sys.filetable_system_defined_objects (Transact-SQL) ab.

SELECT object_id, OBJECT_NAME(object_id) AS 'Object Name'  
FROM sys.filetable_system_defined_objects;  
GO  

Deaktivieren und erneutes Aktivieren von nicht transaktionalem Zugriff auf Datenbankebene

Um den exklusiven Zugriff zu erhalten, der für bestimmte administrative Tasks erforderlich ist, müssen Sie möglicherweise nicht transaktionalen Zugriff vorübergehend deaktivieren.

Verhalten der ALTER DATABASE Anweisung beim Ändern der Stufe des nicht-transaktionalen Zugriffs

  • Wenn Sie den Nichttransaktionszugriff auf READ_ONLY oder AUS festlegen, gibt der ALTER DATABASE Befehl keine Kontrolle an den Benutzer zurück, solange geöffnete Dateihandles vorhanden sind, die mit dem angeforderten Vorgang in Konflikt stehen. Zu den Dateihandles, die mit diesem Vorgang in Konflikt stehen, gehören die folgenden:

    • Wenn Sie den Zugriff für alle offenen Dateihandles auf NONE festlegen.

    • Wenn Sie den Zugriff auf READ_ONLY festlegen, werden alle Dateihandles berücksichtigt, die für den Schreibzugriff geöffnet sind.

    Informationen zum Beenden offener Dateihandles finden Sie unter Beenden offener Dateihandles, die einer FileTable zugeordnet sind in diesem Thema.

    Wenn der ALTER DATABASE Befehl abgebrochen oder mit einem Timeout endet, wird die Ebene des Transaktionszugriffs nicht geändert.

  • Wenn Sie die ALTER DATABASE Anweisung mit einer WITH-Beendigungsklausel <> aufrufen (ROLLBACK AFTER integer [ SECONDS ] | ROLLBACK DIREKT | NO_WAIT) werden alle geöffneten Nichttransaktionsdateihandles getötet.

Warnung

Durch das Abbrechen geöffneter Dateihandles verlieren Benutzer möglicherweise nicht gespeicherte Daten. Dieses Verhalten ist mit dem Verhalten des Dateisystems selbst konsistent.

Auswirkungen des Deaktivierens von nicht transaktionalem Zugriff

Das Ändern der Ebene von nicht transaktionalem Zugriff auf Datenbankebene hat die folgenden Auswirkungen auf die FileTable-Verzeichnisse unter dem Verzeichnis auf Datenbankebene:

  • Wenn der Zugriff auf NONEfestgelegt ist, kann auf alle FileTable-Verzeichnisse und ihre Inhalte nicht mehr zugegriffen werden. Zudem sind sie nicht mehr sichtbar.

  • Wenn der Zugriff auf READ_ONLYfestgelegt ist, sind alle FileTable-Verzeichnisse und ihre Inhalte ebenfalls schreibgeschützt.

Das Deaktivieren von FILESTREAM auf Instanzebene hat die folgenden Auswirkungen auf Verzeichnisse auf Datenbankebene in dieser Instanz und die FileTable-Verzeichnisse darunter:

  • Keines der Verzeichnisse auf Datenbankebene auf der Instanz ist sichtbar, wenn FILESTREAM auf Instanzebene deaktiviert ist.

Vorgehensweise: Deaktivieren und erneutes Aktivieren von nicht transaktionalem Zugriff auf Datenbankebene

Weitere Informationen finden Sie unter ALTER DATABASE SET "Optionen(Transact-SQL)".

So deaktivieren Sie vollständigen nicht transaktionalen Zugriff
Verwenden Sie die ALTER DATABASE-Anweisung und setzen Sie den Wert von NON_TRANSACTED_ACCESS mit SET auf READ_ONLY oder OFF.

-- Disable write access.  
ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = READ_ONLY );  
GO  
  
-- Disable non-transactional access.  
ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = OFF );  
GO  

So aktivieren Sie vollständigen nicht transaktionalen Zugriff erneut
Führen Sie die ALTER DATABASE-Anweisung aus und setzen Sie den Wert von NON_TRANSACTED_ACCESS mit SET auf FULL.

ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL );  
GO  

Vorgehensweise: Sicherstellen der Sichtbarkeit der FileTables in einer Datenbank

Ein Verzeichnis auf Datenbankebene und die FileTable-Verzeichnisse darunter sind sichtbar, wenn alle folgenden Bedingungen zutreffen:

  1. FILESTREAM ist auf Instanzebene aktiviert.

  2. Nicht transaktionaler Zugriff ist auf Datenbankebene aktiviert.

  3. Ein gültiges Verzeichnis wurde auf Datenbankebene angegeben.

Deaktivieren und erneutes Aktivieren des FileTable-Namespaces auf Tabellenebene

Durch Deaktivieren des FileTable-Namespaces werden alle systemdefinierten Einschränkungen und Trigger deaktiviert, die mit der FileTable erstellt wurden. Dies ist in Fällen nützlich, in denen eine FileTable in großem Umfang mithilfe von Transact-SQL-Operationen neu organisiert werden muss, ohne den Aufwand für die Durchsetzung der FileTable-Semantik zu verursachen. Durch diese Vorgänge kann die FileTable jedoch in einem inkonsistenten Status belassen werden, und das erneute Aktivieren des FileTable-Namespaces kann verhindert werden.

Das Deaktivieren eines FileTable-Namespaces führt zu folgenden Ergebnissen:

  • FileTable-Spalten und -Daten werden nicht physisch aus der Tabelle gelöscht.

  • Das FileTable-Verzeichnis und die enthaltenen Dateien und Verzeichnisse verschwinden aus dem Dateisystem und sind für Datei-E/A-Zugriff nicht verfügbar.

  • Systemdefinierte FileTable-Spalten können nicht gelöscht und neu erstellt werden, sie verhalten sich jedoch bei DML-Vorgängen wie normale Spalten.

  • Offene Dateihandles verhindern, dass die FileTable-Einschränkungen deaktiviert werden, da für diesen Vorgang eine Schemasperre für die Tabelle erforderlich ist.

  • Die Erzwingung der gesamten FileTable-Semantik, einschließlich systemdefinierter Einschränkungen und Trigger, wird nach dem Deaktivieren des FileTable-Namespaces beendet.

Das erneute Aktivieren eines FileTable-Namespaces führt zu folgenden Ergebnissen:

  • Die FileTable wird auf Konsistenz überprüft. Werden Inkonsistenzen festgestellt, wird ein Fehler ausgelöst, und die FileTable bleibt deaktiviert. Andernfalls wird die FileTable erneut aktiviert.

  • Die Erzwingung der FileTable-Semantik, einschließlich systemdefinierter Einschränkungen und Trigger, wird wiederhergestellt.

  • Das FileTable-Verzeichnis und die Dateien und Verzeichnisse, die es enthält, werden im Dateisystem sichtbar und stehen für Datei-E/A-Zugriffe zur Verfügung.

Vorgehensweise: Deaktivieren und erneutes Aktivieren des FileTable-Namespaces auf Tabellenebene

Rufen Sie die ALTER TABLEAnweisung mit der Option { ENABLE | DISABLE } FILETABLE_NAMESPACE auf.

So deaktivieren Sie den FileTable-Namespace

ALTER TABLE filetable_name  
DISABLE FILETABLE_NAMESPACE;  
GO  

So aktivieren Sie den FileTable-Namespace erneut

ALTER TABLE filetable_name  
ENABLE FILETABLE_NAMESPACE;  
GO  

Beenden offener Dateihandles, die einer FileTable zugeordnet sind

Durch das Öffnen von Handles für Dateien, die in einer FileTable gespeichert sind, kann der exklusive Zugriff verhindert werden, der für bestimmte administrative Tasks erforderlich ist. Um dringende Aufgaben zu ermöglichen, müssen Sie möglicherweise offene Dateihandles schließen, die einer oder mehreren FileTables zugeordnet sind.

Warnung

Durch das Abbrechen geöffneter Dateihandles verlieren Benutzer möglicherweise nicht gespeicherte Daten. Dieses Verhalten ist mit dem Verhalten des Dateisystems selbst konsistent.

Vorgehensweise: Abrufen einer Liste der einer FileTable zugeordneten offenen Dateihandles

Rufen Sie die Katalogsicht sys.dm_filestream_non_transacted_handles (Transact-SQL) auf.

SELECT * FROM sys.dm_filestream_non_transacted_handles;  
GO  

Vorgehensweise: Schließen offener Dateihandles, die einer FileTable zugeordnet sind

Rufen Sie die gespeicherte Prozedur sp_kill_filestream_non_transacted_handles (Transact-SQL) mit den entsprechenden Argumenten auf, um alle offenen Dateihandles in der Datenbank oder Dateitabelle oder ein bestimmtes Handle abzubrechen.

USE database_name;  
  
-- Kill all open handles in all the filetables in the database.  
EXEC sp_kill_filestream_non_transacted_handles;  
GO  
  
-- Kill all open handles in a single filetable.  
EXEC sp_kill_filestream_non_transacted_handles @table_name = 'filetable_name';  
GO  
  
-- Kill a single handle.  
EXEC sp_kill_filestream_non_transacted_handles @handle_id = integer_handle_id;  
GO  

Vorgehensweise: Die von FileTables gehaltenen Sperren identifizieren

Die meisten von FileTables gesetzten Sperren beziehen sich auf Dateien, die von Anwendungen geöffnet werden.

So identifizieren Sie geöffnete Dateien und die zugeordneten Sperren
Verknüpfen Sie das request_owner_id-Feld in der dynamischen Verwaltungssicht sys.dm_tran_locks (Transact-SQL) mit dem fcb_id-Feld in sys.dm_filestream_non_transacted_handles (Transact-SQL). In einigen Fällen ist die Sperre nicht einem einzelnen geöffneten Dateihandle zugeordnet.

SELECT opened_file_name  
FROM sys.dm_filestream_non_transacted_handles  
WHERE fcb_id IN  
    ( SELECT request_owner_id FROM sys.dm_tran_locks );  
GO  

FileTable-Sicherheit

Die in FileTables gespeicherten Dateien und Verzeichnisse werden ausschließlich durch die SQL Server-Sicherheit geschützt. Tabellen- und spaltenbasierte Sicherheit wird sowohl für den Zugriff auf das Dateisystem, als auch für den Zugriff auf Transact-SQL erzwungen. Windows-Dateisystemsicherheits-APIs und ACL-Einstellungen werden nicht unterstützt.

Die für FILESTREAM-Dateigruppen und -Container geltenden Sicherheits- und Zugriffsberechtigungen gelten auch für FileTables, da die Dateidaten als FILESTREAM-Spalte in der FileTable gespeichert werden.

FileTable-Sicherheit und Transact-SQL-Zugriff
Der Transact-SQL-Zugriff auf Daten in Dateitabellen ist genauso gesichert wie bei jeder anderen Tabelle. Entsprechende Sicherheitsüberprüfungen auf Tabellen- und Spaltenebene werden für alle Vorgänge ausgeführt, die auf die Daten zugreifen oder sie ändern.

FileTable-Sicherheit und Dateisystemzugriff
Dateisystem-APIs erfordern entsprechende SQL Server-Berechtigungen für die gesamte Zeile in der Dateitabelle (d.h. Berechtigungen auf Tabellenebene), um ein Handle auf eine in der Dateitabelle gespeicherte Datei oder ein Verzeichnis zu öffnen. Wenn der Benutzer nicht über die entsprechende SQL Server-Berechtigung für eine Spalte in der Dateitabelle verfügt, wird der Zugriff des Dateisystems verweigert.

Sicherung und FileTables

Wenn Sie SQL Server zum Sichern einer Dateitabelle verwenden, werden die FILESTREAM-Daten zusammen mit den strukturierten Daten in der Datenbank gesichert. Wenn Sie die FILESTREAM-Daten nicht zusammen mit relationalen Daten sichern möchten, können Sie eine Teilsicherung durchführen, um die FILESTREAM-Dateigruppen auszuschließen.

Transaktionskonsistenz von FileTable-Sicherungen

Viele Verwaltungsprogramme und Vorgänge (einschließlich Sicherung, Protokollsicherung und Transaktionsreplikation) lesen transaktional konsistente Daten, indem sie die Transaktionsprotokolle lesen. Derzeit werden als Teil einer Transaktion alle aktualisierten FILESTREAM-Daten gelesen. Wenn nicht transaktionaler Zugriff nicht auf Datenbankebene aktiviert ist, arbeiten diese Programme und Vorgänge mit vollständiger Transaktionskonsistenz.

Wenn jedoch vollständiger nicht transaktionaler Zugriff aktiviert ist, könnte eine FileTable Daten enthalten, die später aktualisiert wurden (über ein nicht transaktionales Update) als die Transaktion, die das Programm oder der Prozess aus dem Transaktionsprotokoll liest. Das heißt, dass eine Wiederherstellung einer bestimmten Transaktion zu einem bestimmten Zeitpunkt FILESTREAM-Daten enthalten kann, die aktueller als die betreffende Transaktion sind. Dies ist das erwartete Verhalten, wenn nicht transaktionale Updates in FileTables zulässig sind.

SQL Server Profiler und FileTables

SQL Server Profiler kann Vorgänge zum Öffnen und Schließen von Dateien in Windows in der Ablaufverfolgungs-Ausgabe für in einer Dateitabelle gespeicherte Dateien aufzeichnen.

Überprüfung und FileTables

Eine FileTable kann genau wie jede andere Tabelle überwacht werden. Win32-Zugriffsmuster sind jedoch keine satzbasierten Vorgänge. Eine einzelne Aktion im Dateisystem wird in mehrere Transact-SQL-DML-Vorgänge umgesetzt. Das Öffnen einer Datei in Microsoft Word wird beispielsweise in mehrere open/close/create/rename/delete-Vorgänge und entsprechende Transact-SQL-DML-Aktivitäten umgesetzt. Dies führt zu umfangreichen Auditdatensätzen, bei denen die Korrelation zwischen Dateisystemaktionen und den entsprechenden Transact-SQL-DML-Überwachungsdatensätzen erschwert ist.

DBCC und FileTables

Sie können die Einschränkungen für eine FileTable, einschließlich systemdefinierter Einschränkungen, mithilfe von DBCC CHECKCONSTRAINTS überprüfen.

Siehe auch

FileTable-Kompatibilität mit anderen SQL Server-Features
FileTable DDL, Funktionen, gespeicherte Prozeduren und Ansichten