Wednesday, 5. may 2010 3 05 /05 /Mai /2010 19:53

SQL FileStream zum effektiven Speichern von BLOBs = Binary Large Objects ist im Microsoft SQL Server ab Version 2008 neu hinzugekommen. Es kombinierte die Vorteile der Ablage im SQL Server als VarBinary Daten mit der Möglichkeit der transaktionellen Verarbeitung und der Ablage im File-System mit der performanten Zugriffsmöglichkeit über Windows Streaming / API Zugriff.

 

Es gibt ein wirklich sehr gutes und umfangreiches Whitepaper „FILESTREAM Storage in SQL Server 2008“ im MSDN Bereich von Paul S. Randall, das alle Aspekte rund um FileStream beleuchtet. Was soll ich dem hinzufügen?

 

Ich habe nun auch mal etwas experimentiert und ein paar erste Erfahrungen gesammelt:

·         Mein erster Test war unter Windows XP mit MS SQL Server 2008 Express Edition ohne SP, der unter dem Account „NetworkServices“ lief. Die Anlage der Dateigruppe für FileStream schlug mit einer nicht gerade aussagekräftigen Fehlermeldung fehl wie
Unable to open the physical file "c:\Program Files\Microsoft SQL Server\...". Operating system error -2147024891: "0x80070005(Access is denied.)"
 Eine kurze Recherche ergab, dass der Dienst unter einem Windows Account laufen muss, damit es funktioniert. Einen entsprechenden Eintrag gibt es bereits bei MS Connect. Mit meiner Developer Edition unter Windows Vista mit Dienstkonto „Local System“ hingegen funktionierte es ohne Änderungen.

·         Änderungen an FileStream Daten, also UPDATE und DELETE, werden nicht direkt im Transaktionsprotokoll protokolliert, sondern in Form von revisionierten Dateien. Diese verbleiben im Dateisystem bis zur nächsten Voll- bzw. Log-Sicherung; das muss man bei der Planung des Speicherplatzes beachten.

 

USE [master]
GO
EXEC sp_configure filestream_access_level, 2;
GO
RECONFIGURE;
GO
 
ALTER database AdventureWorks
ADD FILEGROUP [FileStreamFG]
CONTAINS FILESTREAM
GO
 
ALTER database AdventureWorks
ADD FILE
(
    NAME= 'FileStream',
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL10DEV\FG'
)
TO FILEGROUP [FileStreamFG]
GO
 
USE [AdventureWorks]
GO
 
CREATE TABLE dbo.FileStreamStorage
      (
      [Id] int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
      [Guid] uniqueidentifier NOT NULL UNIQUE ROWGUIDCOL DEFAULT NEWID(),
      [FileName] varchar(255) NOT NULL,
      [FileStreamData] varbinary(MAX) FILESTREAM NULL 
      )  ON [PRIMARY]
      FILESTREAM_ON [FileStreamFG]
GO
 
INSERT INTO dbo.FileStreamStorage ([FileName], [FileStreamData])
VALUES ('Test1.txt', CONVERT(varbinary(max), N'Hello World'));
 
INSERT INTO dbo.FileStreamStorage ([FileName], [FileStreamData])
VALUES ('Test2.txt', CONVERT(varbinary(max), N'Hello World again'));
 
INSERT INTO dbo.FileStreamStorage ([FileName], [FileStreamData])
VALUES ('Test3.txt', CONVERT(varbinary(max), N'Hello World again'));
 
INSERT INTO dbo.FileStreamStorage ([FileName], [FileStreamData])
VALUES ('Test4.txt', CONVERT(varbinary(max), 'Hello World again'));
GO
 
DELETE FROM dbo.FileStreamStorage
WHERE [Id] <= 4;
von Olaf Helper - veröffentlicht in: T-SQL - Community: SQL Scripter
Kommentar hinzufügen - Kommentare (2)ansehen
Zurück zur Startseite

Kommentare

Danke für den Tipp, genau danach hab ich gesucht!!
Kommentarnr1 gepostet von Teodor am 22.05.2010 um 12h40

Gern geschehen.

Antwort von Olaf Helper am 23.05.2010 um 10h39
du bist sehr fachkundig!Das kann man selten heutzutage finden. Danke für die Lektüre!
Kommentarnr2 gepostet von Albert K am 26.08.2010 um 18h54

Über diesen Blog

Kategorien

Kalender

June 2012
M T W T F S S
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
<< < > >>

Syndication (RSS)

  • RSS-Feed der Artikel

Suchen

Blog erstellen

Erstellen Sie einen Blog auf OverBlog - Kontakt - Nutzungsbedingungen - Werbung - Missbrauch melden - Impressum - Artikel mit den meisten Kommentaren