Haben Sie jemals daran gedacht, dass Ihr SQL Server als Dateiserver arbeiten kann? Die Chancen stehen gut, dass Sie es nicht getan haben – ich auch nicht, bis ich eine FileTable-Funktion ausprobiert habe, die erstmals in SQL Server 2012 eingeführt wurde. Die FileTable-Funktion ist der nächste Schritt in der FILESTREAM-Technologie, mit der Sie Dateien und Ordner in den speziellen Tabellen speichern, aber mit dem herkömmlichen Windows SMB-Protokoll darauf zugreifen können. Mit anderen Worten, mit FileTables können wir SQL-Tabellen für den nicht transaktionalen Zugriff verwenden.
Meiner Meinung nach ist einer der größten Vorteile der FileTables-Funktion das Speichern von Dateiattributen (wie Last-WriteTime, Last_AccessTime usw.), mit dem Administratoren Dateizugriffsoperationen anhand der entsprechenden Spalten in den Dateitabellen überwachen können. In diesem Artikel möchte ich Ihnen zeigen, wie SQL Server 2012-2016 für die Dateispeicherung verwendet werden kann und welche Überwachungsmechanismen für Dateien und Ordner in den SQL-Dateifreigaben genutzt werden können. Einige Voraussetzungen müssen erfüllt sein, bevor Dateitabellen in einer Datenbank erstellt werden können, und wir werden alle erforderlichen Schritte zur Vorbereitung von Dateitabellen durchgehen, dann mehrere Tabellen erstellen und sehen, wie wir mit ihnen arbeiten können.
Beginnen wir mit dem Aktivieren des FILESTREAMS für die SQL 2012-Instanz und dem Erstellen einer neuen FILESTREAM-Datenbank:
https://msdn.microsoft.com/en-us/library/gg509097%28v=sql.120%29.aspx
Ich aktiviere FILESTREAM auf Windows-Ebene
- Öffnen Sie SQL Configuration Manager:
olgende Kontrollkästchen sind aktiviert:
II Aktivieren Sie FILESTREAM auf SQL-Instanzebene:
- Klicken Sie in SQL Server Management Studio auf Neue Abfrage, um den Abfrage-Editor anzuzeigen.
- Geben Sie im Abfrage-Editor den folgenden Transact-SQL-Code ein:
EXEC sp_configure filestream_access_level, 2
RECONFIGURE
III Stellen Sie eine FILESTREAM-Dateigruppe auf Datenbankebene bereit
Bevor wir Dateitabellen in einer Datenbank erstellen können, muss die Datenbank über eine FILESTREAM-Dateigruppe verfügen. Weitere Informationen zu dieser Voraussetzung finden Sie unter Erstellen einer FILESTREAM-fähigen Datenbank.
Da ich eine neue Datenbank erstellen werde, erstelle ich zuerst einen Ordner mit FileTables:
und definiere dann eine Filestream-Dateigruppe in diesem Code:
DATENBANKDATEISERVER ERSTELLEN
AUF
PRIMÄR (NAME = FS,
DATEINAME = ‚c:\FILESERVER\FSdat.mdf‘),
FILEGROUP FileStreamFS ENTHÄLT FILESTREAM(NAME = FSgr,
FILENAME = ‚c:\FILESERVER\fs1 ‚)
ANMELDEN (NAME = FSlog, DATEINAME = ‚c:\ FILESERVER \FSlog.ldf‘)
LOS
Achtung! Wie MS sagt: „Bei einer FILESTREAM-Dateigruppe bezieht sich FILENAME auf einen Pfad. Der Pfad zum letzten Ordner muss vorhanden sein, und der letzte Ordner darf nicht vorhanden sein.“ Im vorhergehenden Code, c:\FILESERVER muss vorhanden sein, aber fs1 darf zum Zeitpunkt der Ausführung der CREATE DATABASE-Anweisung NICHT vorhanden sein.
Auf der Eigenschaftenseite der Filegroups-Datenbank wird jetzt der FileStreamFS-Dateistream für die FILESERVER-Datenbank angezeigt:
IV Nicht-transaktionalen Zugriff auf Datenbankebene aktivieren
Sobald wir die Datenbank erstellt haben, besteht der letzte Schritt bei der Vorbereitung auf FileTables darin, den nicht-transaktionalen Zugriff auf Datenbankebene zu aktivieren.
Mit FileTables können Windows-Anwendungen ein Windows-Dateihandle für FILESTREAM-Daten abrufen, ohne dass eine Transaktion erforderlich ist. Um diesen nicht-transaktionalen Zugriff auf in SQL Server gespeicherte Dateien zuzulassen, müssen Sie die gewünschte Ebene des nicht-transaktionalen Zugriffs auf Datenbankebene für jede Datenbank angeben, die FileTables enthält. Wenn wir den folgenden Code ausführen –
SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
VON sys.database_filestream_options;
GO
…wir werden sehen, dass keine Datenbanken den nicht-transaktionalen Zugriff aktiviert haben:
Um den nicht-transaktionalen Zugriff auf Dateien auf Datenbankebene (in diesem Fall für die FILESERVER–Datenbank) zu ermöglichen, muss eine weitere Option angegeben werden – ein Verzeichnis für FileTables: Es ist das Verzeichnis, das ich zu Beginn des artikel – C:\FILESERVER, aber der Verzeichnisname sollte ohne den Laufwerksbuchstaben und das Symbol „\“ eingegeben werden:
ALTER DATABASE FILESERVER
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N’FILESERVER‘ )
GO
„In der FileTable-Ordnerhierarchie wird dieses Verzeichnis auf Datenbankebene zum untergeordneten der Freigabename, der für FILESTREAM auf Instanzebene angegeben wurde, und das übergeordnete Element der in der Datenbank erstellten Dateitabellen “ – dies bedeutet, dass FILESERVER der Unterordner der MSSQLSERVER-Freigabe ist, da ich ihn in Schritt I nicht geändert habe-2. Weitere Informationen finden Sie unter Arbeiten mit Verzeichnissen und Pfaden in Dateitabellen
Wenn Sie diesen Code erneut ausführen, wird angezeigt, dass der nicht-transaktionale Zugriff erfolgreich aktiviert wurde:
SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
FROM sys.database_filestream_options;
GO
Der folgende Code zeigt den Verzeichnisnamen für den DATEISERVER databse an:
Select DB_NAME ( database_id), directory_name
FROM sys.database_filestream_options;
GO
Hier ist die „SQL“ -Dateifreigabe, die Benutzer jetzt zum Speichern ihrer Dateien und Ordner verwenden können:
Wenn ich die Standarddatei umbenannt hätte MSSQLSERVER–Freigabe in etwas wie SHARE1 In Schritt I-2 hätte es keinen Hinweis auf einen beteiligten SQL-Server gegeben – aus Sicht des Benutzers wäre es nur eine normale Dateifreigabe.
Alle Voraussetzungen für die Erstellung von FileTables sind jetzt erfüllt und wir können mit der Erstellung von FileTables fortfahren.
Arbeiten mit SQL Server-Dateitabellen – Teil 2