Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Descreve como o FileTables funciona com outros recursos do SQL Server.
Grupos de Disponibilidade AlwaysOn e FileTables
Quando o banco de dados que contém dados FILESTREAM ou FileTable pertence a um grupo de disponibilidade AlwaysOn:
A funcionalidade FileTable tem suporte parcial dos Grupos de Disponibilidade AlwaysOn. Após um failover, os dados FileTable são acessíveis na réplica primária, mas os dados FileTable não são acessíveis em réplicas secundárias legíveis.
Observação
Observe que, após um failover, todas as funcionalidades FILESTREAM são suportadas. Os dados FILESTREAM são acessíveis tanto em réplicas secundárias legíveis quanto no novo primário.
As funções FILESTREAM e FileTable aceitam ou retornam VNNs (nomes de rede virtual) em vez de nomes de computadores. Para obter mais informações sobre essas funções, confira Funções Filestream e FileTable (Transact-SQL).
Todo o acesso aos dados FILESTREAM ou FileTable pelas APIs do sistema de arquivos deve usar VNNs em vez de nomes de computadores. Para obter mais informações, consulte FILESTREAM e FileTable com Grupos de Disponibilidade AlwaysOn (SQL Server).
Particionamento e FileTables
Não há suporte para particionamento em FileTables. Com o suporte para vários grupos de arquivos FILESTREAM, problemas de escala vertical pura podem ser tratados sem precisar recorrer ao particionamento na maioria dos cenários (ao contrário do SQL 2008 FILESTREAMs).
Replicação e FileTables
A replicação e os recursos relacionados (incluindo replicação transacional, replicação de mesclagem, captura de dados de alteração e controle de alterações) não têm suporte com FileTables.
Semântica de transação e FileTables
Aplicativos do Windows
Os aplicativos do Windows não entendem as transações de banco de dados, portanto, as operações de gravação do Windows não fornecem as propriedades ACID de uma transação de banco de dados. Portanto, as reversões transacionais e a recuperação não são possíveis com as operações de atualização do Windows.
aplicativosTransact-SQL
Para aplicativos TSQL que trabalham na coluna FILESTREAM (file_stream) em uma FileTable, a semântica de isolamento é a mesma do tipo de dados FILESTREAM em uma tabela de usuário regular.
Notificações de consulta e FileTables
A consulta não pode conter referência à coluna FILESTREAM na FileTable, na cláusula WHERE ou em qualquer outra parte da consulta.
SELECT INTO e FileTables
As instruções SELECT INTO de uma FileTable não propagarão a semântica FileTable na tabela de destino criada (assim como as colunas FILESTREAM em uma tabela regular). Todas as colunas da tabela de destino se comportarão como colunas normais. Eles não terão nenhuma semântica FileTable associada a eles.
Gatilhos e FileTables
Gatilhos de Linguagem de Definição de Dados (DDL)
Não há considerações especiais para gatilhos DDL com FileTables. Gatilhos DDL normais serão acionados para operações de criar/alterar banco de dados, bem como operações de criar/alterar tabela em FileTables. Os gatilhos podem recuperar os dados de evento reais que incluem o texto do comando DDL e outras informações chamando a função EVENTDATA(). Não há novos eventos ou alterações no esquema Eventdata existente.
Gatilhos DML (Linguagem de Manipulação de Dados)
Essas restrições serão impostas durante a operação DDL para criar gatilhos.
FileTables não darão suporte a INSTEAD OF triggers para operações DML. Essa é uma restrição existente em todas as tabelas que contêm colunas FILESTREAM.
FileTables dará suporte a gatilhos AFTER para as operações DML.
Gatilhos definidos em uma FileTable não podem atualizar nenhuma FileTable (incluindo a FileTable pai). Essa restrição existe principalmente para impedir que um gatilho entre em conflitos de bloqueio com os bloqueios mantidos pelo acesso do sistema de arquivos na mesma transação.
Acesso não transacional e seus efeitos nos gatilhos
Quando o acesso de atualização não transacional é permitido em um banco de dados, é possível atualizar diretamente os dados FILESTREAM em qualquer tabela, incluindo a FileTable nesse banco de dados. Devido a essa possibilidade, a imagem anterior dos conteúdos do FILESTREAM pode não estar disponível para uso pelo trigger.
Para operações de atualização não transacionais por meio do sistema de arquivos, o SQL Server criará uma transação interna para capturar a operação CloseHandle e os gatilhos DML definidos podem ser disparados como parte dessa transação. Uma reversão dessa transação dentro do corpo do gatilho, embora não seja impedida, não reverte as alterações feitas no FILESTREAM. Essa reversão também pode impedir que os gatilhos de atualização sejam disparados, mesmo que o conteúdo FILESTREAM possa ter sido alterado.
Além desses impactos, os gatilhos em FileTables precisam lidar com alguns comportamentos adicionais
No caso de operações de atualização não transacionais no FileTable por meio do sistema de arquivos, é possível que o conteúdo FILESTREAM possa ser bloqueado exclusivamente por outras operações do Win32 e pode não estar acessível para leitura/gravação por meio do corpo do gatilho. Nesses casos, qualquer tentativa de acessar o conteúdo do FILESTREAM no corpo do gatilho pode resultar em um erro de "Violação de Compartilhamento". Os gatilhos devem ser projetados para lidar com esses erros adequadamente.
A imagem AFTER do FILESTREAM pode não ser estável, pois, em alguns casos, ela pode estar sendo gravada de maneira ativa por outras atualizações não transacionais ao mesmo tempo (devido aos modos de compartilhamento permitidos no acesso ao sistema de arquivos).
O encerramento anormal de identificadores Win32, como a morte explícita de identificadores Win32 por um administrador ou uma falha de banco de dados, não executará gatilhos de usuário durante as operações de recuperação, mesmo que o conteúdo FILESTREAM possa ter sido alterado pelo aplicativo Win32 encerrado anormalmente.
Exibições e FileTables
Visualizações
Uma exibição pode ser criada em uma FileTable como em qualquer outra tabela. No entanto, as seguintes considerações se aplicam a uma exibição criada em uma FileTable:
A exibição não terá nenhuma semântica FileTable. Ou seja, as colunas na exibição (incluindo colunas de Atributo de Arquivo) se comportam como colunas de exibição normais sem nenhuma semântica especial e o mesmo é verdadeiro para linhas que representam Arquivos/diretórios.
A exibição pode ser atualizável com base na semântica "exibição atualizável", mas as restrições de tabela subjacentes podem rejeitar as atualizações da mesma forma que na tabela.
O caminho do arquivo para um arquivo pode ser visualizado no modo de exibição adicionando-o como uma coluna explícita no modo de exibição. Por exemplo:
CREATE VIEW MP3FILES AS SELECT column1, column2, ..., GetFileNamespacePath() AS PATH, column3,... FROM Documents
Exibições indexadas
Atualmente, as exibições indexadas não podem incluir colunas FILESTREAM ou colunas computadas/persistidas computadas que dependem das colunas FILESTREAM. Esse comportamento permanece inalterado com exibições definidas na FileTable também.
Isolamento de instantâneo e FileTables
O RCSI (isolamento de instantâneo confirmado de leitura) e o SI (isolamento de instantâneo) dependem da capacidade de ter um instantâneo dos dados disponíveis para os leitores mesmo quando as operações de atualização estão acontecendo nos dados. No entanto, as FileTables permitem acesso de gravação não transacional aos dados do Filestream. Como resultado, as seguintes restrições se aplicam ao uso desses recursos em bancos de dados que contêm FileTables:
Um banco de dados que contém FileTables pode ser alterado para habilitar o RCSI/SI.
Quando o acesso não transacional é definido como FULL para o banco de dados, uma transação executada sob RCSI ou SI tem o seguinte comportamento:
As leituras Transact-SQL da coluna file_stream do FileTable falham. INSERT e UPDATE na coluna ainda são bem-sucedidos, desde que não haja leitura da coluna file_stream.
Se a instrução Transact-SQL especificar dicas de tabela READCOMMITTEDLOCK, as leituras serão bem-sucedidas e realizarão bloqueios nas linhas, em vez de usar o controle de versão de linha.
Solicitações transacionadas de Win32 FileStream também falham.
O acesso FileTable Win32 não transacionado é bem-sucedido. Todas as consultas internas feitas por FileTable não são afetadas.
A indexação de texto completo sempre é bem-sucedida, independentemente de quais são as opções do banco de dados (READ_COMMITTED_SNAPSHOT ou ALLOW_SNAPSHOT_ISOLATION).
Bancos de dados secundários legíveis
As mesmas considerações se aplicam a bancos de dados secundários legíveis como ocorre com os instantâneos, conforme descrito na seção anterior, Isolamento de Instantâneo e FileTables.
Bancos de dados e FileTables contidos
O recurso FILESTREAM no qual o recurso FileTable depende requer alguma configuração fora do banco de dados. Portanto, um banco de dados que usa FILESTREAM ou FileTable não está totalmente contido.
Você pode definir a contenção de banco de dados como PARCIAL se quiser usar determinados recursos de bancos de dados independentes, como usuários internos. Nesse caso, no entanto, você deve estar ciente de que algumas das configurações do banco de dados não estão contidas no banco de dados e não são movidas automaticamente quando o banco de dados é movido.