Partilhar via


Gerenciar FileTables

Aplica-se a:SQL Server

Descreve tarefas administrativas comuns para gerenciar FileTables.

Como: Obter uma lista de FileTables e objetos relacionados

Para obter uma lista de FileTables, consulte 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;  
GO  

Desativando e reativando 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 para o usuário, desde que haja identificadores de arquivo abertos que entrem em conflito com a operação solicitada. Os identificadores de arquivo que entram em conflito com essa operação incluem o seguinte:

    • Quando estiveres a definir o acesso para NONE, todos os identificadores de ficheiro abertos.

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

    Para obter informações sobre como eliminar manipuladores de ficheiros 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> de terminação WITH <(ROLLBACK AFTER integer [ SECONDS ] | REVERSÃO IMEDIATA | NO_WAIT), então todos os identificadores de arquivo não transacionais abertos são mortos.

Advertência

Encerrar manipuladores de ficheiros abertos pode fazer com que os utilizadores percam dados não guardados. Esse comportamento é consistente com o comportamento do próprio sistema de arquivos.

Efeitos da desativaçã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 para NONE, todos os diretórios FileTable e seu conteúdo não são mais acessíveis ou visíveis.

  • Ao definir o acesso para READ_ONLY, todos os diretórios FileTable e os seus conteúdos também ficam como apenas leitura.

A desativação do 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 de banco de dados na instância será visível se FILESTREAM estiver desabilitado no nível da instância.

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

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

Para desativar o acesso não transacional completo
Chame a instrução ALTER DATABASE e DEFINA o valor de NON_TRANSACTED_ACCESS como 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 reativar o acesso não transacional completo
Chame a instrução ALTER DATABASE e DEFINA o valor de NON_TRANSACTED_ACCESS para COMPLETO.

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 de banco de dados e os diretórios FileTable sob ele são visíveis quando todas essas condições forem verdadeiras:

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

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

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

Desativando e reativando o namespace FileTable no nível da tabela

A desativação do 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 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 reativação do namespace FileTable.

A desativação de um namespace FileTable tem os seguintes resultados:

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

  • O diretório FileTable e os arquivos e diretórios que ele contém desaparecem 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 aberto impedem que as restrições FileTable sejam desabilitadas, uma vez que essa operação requer um bloqueio de esquema na tabela.

  • A aplicação de toda a semântica da FileTable, incluindo restrições e gatilhos definidos pelo sistema, cessa assim que o espaço de nomes FileTable é desabilitado.

A reativação de um namespace FileTable tem os seguintes resultados:

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

  • A imposiçã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 ficam disponíveis para acesso de E/S de arquivos.

Como: Desabilitar e reativar 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 reativar o namespace FileTable

ALTER TABLE filetable_name  
ENABLE FILETABLE_NAMESPACE;  
GO  

Eliminar identificadores de arquivos abertos associados a uma Tabela de Arquivos

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

Advertência

Fechar identificadores de arquivos abertos pode levar os utilizadores a perderem dados não guardados. Esse comportamento é consistente com o comportamento do próprio sistema de arquivos.

Como obter uma lista de controlos de ficheiro abertos associados a uma FileTable

Consulte a vista de catálogo sys.dm_filestream_non_transacted_handles (Transact-SQL).

SELECT * FROM sys.dm_filestream_non_transacted_handles;  
GO  

Como eliminar manipuladores de arquivos abertos associados a uma FileTable

Chame o procedimento armazenado sp_kill_filestream_non_transacted_handles (Transact-SQL) com os argumentos apropriados para matar todos os identificadores de arquivo abertos no banco de dados ou na FileTable, ou para matar 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 correspondem a arquivos abertos por aplicativos.

Para identificar arquivos abertos e os bloqueios associados
Associe o campo request_owner_id na vista de gestão dinâmica 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 em FileTable

Os arquivos e diretórios armazenados em FileTables são protegidos apenas pela segurança do SQL Server. A segurança baseada em tabelas e colunas é aplicada tanto para o acesso ao sistema de arquivos como para o acesso ao Transact-SQL. Não há suporte para APIs de segurança do sistema de arquivos do Windows e configurações de ACL.

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

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

Segurança FileTable e acesso ao sistema de arquivos
As APIs do sistema de arquivos exigem permissões apropriadas do SQL Server em toda a linha da 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 da FileTable, o acesso ao sistema de arquivos será negado.

Backup e FileTables

Quando você usa o SQL Server para fazer backup de uma FileTable, o backup dos dados FILESTREAM é feito 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 dos 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 total consistência transacional.

No entanto, quando o acesso não transacional total está habilitado, uma FileTable pode 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 processo está lendo do log de transações. Isso significa que uma operação de restauração "point-in-time" para uma transação específica pode conter dados FILESTREAM que são 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 de Abrir e Fechar Arquivo do Windows na saída de rastreio para ficheiros armazenados numa 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 de dados. Uma única ação no sistema de arquivos se traduz em várias operações DML Transact-SQL. Por exemplo, abrir um ficheiro no Microsoft Word corresponde a várias operações de abrir/fechar/criar/renomear/excluir e às atividades DML correspondentes Transact-SQL. Isso resulta em registros de auditoria detalhados, onde é difícil correlacionar registros entre as ações do sistema de arquivos e os registros de auditoria Transact-SQL DML correspondentes.

DBCC e FileTables

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

Ver também

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