Compatibilidade do FILESTREAM com outras funcionalidades do SQL Server

Aplica-se a: SQL Server

Como os dados do FILESTREAM estão no sistema de ficheiros, este tópico apresenta algumas considerações, orientações e limitações para o uso do FILESTREAM com as seguintes funcionalidades no SQL Server:

Serviços de Integração SQL Server (SSIS)

O SQL Server Integration Services (SSIS) processa dados FILESTREAM no fluxo de dados como quaisquer outros dados BLOB, utilizando o tipo de dados DT_IMAGE do SSIS.

Pode utilizar a transformação Import Column para carregar ficheiros do sistema de ficheiros para uma coluna FILESTREAM. Também pode usar a transformação Exportar Coluna para extrair ficheiros de uma coluna FILESTREAM para outro local no sistema de ficheiros.

Consultas distribuídas e servidores vinculados

Pode trabalhar com dados FILESTREAM por meio de consultas distribuídas e servidores vinculados, tratando-os como dados do tipo varbinary(max). Não pode usar a função FILESTREAM PathName() em consultas distribuídas que utilizam um nome de quatro partes, mesmo quando o nome se refere ao servidor local. No entanto, pode usar PathName() na consulta interna de uma consulta pass-through que utiliza OPENQUERY().

Encryption

Os dados do FILESTREAM não são encriptados mesmo quando a encriptação transparente dos dados está ativada.

Instantâneos do banco de dados

SQL Server não suporta instantâneos de base de dados para grupos de ficheiros FILESTREAM. Se um grupo de ficheiros FILESTREAM for incluído numa cláusula CREATE DATABASE ON, a instrução falhará e será gerado um erro.

Quando utiliza o FILESTREAM, pode criar instantâneos de base de dados de grupos de ficheiros padrão (não FILESTREAM). Os grupos de ficheiros FILESTREAM ficam marcados como offline para esses instantâneos da base de dados.

Uma instrução SELECT executada numa tabela FILESTREAM num snapshot de base de dados não deve incluir uma coluna FILESTREAM; caso contrário, será devolvida a seguinte mensagem de erro:

Could not continue scan with NOLOCK due to data movement.

Replicação

Uma coluna varbinary(max) que tenha o atributo FILESTREAM ativado no Publisher pode ser replicada para um Subscritor com ou sem o atributo FILESTREAM. Para especificar a forma como a coluna é replicada, utilize a caixa de diálogo Article Properties - <Article> ou o @schema_option parâmetro de sp_addarticle ou sp_addmergearticle. Os dados que são replicados para uma coluna varbinary(max) que não tem o atributo FILESTREAM não devem exceder o limite de 2 GB para esse tipo de dado; caso contrário, é gerado um erro em tempo de execução. Recomendamos que replique o atributo FILESTREAM, a menos que esteja a replicar dados para o SQL Server 2005 (9.x). Replicar tabelas que têm colunas FILESTREAM para subscritores do SQL Server 2000 (8.x) não é suportado, independentemente da opção de esquema especificada.

Observação

A replicação de grandes valores de dados do SQL Server para o SQL Server 2005 (9.x) Subscritores está limitada a um máximo de 256 MB de valores de dados. Para mais informações, consulte Especificações de Capacidade Máxima.

Considerações para a Replicação Transacional

Se usar colunas FILESTREAM em tabelas publicadas para replicação transacional, note as seguintes considerações:

  • Se alguma tabela incluir colunas com o atributo FILESTREAM, não é possível utilizar os valores instantâneo de base de dados ou carácter de instantâneo de base de dados para a propriedade @sync_method de sp_addpublication.

  • A opção de tamanho máximo de texto para replicação especifica a quantidade máxima de dados que pode ser inserida numa coluna publicada para replicação. Esta opção pode ser usada para controlar o tamanho dos dados do FILESTREAM que são replicados.

  • Se especificar a opção schema para replicar o atributo FILESTREAM, mas filtrar a coluna uniqueidentifier que o FILESTREAM requer ou especificar não replicar a restrição UNIQUE para a coluna, a replicação não replica o atributo FILESTREAM. A coluna é replicada apenas como uma coluna do tipo varbinary(max).

Considerações para a Replicação de Fusão

Se usar colunas FILESTREAM em tabelas publicadas para replicação de fusão, note as seguintes considerações:

  • Tanto a replicação por fusão como o FILESTREAM requerem uma coluna de identificador único do tipo de dado para identificar cada linha numa tabela. A replicação por fusão adiciona automaticamente uma coluna se a tabela não tiver uma. A replicação por fusão exige que a coluna tenha a propriedade ROWGUIDCOL definida e um valor predefinido de NEWID() ou NEWSEQUENTIALID(). Para além destes requisitos, o FILESTREAM exige que seja definida uma restrição ÚNICA para a coluna. Estes requisitos têm as seguintes consequências:

    • Se adicionar uma coluna FILESTREAM a uma tabela já publicada para replicação de fusão, certifique-se de que a coluna uniqueidentifier tem uma restrição UNIQUE. Se não tiver uma restrição ÚNICA, adicione uma restrição nomeada à tabela na base de dados de publicação. Por predefinição, a replicação por fusão propagará esta alteração ao esquema, e esta será aplicada a todas as bases de dados de subscrição.

      Se adicionar manualmente uma restrição ÚNICA conforme descrito e quiser remover a replicação da fusão, deve primeiro remover a restrição ÚNICA; caso contrário, a remoção da replicação falhará.

    • Por defeito, a replicação de fusão utiliza o NEWSEQUENTIALID() porque pode proporcionar melhor desempenho do que o NEWID(). Se adicionar uma coluna uniqueidentifier a uma tabela que será publicada para replicação de fusões, especifique NEWSEQUENTIALID() como padrão.

  • A replicação por fusão inclui uma otimização para replicar grandes tipos de objetos. Esta otimização é controlada pelo @stream_blob_columns parâmetro de sp_addmergearticle. Se definir a opção schema para replicar o atributo FILESTREAM, o @stream_blob_columns valor do parâmetro é definido como true. Esta otimização pode ser ultrapassada usando sp_changemergearticle. Este procedimento armazenado permite-lhe definir @stream_blob_columns como falso. Se adicionar uma coluna FILESTREAM a uma tabela já publicada para replicação de fusão, recomendamos que defina a opção como true usando sp_changemergearticle.

  • Ativar a opção de esquema para FILESTREAM após a criação de um artigo pode causar a falha da replicação se os dados numa coluna FILESTREAM excederem 2 GB e houver um conflito durante a replicação. Se prever que esta situação venha a ocorrer, recomenda-se que elimine e recrie o artigo da tabela com a opção de esquema FILESTREAM adequada ativada no momento da criação.

  • A replicação por fusão pode sincronizar dados FILESTREAM através de uma conexão HTTPS utilizando Web Synchronization. Estes dados não podem exceder o limite de 50 MB para Sincronização Web; caso contrário, é gerado um erro em tempo de execução.

Transporte de Logs

Log shipping suporta o FILESTREAM. Tanto os servidores primários como secundários devem estar a correr o SQL Server 2008 (10.0.x), ou uma versão posterior, e ter o FILESTREAM ativado.

Espelhamento de banco de dados

O espelhamento de banco de dados não suporta 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 contenha grupos de arquivos FILESTREAM.

Indexação Full-Text

A indexação de texto completo funciona com uma coluna FILESTREAM da mesma forma que funciona com uma coluna varbinary(max ). A tabela FILESTREAM deve ter uma coluna que contenha a extensão do nome do ficheiro para cada BLOB do FILESTREAM. Para mais informações, consulte Consultar com Pesquisa em Texto Completo, Configurar e Gerir Filtros de Pesquisa e sys.fulltext_document_types (Transact-SQL).

O motor de texto integral indexa o conteúdo dos BLOBs do FILESTREAM. Indexar ficheiros como imagens pode não ser útil. Quando um BLOB do FILESTREAM é atualizado, é reindexado.

Cluster de Tolerância a Falhas

Para o clustering por failover, os grupos de ficheiros FILESTREAM devem ser colocados num disco partilhado. O FILESTREAM deve estar ativado em cada nó do cluster que irá alojar a instância FILESTREAM. Para mais informações, consulte Configurar FILESTREAM num Cluster de Failover.

SQL Server Express

O SQL Server Express suporta FILESTREAM. O limite de 10 GB de tamanho da base de dados não inclui o contentor de dados FILESTREAM.

Bases de dados contidas

A funcionalidade FILESTREAM requer alguma configuração fora da base de dados. Portanto, uma base de dados que utiliza FILESTREAM ou FileTable não está totalmente contida.

Pode definir a contenção da base de dados como PARCIAL se quiser usar certas funcionalidades das bases de dados contidas, como utilizadores contidos. Neste caso, no entanto, deve estar ciente de que algumas das definições da base de dados não estão contidas na base de dados e não são movidas automaticamente quando a base de dados se move.

Ver também

Dados de objeto binário grande (Blob) (SQL Server)