Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden
0800 1 255 255

Neuerungen in SQL Server 2008: FILESTREAM Storage

Große BLOBs (Videos, Word-Dokumente etc.) konnte man in MS SQL Server bis­her ent­we­der in der Datenbank (lang­sam) oder im Filesystem (unsi­cher, keine Transaktionen) able­gen. FILESTREAM Storage ver­eint die Vorteile von beiden.

Das Konzept von FILESTREAM inte­griert das SQL ServerDatenbankmodul in ein NTFS-Dateisystem: BLOB-Daten vom Typ varbinary(max) wer­den im Dateisystem gespei­chert. Dadurch greift nicht die für varbinary(max) defi­nierte Größenbeschränkung auf 2 GB, son­dern die Größe der Dateien ist ledig­lich durch den ver­füg­ba­ren Speicherplatz auf dem Laufwerk begrenzt. Ansonsten kön­nen FILESTREAM-Daten ganz nor­mal mit Transact-SQL-Anweisungen abge­fragt, ein­ge­fügt, geän­dert oder gelöscht wer­den – das alles natür­lich wie gehabt incl. Transaktionen und Datenbanksicherheit (mit­tels Berechtigungen auf Tabellen- oder Spaltenebene – nur das SQL Server Dienstkonto erhält Zugriff auf die Daten im Dateisystem). Desweiteren  kön­nen alle Verwaltungsfunktionen genutzt wer­den, z.B. zum Sichern und Wiederherstellen.

Und wie geht das? 

Zuerst muss FILESTREAM Storage akti­viert werden. 

Dies kann man ent­we­der bereits bei der Installation von SQL Server 2008 erle­digt haben:

Aktivieren von FILESTREAM bei SQL 2008 Installation

… oder man muss es nach­träg­lich im SQL Server Configuration Manager tun:

  • -> Start -> Programme -> SQL Server 2008 -> Konfigurationstools -> SQL Server Configuration Manager
  • zur gewünsch­ten SQL Server Instanz navi­gie­ren -> Eigenschaftsdialog öffnen
  • Registerkarte FILESTREAM-> Checkboxen "FILESTREAM für Transact-SQL-Zugriff akti­vie­ren" und "FILESTREAM für E/A‑Streamingzugriff auf Datei akti­vie­ren" akti­vie­ren und einen Freigabenamen für den Datei-Speicherort eingeben
  • Wenn Remote Clients auf die FILESTREAM-Daten zugrei­fen sol­len, dann auch die Checkbox "Streamingzugriff von Remoteclients auf FILESTREAM-Daten zulas­sen" aktivieren

Aktivieren von FILESTREAM im SQL Configuration Manager

  • Im SQL Management Studio muss zusätz­lich fol­gende Abfrage aus­ge­führt wer­den, um FILESTREAM für Transact-SQL und für den Win32-Streamingzugriff zu aktivieren:EXEC sp_configure filestream_access_level, 2
    RECONFIGURE

Dann kann eine FILESTREAM-aktivierte Datenbank erstellt werden:

CREATE DATABASE Test
ON
PRIMARY ( NAME = test1,
FILENAME = 'c:\data\testdat1.mdf'),
FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM( NAME = test3,
FILENAME = 'c:\data\filestream1')
LOG ON  ( NAME = testlog1,
FILENAME = 'c:\data\testlog1.ldf')
GO

Wenn FILESTREAM nach­träg­lich für eine bereits vor­han­dene Datenbank akti­viert wer­den soll, müs­sen fol­gende Abfragen aus­ge­führt werden:

ALTER DATABASE Test ADD
FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM;
GO

ALTER DATABASE Test ADD FILE (
NAME = FSGroup1File,
FILENAME = 'c:\data\filestream1')
TO FILEGROUP FileStreamGroup1;
GO

Achtung!
Das Verzeichnis "filestream1" darf noch nicht vor­han­den sein, es wird auto­ma­tisch ange­legt und ist erst ein­mal leer bis auf die Datei filestream.hdr und den Ordner $FSLOG.

Zu guter Letzt muss eine Tabelle zum Speichern von FILESTREAM-Daten erstellt werden:

CREATE TABLE Test.dbo.Documents (
DocumentID INT IDENTITY PRIMARY KEY,
Document VARBINARY (MAX) FILESTREAM NULL,
DocumentGuid UNIQUEIDENTIFIER NOT NULL ROWGUIDCOL UNIQUE)
FILESTREAM_ON FileStreamGroup1;
GO

Eine Spalte mit FILESTREAM-Daten ist eine varbinary(max)-Spalte mit FILESTREAM-Attribut. Eine ROWGUIDCOL-Spalte ist nur für die Verwendung von FILESTREAM-Daten mit Win32-APIs erforderlich.

Nun kön­nen nach Belieben mit Transact SQL Daten ein­ge­fügt, abge­fragt etc. werden:

INSERT INTO Test.dbo.Documents
VALUES (1, newid (), CAST ('Das ist ein Test' as varbinary(max)));
GO

UPDATE Test.dbo.Documents
SET Document = CAST ('Das ist noch ein Test' as varbinary(max)))
WHERE DocumentID = 1;
GO

DELETE Test.dbo.Documents WHERE DocumentID = 1;
GO

Anmerkung:
Das Ändern gro­ßer Datenmengen ist mit Transact SQL zwar mög­lich, aber nicht emp­feh­lens­wert. Zum Schreiben gro­ßer Datenmengen ver­wen­det man bes­ser die Win32-API (aber das ist eine andere Geschichte, die soll ein ander­mal erzählt werden…)

Zum Abschluss noch einige Überlegungen zum Einsatz von FILESTREAM:

  • FILESTREAM-Speicherung is sinn­voll bei Objekten, die im Schnitt grö­ßer als 1 MB sind.
  • FILESTREAM-Speicherung is sinn­voll, wenn schnel­ler Lesezugriff wich­ti­ger ist als schnel­ler Schreibzugriff.
  • FILESTREAM-Daten wer­den nicht ver­schlüs­selt (auch dann nicht, wenn die trans­pa­rente Datenverschlüsselung akti­viert ist).

Related Posts

Pin It on Pinterest