In questo articolo discuteremo della funzionalità FILESTREAM in SQL Server: partiremo da una panoramica della tecnologia, vedremo come abilitare e configurare tale funzionalità e concluderemo poi con un esempio pratico.
Dati strutturati e dati non strutturati
L'introduzione di FILESTREAM
Configurazione e abilitazione di FILESTREAM
EXEC sp_configure filestream_access_level ,2; RECONFIGURE WITH OVERRIDE; /* 0 = Accesso Disabilitato 1 = Accesso per solo T-SQL 2 = Accesso per T-SQL e Windows Streaming */
Una volta eseguito il comando riavviamo l’istanza e la configurazione ed abilitazione di FILESTREAM sarà completata.
Esempio pratico
CREATE DATABASE FilestreamDemoDB ON PRIMARY ( NAME = N'FilestreamDemoDB_data' ,FILENAME = N'C:\Temp\DATA\FilestreamDemoDB.mdf' ) ,FILEGROUP DemoFilestream CONTAINS FILESTREAM ( NAME = N'FilestreamDemo' ,FILENAME = 'C:\Temp\DATA\Filestreamdemo1' ) LOG ON ( NAME = N'FilestreamDemoDB_log' ,FILENAME = N'C:\Temp\DATA\FilestreamDemoDB_log.ldf' )
Creato il database possiamo notare nella pagina delle proprietà del database il filegroup FILESTREAM.
Nel file system oltre ai classici file MDF e LDF verrà creata una cartella con la nomeclatura del filegroup FILESTREAM. Questa cartella conterrà altre cartelle in base al numero di tabelle che utilizzano FILESTREAM. Vengono chiamate contenitori di dati i quali sono l'interfaccia tra archiviazione del motore di database e del file system.
Continuiamo con l’esercizio creando una tabella nominata ‘DemoFilestreamTable’ la quale deve avere necessariamente due colonne, una di tipo ROWGUIDCOL che ha la funzione di identificatore univoco e l’altra di tipo varbinary(max) specificando l’attributo FILESTREAM. La terza colonna servirà all’utente per attribuire un’etichetta identificativa.
USE FilestreamDemoDB GO CREATE TABLE [DemoFileStreamTable] ( [FileId] UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE ,[FileName] VARCHAR(25) ,[File] VARBINARY(MAX) FILESTREAM );
Creata la tabella con il seguente script possiamo inserire un dato non strutturato a scelta come un pdf, un word o un’immagine.
In questo caso userò un file png che si trova nel percorso ‘C:\Temp’ e lo inserirò nella tabella ‘DemoFilestreamTable’ precedentemente creata.
DECLARE @File VARBINARY(MAX); SELECT @File = CAST(bulkcolumn AS VARBINARY(max)) FROM OPENROWSET(BULK 'C:\Temp\datamaze_logo.png', SINGLE_BLOB) AS MyData; INSERT INTO DemoFileStreamTable VALUES ( NEWID() ,N'Datamaze logo' ,@File )
Una volta inserito il file nella tabella possiamo trovare il file nel contenitore di dati a file system.