Novidades no SQL Server 2012 RC0 – FILETABLE parte 2

No meu último post (http://wp.me/p15MPR-6f) falei da funcionalidade FILETABLE, novidade no SQL Server 2012 (RC0, pelo menos!).

Bem, agora pretendo demonstrar como configurar o SQL Server para que possamos criar uma FileTable.

1) Habilitar FILESTREAM para a instância

É preciso habilitar para que seja criado o compartilhamento (shared folder) associado à instância. Essa operação deve ser feita via SQL Server Configuration Manager:


Image by SQLServerCurry.com

Também é preciso configurar o acesso na instância, usando sp_configure:

USE master
go

EXEC sp_configure ‘filestream_access_level’, 2
GO

RECONFIGURE
GO

2) Configurar o banco de dados

Vou criar um novo banco de dados, com um filegroup do tipo FILESTREAM, que será a base para nossos testes:

CREATE DATABASE [Archive_Demo]
ON
PRIMARY
(NAME=Arch_Data1,FILENAME=‘C:\Temp\Data\arch_data1.mdf’),
FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM (NAME=Arch3, FILENAME=‘C:\Temp\Data\Filestream’)
LOG
ON (NAME=Arch_log1,FILENAME=‘C:\Temp\Data\arch_log1.ldf’)

GO

3) Habilitar acesso não transacional:

Este é o “pulo do gato” 😉

ALTER DATABASE [Archive_Demo]
SET FILESTREAM (NON_TRANSACTED_ACCESS=FULL, DIRECTORY_NAME = ‘Filestream’)
WITH NO_WAIT

GO

4) Agora, podemos criar a tabela, ou melhor, a FileTable:

USE [Archive_Demo]
GO

CREATE TABLE MyDocuments AS FileTable
WITH (
FileTable_Directory = ‘MyDocuments’,
FileTable_Collate_Filename = database_default
);

GO

Após copiar e colar alguns arquivos via compartilhamento, podemos consultar o conteúdo de ambos:

SELECT
d.name, d.file_type, d.cached_file_size, d.last_write_time, d.is_directory, d.is_archive, d.*
FROM dbo.MyDocuments d

— SELECT to get NETWORK PATH (UNC):
DECLARE @root varchar(100);

SET @root=FileTableRootPath();

SELECT name, @rootasroot, file_stream.GetFileNamespacePath()
FROM dbo.MyDocuments

Resultados: xxxxxxxxxxxxxxxxxxxxxxxxxxx

Também podemos excluir e atualizar/renomear os arquivos usando T-SQL padrão:

UPDATE dbo.MyDocuments
SET name=REPLACE(name,‘.log’,‘.txt’)
WHERE name like ‘%log’

Algumas DMVs que retornam informações sobre FileTables:

— non-transacted access enabled databases:
SELECT
CAST(DB_NAME(database_id)ASvarchar(30)) as db_name,
CAST(non_transacted_access_descasvarchar(20)) as non_transacted_access_desc,
non_transacted_access
FROM sys.database_filestream_options;

GO

— query existing Directory Names for the Instance
SELECT DB_NAME(database_id), directory_name
FROM sys.database_filestream_options;

GO

Bem, agora que temos uma “relação” entre a nossa “tabela” e o “compartilhamento”, podemos começar a pensar em cenários para aplicar esta funcionalidade:

  • File Server integrado ao SQL Server, pesquisável por conteúdo
  • Acesso ao conteúdo dos arquivos via T-SQL ou SMB

Aguardamos o launch do RTM do SQL Server 2012. Será no dia 07/mar/2012.

Para vídeos, tutoriais e mais recursos presentes na nova versão, acesse o site www.sqlserverlaunch.com.

Um abraço!

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s