Banco de Dados - SQL Server
Utilizando File Stream
Um artigo ensinando ao desenvolvedor para que serve e como utilizar o File Stream, uma das novas features do SQL Server 2008.
por Eduardo Bergantini PintoHoje vou falar um pouco sobre uma das inovações no SQL Server 2008, o Filestream.
Entendendo o filestream.
O SQL Server sempre proveu a capacidade de armazenar dados binários, assim
você podia pegar qualquer tipo de arquivo e armazená-lo com uma coluna do tipo
VARBINARY(MAX).
no entanto um BLOB (Binary Large Object) tem um padrão de usabilidade diferente
de dados relacionais, que são concatenados por meio de I/O e armazenados como
dados estendidos, não é possível fazer um streaming de um BLOB.
Por causa dessa limitação, a solução paliativa dos desenvolvedores era
disponibilizar o arquivo em um diretório e apenas indicar o caminho no banco de
dados, que ainda sim é uma solução viável mesmo dispondo do Filestream.
Criando e utilizando o filestream.
Por padrão o FILESTREAM vem
habilitado na instancia do SQL Server 2008.
quando você vai criar o seu banco de dados deve apontar para ele onde
ficará a armazenado o diretório do seu FileStream.
CREATE
DATABASE [Teste] ON
PRIMARY
(NAME =
N"Teste_Data", FILENAME = N"D:\Teste\data\Teste.mdf",
SIZE = 8MB,
MAXSIZE = UNLIMITED, FILEGROWTH = 16MB),
FILEGROUP FgTesteSave
(NAME = N"Teste_Data2", FILENAME = N"D:\Teste\data_save\Teste.ndf", SIZE = 8MB, MAXSIZE = UNLIMITED, FILEGROWTH = 16MB),
FILEGROUP FgTesteDocuments CONTAINS FILESTREAM DEFAULT
(NAME = N"Teste_Documents", FILENAME = N"D:\Teste\document")
LOG ON
(NAME = N"Teste_Log", FILENAME = N"D:\Teste\log\Teste.ldf", SIZE = 8MB, MAXSIZE = 2048GB, FILEGROWTH = 16MB)
GO
Na criação de um filestream repare bem que você deve apontar um diretório e não um arquivo, dentro desse diretório serão criados os arquivos para filestream.
Mas e nos casos em que o banco
de dados ainda não tem FileStream ?
Nesse caso você utilizaria o seguinte código, para dizer ao seu banco de dados
para criar a estrutura de FileStream para você:
ALTER DATABASE [Teste]
ADD FILEGROUP FgTesteDocuments CONTAINS FILESTREAM
GO
ALTER DATABASE [Teste]
ADD FILE
(
NAME= "fs_filestream",
FILENAME = N"D:\Teste\document"
)
TO FILEGROUP FgTesteDocuments
GO
A primeira vez que você for para
o diretório document você encontrará alguns arquivos NTFS com GUID"s como nome,
e alguns arquivos principais com arquivos de log. Todo esse funcionamento serve
para criar o namespace do filestream.
Em seguida vamos criar a nossa tabela que será responsável pelo armazenamento
desses arquivos.
CREATE TABLE [dbo].[TestarMedia] (
[testeID] UNIQUEIDENTIFIER NOT NULL ROWGUIDCOL PRIMARY KEY,
[dataCriacao] DATETIME NOT NULL DEFAULT(GETDATE()),
[criadoPor] NVARCHAR(255) NOT NULL,
[fileName] NVARCHAR(255) NOT NULL,
[tipoTeste] NVARCHAR(255) NOT NULL,
[localizacao] GEOMETRY NULL,
[arquivo] VARBINARY(MAX) FILESTREAM);
GO
tabelas que contem colunas com filestream requerem uma com a propriedade
ROWGUILDCOL ela serve para o sistema de armazenamento manter traçado a
instancia do banco no filesystem.
Um dos pontos positivos de utilizar o filestream para armazenar seus arquivos é
que, por estar dentro do SQL Server você não terá problema com perda de dados,
ou corrupção de dados a menos que tenha ocorrido na hora de ser inserido,
podendo assim recuperar seus dados em caso de catastrofes realizando um simples
restore no banco.
FONTE: livro Microsoft SQL
Server 2008 - Implementation and Maintenance
- Representando dados em XML no SQL ServerSQL Server
- Diferenças entre SEQUENCES x IDENTITY no Microsoft SQL Server 2012SQL
- Utilizando FILETABLE no SQL Server 2012SQL Server
- NHibernate com o Delphi Prism: Acessando um Banco de Dados SQL ServerVisual Studio
- Novidades no SQL Server Codinome DenaliSQL Server