Usando o FILESTREAM com outros recursos do SQL Server

Como dados FILESTREAM estão no sistema de arquivos, este tópico fornece algumas considerações, diretrizes e limitações para uso de FILESTREAM com os seguintes recursos no SQL Server:

  • SQL Server Integration Services (SSIS)

  • Consultas distribuídas e servidores vinculados

  • Instantâneos de banco de dados

  • Replicação

  • Envio de log

  • Espelhamento de banco de dados

  • Texto completo

  • Clustering de failover

  • SQL Server Express

SQL Server Integration Services (SSIS)

O SQL Server Integration Services (SSIS) trata os dados FILESTREAM no fluxo de dados como quaisquer outros dados BLOB usando o tipo de dados DT_IMAGE SSIS.

Você pode usar a transformação Importar Coluna para carregar arquivos do sistema de arquivos em uma coluna FILESTREAM. Você também pode usar a transformação Exportar Coluna para extrair arquivos de uma coluna FILESTREAM para outro local do sistema de arquivos.

Consultas distribuídas e servidores vinculados

Você pode trabalhar com dados FILESTREAM em consultas distribuídas e servidores vinculados tratando-os como dados varbinary(max). Você não pode usar a função FILESTREAM PathName() em consultas distribuídas que usam um nome de quatro partes, mesmo quando o nome se refere ao servidor local. No entanto, você pode usar PathName() na consulta interna de uma consulta passagem que usa OPENQUERY().

Instantâneos de banco de dados

O SQL Server não oferece suporte a instantâneos do banco de dados para grupos de arquivos FILESTREAM. Se um grupo de arquivos FILESTREAM for incluído em uma cláusula CREATE DATABASE ON, a instrução falhará e um erro será gerado.

Ao usar FILESTREAM, você pode criar instantâneos do banco de dados de grupos de arquivos padrão (não FILESTREAM). Os grupos de arquivos FILESTREAM são marcados como offline para esses instantâneos do bancos de dados.

Uma instrução SELECT executada em uma tabela FILESTREAM em um instantâneo do banco de dados não deve incluir uma coluna FILESTREAM. Caso contrário, a mensagem de erro a seguir será retornada:

Could not continue scan with NOLOCK due to data movement.

Replicação

Uma coluna varbinary(max) que tem o atributo FILESTREAM ativado no Publicador pode ser replicada para um Assinante com ou sem o atributo FILESTREAM. Para especificar a maneira como a coluna é replicada, use a caixa de diálogo Propriedades do Artigo - <Artigo> ou o parâmetro @schema_option de sp_addarticle ou sp_addmergearticle. Para obter mais informações sobre como definir opções de esquema, consulte Como especificar opções de esquema (SQL Server Management Studio) e Como especificar opções de esquema (Programação Transact-SQL de replicação). Dados replicados para uma coluna varbinary(max) que não tenham o atributo FILESTREAM não devem exceder o limite de 2 GB daquele tipo de dados. Caso contrário, um erro de tempo de execução será gerado. Recomendamos replicar o atributo FILESTREAM, a menos que a intenção seja replicar dados para o SQL Server 2005. Não há suporte para a replicação de tabelas que possuem colunas FILESTREAM para assinantes do SQL Server 2000, independentemente da opção de esquema especificada. Para obter mais informações sobre como replicar dados para versões anteriores do SQL Server, consulte Usando várias versões do SQL Server em uma topologia de replicação.

ObservaçãoObservação

A replicação de valores de dados grandes do SQL Server 2008 para Assinantes do SQL Server 2005 é limitada a um máximo de 256 MB de valores de dados. Para obter mais informações, consulte Especificações de capacidade máxima.

Considerações sobre replicação transacional

Se você usar colunas FILESTREAM em tabelas que são publicadas para replicação transacional, observe as seguintes considerações:

  • Se alguma tabela contiver colunas que possuem o atributo FILESTREAM, você não poderá usar valores de database snapshot ou database snapshot character como a propriedade @sync_method de sp_addpublication.

  • A opção max text repl size especifica a quantidade máxima de dados que podem ser inseridos em uma coluna que é publicada para replicação. Essa opção pode ser usada para controlar o tamanho de dados FILESTREAM que são replicados. Para obter mais informações, consulte Opção max text repl size.

  • Se você especificar a opção de esquema para replicar o atributo FILESTREAM, mas filtrar a coluna uniqueidentifier requerida pelo FILESTREAM ou se especificar não replicar a restrição UNIQUE da coluna, a replicação não replicará o atributo FILESTREAM. A coluna é replicada apenas como uma coluna varbinary(max).

Considerações sobre replicação de mesclagem

Se você usar colunas FILESTREAM em tabelas que são publicadas para replicação de mesclagem, observe as seguintes considerações:

  • A replicação de mesclagem e o FILESTREAM exigem uma coluna de tipo de dados uniqueidentifier para identificar cada linha em uma tabela. A replicação de mesclagem adicionará uma coluna automaticamente se a tabela não tiver uma. A replicação de mesclagem requer que a coluna tenha a propriedade ROWGUIDCOL definida e um padrão de NEWID() ou de NEWSEQUENTIALID(). Além desses requisitos, o FILESTREAM requer que uma restrição UNIQUE seja definida para a coluna. Esses requisitos têm as seguintes consequências:

    • Se você adicionar uma coluna FILESTREAM a uma tabela já publicada para replicação de mesclagem, verifique se a coluna uniqueidentifier tem uma restrição UNIQUE. Se ela não tiver uma restrição UNIQUE, adicione uma restrição nomeada à tabela no banco de dados de publicação. Por padrão, a replicação de mesclagem publicará essa alteração de esquema e ela será aplicada a cada banco de dados de assinatura. Para obter mais informações sobre alterações de esquema, consulte Fazendo alterações de esquema em bancos de dados de publicação.

      Se você adicionar uma restrição UNIQUE manualmente conforme descrito e desejar remover a replicação de mesclagem, deverá primeiro remover a restrição UNIQUE. Caso contrário, haverá falha na remoção da replicação.

    • Por padrão, a replicação de mesclagem usa NEWSEQUENTIALID() porque ele pode fornecer desempenho melhor que NEWID (). Se você adicionar uma coluna uniqueidentifier a uma tabela que será publicada para replicação de mesclagem, especifique NEWSEQUENTIALID() como o padrão.

  • A replicação de mesclagem inclui uma otimização para replicar tipos de objetos grandes. Essa otimização é controlada pelo parâmetro @stream_blob_columns de sp_addmergearticle. Se você configurar a opção de esquema para replicar o atributo FILESTREAM, o valor do parâmetro @stream_blob_columns será definido como true. Essa otimização pode ser substituída usando sp_changemergearticle. Esse procedimento armazenado permite definir @stream_blob_columns como false. Se você adicionar uma coluna FILESTREAM a uma tabela já publicada para replicação de mesclagem, recomendamos definir a opção como true usando sp_changemergearticle.

  • A habilitação da opção de esquema para FILESTREAM após a criação de um artigo poderá provocar falha na replicação, se os dados em uma coluna FILESTREAM excederem 2 GB e houver um conflito durante a replicação. Se essa situação for esperada, é recomendável descartar e recriar o artigo de tabela com a opção de esquema FILESTREAM adequada habilitada na hora da criação.

  • A replicação de mesclagem pode sincronizar dados FILESTREAM sobre uma conexão HTTPS usando Sincronização da Web. Esses dados não podem exceder o limite de 50 MB para Sincronização da Web. Caso contrário, um erro de tempo de execução será gerado.

Envio de log

O Envio de log oferece suporte a FILESTREAM. Os servidores primário e secundário devem estar executando o SQL Server 2008 ou uma versão posterior e ter o FILESTREAM habilitado.

Espelhamento de banco de dados

O espelhamento de banco de dados não oferece suporte a FILESTREAM. Um grupo de arquivos FILESTREAM não pode ser criado no servidor principal. O espelhamento de banco de dados não pode ser configurado para um banco de dados que contém grupos de arquivos FILESTREAM.

Indexação de texto completo

A Indexação de texto completo funciona com uma coluna FILESTREAM da mesma maneira como com uma coluna varbinary(max). A tabela FILESTREAM deve ter uma coluna que contenha a extensão do nome do arquivo para cada BLOB FILESTREAM. Para obter mais informações, consulte Consultando colunas varbinary(max) e xml (Pesquisa de Texto Completo), Filtros da pesquisa de texto completo,Indexação de texto completo e processo de consulta e sys.fulltext_document_types (Transact-SQL).

O mecanismo de texto completo indexa o conteúdo dos BLOBs FILESTREAM. Arquivos de indexação como imagens podem não ser úteis. Quando um BLOB FILESTREAM é atualizado, ele é reindexado.

Clustering de failover

Para clustering de failover, os grupos de arquivos FILESTREAM devem ser colocados em um disco compartilhado. O FILESTREAM deve ser habilitado em cada nó do cluster que hospedará a instância FILESTREAM. Para obter mais informações, consulte Como configurar FILESTREAM em um cluster de failover.

SQL Server Express

O SQL Server Express oferece suporte a FILESTREAM. O limite de tamanho do banco de dados do 4 GB não inclui o contêiner de dados FILESTREAM.

Consulte também

Outros recursos