Compartilhar via


Gerenciar FileTables

Descreve tarefas administrativas comuns para gerenciar FileTables.

Como obter uma lista de FileTables e objetos relacionados

Para consultar uma lista de FileTables, utilize uma das seguintes exibições de catálogo:

SELECT * FROM sys.filetables;  
GO  
  
SELECT * FROM sys.tables WHERE is_filetable = 1;  
GO  

Para obter uma lista dos objetos definidos pelo sistema que foram criados quando as FileTables associadas foram criadas, consulte a exibição de catálogo sys.filetable_system_defined_objects (Transact-SQL).

SELECT object_id, OBJECT_NAME(object_id) AS 'Object Name'  
    FROM sys.filetable_system_defined_objects  
    WHERE object_id = filetable_object_id;  
GO  

Desabilitando e reabilitando o acesso não transacional no nível do banco de dados

Para adquirir o acesso exclusivo necessário para determinadas tarefas administrativas, talvez seja necessário desabilitar o acesso não transacional temporariamente.

Comportamento da instrução ALTER DATABASE ao alterar o nível de acesso não transacional

  • Quando você define o acesso não transacional para READ_ONLY ou OFF, o comando ALTER DATABASE não retorna o controle ao usuário desde que haja identificadores de arquivo abertos que estejam em conflito com a operação solicitada. Os manipuladores de arquivo que entram em conflito com esta operação incluem os seguintes:

    • Quando você estiver configurando o acesso a NONE, todos os identificadores de arquivo abertos.

    • Quando você está definindo o acesso ao READ_ONLY, todos os identificadores de arquivo são abertos para acesso de gravação.

    Para obter informações sobre como encerrar identificadores de arquivos abertos, consulte Killing Open File Handles Associated with a FileTable neste tópico.

    Se o comando ALTER DATABASE for cancelado ou terminar com um tempo limite, o nível de acesso transacional não será alterado.

  • Se você chamar a instrução ALTER DATABASE com uma cláusula de terminação> WITH <(ROLLBACK AFTER inteiro [ SECONDS ] | REVERSÃO IMEDIATA | NO_WAIT), todos os identificadores de arquivo não transacionais abertos são eliminados.

Aviso

A eliminação de identificadores de arquivos abertos pode fazer com que os usuários percam dados não salvos. Esse comportamento é consistente com o comportamento do próprio sistema de arquivos.

Efeitos da desabilitação do acesso não transacional

Alterar o nível de acesso não transacional no nível do banco de dados tem os seguintes efeitos nos diretórios FileTable sob o diretório do banco de dados:

  • Quando você define o acesso a NONE, todos os diretórios FileTable e seu conteúdo não são mais acessíveis ou visíveis.

  • Quando você define o acesso a READ_ONLY, todos os diretórios FileTable e seu conteúdo também são somente leitura.

Desabilitar FILESTREAM no nível da instância tem os seguintes efeitos nos diretórios no nível do banco de dados nessa instância e nos diretórios FileTable sob eles:

  • Nenhum dos diretórios no nível do banco de dados na instância ficará visível se FILESTREAM estiver desabilitado no nível da instância.

Como desabilitar e reabilitar o acesso não transacional no nível do banco de dados

Para obter mais informações, veja Opções ALTER DATABASE SET (Transact-SQL).

Para desabilitar o acesso não transacional completo
Chame a instrução ALTER DATABASE e DEFINA o valor de NON_TRANSACTED_ACCESS para READ_ONLY ou OFF.

-- Disable write access.  
ALTER DATABASE database_name  
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = READ_ONLY );  
GO  
  
-- Disable non-transactional access.  
ALTER DATABASE database_name  
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = OFF );  
GO  

Para reabilitar o acesso não transacional completo
Chame a instrução ALTER DATABASE e DEFINA o valor de NON_TRANSACTED_ACCESS como FULL.

ALTER DATABASE database_name  
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL );  
GO  

Como garantir a visibilidade das FileTables em um banco de dados

Um diretório no nível do banco de dados e os diretórios FileTable sob ele ficam visíveis quando todas essas condições são verdadeiras:

  1. FILESTREAM está habilitado no nível da instância.

  2. O acesso não transacional está habilitado no nível do banco de dados.

  3. Um diretório válido foi especificado no nível do banco de dados.

Desabilitando e reabilitando o namespace FileTable no nível da tabela

Desabilitar o namespace FileTable desabilita todas as restrições e gatilhos definidos pelo sistema que foram criados com a FileTable. Isso é útil nos casos em que uma FileTable precisa ser reorganizada em grande escala usando operações de Transact-SQL sem incorrer na despesa de impor a semântica FileTable. No entanto, essas operações podem deixar a FileTable em um estado inconsistente e podem impedir a reabilitação do namespace FileTable.

Desabilitar um namespace FileTable tem os seguintes resultados:

  • As colunas e os dados do FileTable não são removidos fisicamente da tabela.

  • O diretório FileTable e os arquivos e diretórios que eles contêm são removidos do sistema de arquivos e não estão disponíveis para acesso de E/S de arquivo.

  • As colunas FileTable definidas pelo sistema não podem ser descartadas e recriadas; caso contrário, no entanto, eles se comportam como colunas comuns para operações DML.

  • Os identificadores de arquivo abertos impedem que as restrições da FileTable sejam desabilitadas, pois essa operação requer um bloqueio de esquema na tabela.

  • A imposição de toda a semântica FileTable, incluindo restrições e gatilhos definidos pelo sistema, é interrompida após o namespace FileTable ser desabilitado.

Reabilitar um namespace FileTable apresenta os seguintes resultados:

  • A FileTable é verificada quanto à consistência. Se forem encontradas inconsistências, um erro será gerado e a FileTable permanecerá desabilitada; caso contrário, a FileTable será habilitada novamente.

  • A aplicação da semântica FileTable, incluindo restrições e gatilhos definidos pelo sistema, é restaurada.

  • O diretório FileTable e os arquivos e diretórios que ele contém tornam-se visíveis no sistema de arquivos e estão disponíveis para acesso de entrada e saída de arquivo.

Como Desabilitar e Reabilitar o Namespace FileTable no Nível da Tabela

Chame a instrução ALTER TABLE com a opção {ENABLE | DISABLE} FILETABLE_NAMESPACE.

Para desabilitar o namespace FileTable

ALTER TABLE filetable_name  
   DISABLE FILETABLE_NAMESPACE;  
GO  

Para reabilitar o namespace FileTable

ALTER TABLE filetable_name  
   ENABLE FILETABLE_NAMESPACE;  
GO  

Eliminando manipuladores de arquivos abertos associados a uma FileTable

Abrir identificadores para os arquivos armazenados em uma FileTable pode impedir o acesso exclusivo necessário para determinadas tarefas administrativas. Para habilitar tarefas urgentes, talvez seja necessário eliminar identificadores de arquivo abertos associados a uma ou mais FileTables.

Aviso

A eliminação de identificadores de arquivos abertos pode fazer com que os usuários percam dados não salvos. Esse comportamento é consistente com o comportamento do próprio sistema de arquivos.

Como obter uma lista de identificadores de arquivos abertos associados a uma FileTable

Consulte a visualização de catálogo sys.dm_filestream_non_transacted_handles (Transact-SQL).

SELECT * FROM sys.dm_filestream_non_transacted_handles;  
GO  

Como eliminar identificadores de arquivo abertos associados a uma FileTable

Chame o procedimento armazenado sp_kill_filestream_non_transacted_handles (Transact-SQL) com os argumentos apropriados para eliminar todos os identificadores de arquivo abertos no banco de dados ou na FileTable ou para eliminar um identificador específico.

USE database_name;  
  
-- Kill all open handles in all the filetables in the database.  
EXEC sp_kill_filestream_non_transacted_handles;  
GO  
  
-- Kill all open handles in a single filetable.  
EXEC sp_kill_filestream_non_transacted_handles @table_name = 'filetable_name';  
GO  
  
-- Kill a single handle.  
EXEC sp_kill_filestream_non_transacted_handles @handle_id = integer_handle_id;  
GO  

Como identificar os bloqueios mantidos por FileTables

A maioria dos bloqueios feitos por FileTables corresponde aos arquivos abertos por aplicativos.

Para identificar arquivos abertos e os bloqueios associados
Junte o campo request_owner_id na vista de gerenciamento dinâmico sys.dm_tran_locks (Transact-SQL) com o campo fcb_id em sys.dm_filestream_non_transacted_handles (Transact-SQL). Em alguns casos, o bloqueio não corresponde a um único identificador de arquivo aberto.

SELECT opened_file_name  
    FROM sys.dm_filestream_non_transacted_handles  
    WHERE fcb_id IN  
        ( SELECT request_owner_id FROM sys.dm_tran_locks );  
GO  

Segurança do FileTable

Os arquivos e diretórios armazenados em FileTables são protegidos apenas pela segurança do SQL Server. A segurança baseada em tabela e coluna é aplicada ao acesso ao sistema de arquivos e ao acesso Transact-SQL. As APIs de segurança do sistema de arquivos do Windows e as configurações de ACL não têm suporte.

As permissões de segurança e acesso aplicáveis a grupos de arquivos FILESTREAM e contêineres também se aplicam a FileTables, uma vez que os dados do arquivo são armazenados como uma coluna FILESTREAM na FileTable.

FileTable Security e Transact-SQL Access
Transact-SQL acesso aos dados em FileTables é protegido da mesma forma que qualquer outra tabela. As verificações de segurança no nível da tabela e da coluna apropriadas são feitas para cada operação que acessa ou altera os dados.

Acesso ao sistema de arquivos e segurança filetable
As APIs do sistema de arquivos exigem permissões apropriadas do SQL Server em toda a linha na FileTable (ou seja, permissão no nível da tabela) para abrir um identificador para um arquivo ou diretório armazenado na FileTable. Se o usuário não tiver a permissão apropriada do SQL Server em qualquer coluna na FileTable, o acesso ao sistema de arquivos será negado.

Backup e FileTables

Quando você usa o SQL Server para fazer backup de uma FileTable, os dados FILESTREAM são armazenados em backup com os dados estruturados no banco de dados. Se você não quiser fazer backup de dados FILESTREAM com dados relacionais, poderá usar um backup parcial para excluir grupos de arquivos FILESTREAM.

Consistência transacional de backups filetable

Muitas ferramentas e operações administrativas (incluindo backup, backup de log e replicação transacional) leem dados transacionalmente consistentes lendo os logs de transações. Neste momento, eles leem todos os dados FILESTREAM atualizados como parte de uma transação. Quando o acesso não transacional não está habilitado no nível do banco de dados, essas ferramentas e operações funcionam com consistência transacional completa.

No entanto, quando o acesso não transacional completo estiver habilitado, uma FileTable poderá conter dados que foram atualizados mais recentemente (por meio de uma atualização não transacional) do que a transação que a ferramenta ou o processo está lendo do log de transações. Isso significa que uma operação de restauração "ponto no tempo" para uma transação específica pode conter dados FILESTREAM mais recentes do que essa transação. Esse é o comportamento esperado quando atualizações não transacionais são permitidas em FileTables.

SQL Server Profiler e FileTables

O SQL Server Profiler pode capturar as operações Abertura de Arquivo do Windows e Fechamento de Arquivos na saída de rastreamento para arquivos armazenados em uma FileTable.

Auditoria e FileTables

FileTable pode ser auditado como qualquer outra tabela. No entanto, os padrões de acesso do Win32 não são operações baseadas em conjuntos. Uma única ação no sistema de arquivos se traduz em várias operações DML Transact-SQL. Por exemplo, abrir um arquivo no Microsoft Word converte-se em várias operações de abertura/fechamento/criação/renomeação/exclusão e atividades DML de Transact-SQL correspondentes. Isso resulta em registros de auditoria detalhados, nos quais é difícil correlacionar registros entre ações do sistema de arquivos e os registros de auditoria DML correspondentes Transact-SQL.

DBCC e FileTables

Você pode usar DBCC CHECKCONSTRAINTS para validar as restrições em uma FileTable, incluindo restrições definidas pelo sistema.

Consulte Também

Compatibilidade do FileTable com outros recursos do SQL Server
DDL fileTable, funções, procedimentos armazenados e exibições