Banco de Dados - SQL ServerFeed de artigos deste autor

Utilizando FILETABLE no SQL Server 2012

O Artigo descreve como trabalhar com a nova Feature do SQL Server 2012, chamada de FileTable

por Cristiano Joaquim



Dando continuidade nas novidades que o SQL Server 2012 nos traz, vemos uma nova feature chamada: FileTable.

Mas o que isso significa?

Uma nova feature construída sobre a tecnologia do FILESTREAM, permitindo que dados BLOB sejam armazenados como arquivos individuais, porém, separados dos arquivos de um banco de dados, onde podemos usa-los como uma tabela de banco de dados com quase todas as funções de uma tabela “convencional”.

Para ser mais objetivo, podemos armazenar arquivos e documentos em tabelas do SQL Server, além acessá-las de aplicações do Windows sendo que elas estão armazenadas no Sistema de arquivos, sem que para isso seja necessária alteração nos aplicativos.

Mas você deve estar se perguntando: “Qual o benefício de se usar isto?”.

Seguem alguns:

  • Armazenamento dos atributos do arquivo gerado, como a Data de criação, modificação e último acesso;
  • Suporte para o gerenciamento de arquivos e de diretórios do Windows;
  • Facilidade de mover esses arquivos de dados para servidores de arquivos, mantendo a compatibilidade das aplicações que trabalham com esses dados como arquivos no sistema de arquivos;
  • Compatibilidade com outros recursos do SQL Server

No entanto, para configurar o FileTable na Instância do SQL Server, existem algumas etapas envolvidas no processo, como por exemplo a configuração do FileStream.

Para configurá-lo, e darmos andamento no processo, vamos seguir esta “receita de bolo”. Segue:

1. Abra o SQL Server Configuration Manager, conforme apresentado na imagem 1.

Selecione o SQL Server Configuration Manager
Imagem 1 - Selecione o SQL Server Configuration Manager

2. Navegue até o SQL Server Services, no painel esquerdo da janela aberta, conforme apresentado na imagem 2.

Selecionando o Serviço do SQL Server
Imagem 2 - Selecionando o Serviço do SQL Server

3. No painel a direita, clique na instância do banco de dados sobre o qual você deve ativar o suporte do FILESTREAM e selecione a opção propriedades, conforme vemos na Imagem 3 abaixo.

Selecionando a opção Propriedades do Serviço da Instancia do Banco de dados
Imagem 3 - Selecionando a opção Propriedades do Serviço da Instancia do Banco de dados

4. Será aberta as propriedades do SQL Server, que conterá as Abas onde poderemos configurar a opção FILESTREAM, habilitando o serviço.

Opção FileStream disponível para ser Habilitada
Imagem 4 - Opção FileStream disponível para ser Habilitada

Com isso, habilite a Opção do FileStream, apresentado na imagem acima, para darmos andamento na utilização do FileTable.

Observação: Você pode também alterar o nome do compartilhamento do Windows. Contudo, vou deixa-lo no padrão, ou seja, o nome do exemplo.

Agora, um fato interessante que você pode notar e que o servidor disponibiliza um compartilhamento do Windows usando o nome da Instância do Banco de dados instalado no seu Micro. Para ver este compartilhamento, abra o Explorer do seu Sistema Operacional e digite o seguinte endereço: \\127.0.0.1 e veja a o resultado, conforme imagem 5 abaixo.

Verificando o compartilhamento do Windows ao habilitar o FileStream
Imagem 5 - Verificando o compartilhamento do Windows ao habilitar o FileStream

Nota: Se você habilitou o acesso remoto na opção Enable FILESTREAM for file I/O streaming access, poderá acessar este compartilhamento, mas ele estará vazio neste momento.

Habilitando o SQL Server para usar o FileStream

Vamos novamente seguir um passo-a-passo:

1. Abra o SQL Server Management Studio e cancele a tela de Login que será aberta.

2. Clique no botão New Query e se conecte na instância do SQL Server, a qual foi configurada nos passos anteriores.

3. Execute uma consulta com o seguinte Script:

exec sp_configure filestream_access_level, 2; 
reconfigure;
Tela do Management Studio com o Script inserido
Imagem 6 - Tela do Management Studio com o Script inserido

Bom, com o FileStream configurado na Instância, podemos começar a configurar o nosso exemplo de armazenamento de banco de dados de FileStream.

Para isso, na mesma tela aberta no SQL Server, abra uma New Query e execute o Script abaixo:


CREATE DATABASE FileTableSample
GO
Executando o Script de criação da base de dados
Imagem 7 - Executando o Script de criação da base de dados

Nessa mesma janela, execute o script abaixo:


ALTER DATABASE FileTableSample 
ADD FILEGROUP FileStreamG1 CONTAINS FILESTREAM;
Executando o Script de Alteração do Database e adicionando um grupo de arquivos FileStream para  o banco de dados
Imagem 8 - Executando o Script de Alteração do Database e adicionando um grupo de arquivos FileStream para o banco de dados

Nessa mesma janela, execute o próximo script abaixo para dar andamento no processo:


ALTER DATABASE FileTableSample
ADD FILE (
			NAME = FileStream01,
			FILENAME = 'C:\Temp\FileStreamGroup1'
		 ) 
TO FILEGROUP FileStreamG1;
Executando o script que cria o arquivo FileTable
Imagem 9 - Executando o script que cria o arquivo FileTable em um respectivo diretório e definindo o armazenamento associado com o grupo de arquivos FileStream adicionado anteriormente

Nesta última etapa será necessária um comentário: Percebam que o caminho de armazenamento do FileStream é identificado conforme o nome do arquivo de configuração, sendo o mesmo um caminho válido no Sistema Operacional, ou seja, o Diretório C:\Temp deve existir e estar disponível para uso. Entretanto, a pasta FileStreamGroup1 não será preciso ser criada, pois o próprio SQL Server se encarregará de cria-la no momento da execução do Script.

Bom, com o banco de dados ajustado, precisamos configurar a forma como o banco vai apresentar e controle as iterações com os dados do FileStream.

Para isso, vamos seguir os passos abaixo:

1. Necessitamos agora definir o nome da subpasta compartilhada através do qual o FileStream irá associar o banco de dados. Para isso, necessitamos executar o script abaixo:

ALTER DATABASE FileTableSample 
SET FILESTREAM ( DIRECTORY_NAME = 'FileTableSample' );
Definindo o nome da subpasta compartilhada
Imagem 10 - Definindo o nome da subpasta compartilhada

2. O próximo passo será habilitar o acesso de leitura e escrita de dados no FileStream, de acordo com o script e imagem abaixo:

ALTER DATABASE FileTableSample 
SET FILESTREAM ( non_transacted_access = full ); 
Liberando acesso a leitura e escrito de dados no FileStream
Imagem 11 - Liberando acesso a leitura e escrito de dados no FileStream

Para terminarmos, vamos criar uma tabela neste banco de dados criado. Para tanto, segue mais um Script:

use FileTableSample
GO

CREATE TABLE TBL_FileTable AS FILETABLE
GO

Enfim, conforme verão na imagem abaixo, temos agora a tabela criada e disponível para acesso.

Tabela FileTable criada com sucesso
Imagem 12 - Tabela FileTable criada com sucesso

Abaixo, temos em outra imagem como ficou a estrutura de arquivos dentro do Diretório que utilizamos para armazenar arquivos com o FIleStrem.

Apresentando a estrutura de arquivos criados
Figura 13 - Apresentando a estrutura de arquivos criados

Bom, com isso terminamos nosso exemplo.

Vemos que com um FileTable, possuímos definido no banco de dados uma tabela, sendo que a configuração da estrutura permitirá acesso não-transacional para esta estrutura de pastas, onde poderemos arrastar e soltar arquivos dentro da pasta e até mesmo criar subpastas, sendo que tudo isso se reflete na table MyFileTable, isso quando interagímos usando Transact SQL.

Da mesma forma, quando utilizamos Transact SQL para realizar o “CRUD”, essas alterações serão refletidas na pasta associada no compartilhamento do Windows.

Bons estudos,

Cristiano Joaquim
Cristiano Joaquim

Cristiano Joaquim - Graduado em Ciência da Computação pela Universidade de Guarulhos (UnG) e Pós-graduado em BI pela Faculdade Veris IBTA. Trabalha há 11 anos com Tecnologia Microsoft.