Compartilhar via


Acessar FileTables com APIs de Input-Output de Arquivo

Descreve como a entrada/saída do sistema de arquivos funciona em uma FileTable.

Introdução ao uso de APIs de E/S de arquivo com FileTables

Espera-se que o uso primário de FileTables seja por meio do sistema de arquivos do Windows e das APIs de E/S de arquivo. As FileTables dão suporte ao acesso não transacional por meio do conjunto avançado de APIs de E/S de arquivo disponíveis.

  1. O acesso à API de E/S de arquivo normalmente começa adquirindo um caminho UNC lógico para o arquivo ou diretório. Os aplicativos podem usar uma instrução Transact-SQL com a função GetFileNamespacePath (Transact-SQL) para obter o caminho lógico para o arquivo ou diretório. Para obter mais informações, consulte Trabalhar com diretórios e caminhos em FileTables.

  2. Em seguida, o aplicativo usa esse caminho lógico para obter um identificador para o arquivo ou diretório e fazer algo com o objeto. O caminho pode ser passado para qualquer função de API do sistema de arquivos com suporte, como CreateFile() ou CreateDirectory(), para criar ou abrir um arquivo e obter um identificador. O identificador pode então ser usado para transmitir dados, enumerar ou organizar diretórios, para obter ou definir atributos de arquivo, para excluir arquivos ou diretórios e assim por diante.

Criando arquivos e diretórios em uma FileTable

Um arquivo ou diretório pode ser criado em uma FileTable chamando APIs de E/S de arquivo, como CreateFile ou CreateDirectory.

  • Todos os sinalizadores de disposição de criação, modos de compartilhamento e modos de acesso têm suporte. Isso inclui a criação, a exclusão e a modificação in-loco. Também há suporte para atualizações de namespace de arquivo, ou seja, criação/exclusão de diretório, renomeação e movimentação de operações.

  • A criação de um novo arquivo ou diretório corresponde à criação de uma nova linha na FileTable subjacente.

  • Para arquivos, os dados de fluxo são armazenados na coluna file_stream ; para diretórios, essa coluna é nula.

  • Para arquivos, a coluna is_directory contém false. Para diretórios, essa coluna contém true.

  • O compartilhamento e a simultaneidade do acesso são impostos quando várias operações simultâneas de E/S de arquivo ou operações de Transact-SQL afetam o mesmo arquivo ou diretório na hierarquia.

Lendo arquivos e diretórios em uma FileTable

A semântica de isolamento Read Committed é imposta no SQL Server para todas as operações de acesso de E/S de arquivo em dados de fluxo e atributo.

Gravando e atualizando arquivos e diretórios em uma FileTable

  • Todas as operações de gravação ou atualização de E/S de arquivo em uma FileTable são não transacionais. Ou seja, nenhuma transação do SQL Server está associada a essas operações e nenhuma garantia ACID é fornecida.

  • Todas as atualizações de streaming/in-loco de E/S de arquivo têm suporte para a FileTable.

  • As atualizações dos dados ou atributos FILESTREAM por meio de APIs de E/S de arquivo resultam em atualizações das colunas de atributo de arquivo e file_stream correspondentes na FileTable.

Excluindo arquivos e diretórios em uma FileTable

Todas as regras da semântica da API de E/S de arquivos do Windows são aplicadas quando você exclui um arquivo ou diretório.

  • A exclusão de um diretório falhará se o diretório contiver subdiretórios de arquivos.

  • Excluir um arquivo ou diretório remove a linha correspondente da FileTable. Isso equivale a excluir a linha através de uma operação de Transact-SQL.

Operações do sistema de arquivos com suporte

As FileTables dão suporte às APIs do sistema de arquivos relacionadas às seguintes operações do sistema de arquivos:

  • Gerenciamento de diretórios

  • Gerenciamento de Arquivos

FileTables não dão suporte às seguintes operações:

  • Gerenciamento de disco

  • Gerenciamento de Volume

  • NTFS transacional

Considerações adicionais para acesso de E/S de arquivo a FileTables

Usando VNNs (nomes de rede virtual) com grupos de disponibilidade AlwaysOn

Quando o banco de dados que contém dados FILESTREAM ou FileTable pertence a um grupo de disponibilidade AlwaysOn, todo o acesso aos dados FILESTREAM ou FileTable por meio das APIs do sistema de arquivos deve usar VNNs em vez de nomes de computador. Para obter mais informações, consulte FILESTREAM e FileTable com Grupos de Disponibilidade AlwaysOn (SQL Server).

Atualizações parciais

Um identificador gravável obtido para dados FILESTREAM em uma FileTable usando a função GetFileNamespacePath (Transact-SQL) pode ser usado para realizar atualizações parciais diretamente no conteúdo FILESTREAM. Esse comportamento é diferente do acesso filestream transacionado por meio de um identificador obtido chamando OpenSQLFILESTREAM() e passando um contexto de transação explícito.

Semântica transacional

Quando você acessa os arquivos em uma FileTable usando APIs de E/S de arquivo, essas operações não são associadas a transações de usuário e têm as seguintes características adicionais:

  • Como o acesso não transacionado aos dados FILESTREAM em uma FileTable não está associado a nenhuma transação, ele não tem nenhuma semântica de isolamento específica. No entanto, o SQL Server pode usar transações internas para impor a semântica de bloqueio ou simultaneidade nos dados fileTable. Todas as transações internas desse tipo são feitas com isolamento confirmado por leitura.

  • Não há garantias ACID para essas operações não transacionadas em dados FILESTREAM. As garantias de consistência são semelhantes às das atualizações de arquivo feitas por aplicativos no sistema de arquivos.

  • Essas alterações não podem ser revertidas.

No entanto, a coluna FILESTREAM em uma FileTable também pode ser acessada com acesso filestream transacional chamando OpenSqlFileStream(). Esse tipo de acesso pode ser totalmente transacional e respeitará consistentemente todos os níveis transacionais atualmente suportados.

Controle de simultaneidade

O SQL Server aplica controle de simultaneidade para o acesso ao FileTable entre aplicativos do sistema de arquivos, e entre os aplicativos do sistema de arquivos e os aplicativos Transact-SQL. Esse controle de simultaneidade é obtido usando bloqueios apropriados nas linhas FileTable.

Gatilhos

Criar, modificar ou excluir arquivos ou diretórios ou seus atributos por meio do sistema de arquivos resulta em operações de inserção, atualização ou exclusão correspondentes na FileTable. Todos os gatilhos DML Transact-SQL associados são ativados como parte dessas operações.

Funcionalidade do sistema de arquivos com suporte em FileTables

Capacidade Suportado Comentários
Oplocks Sim Existe suporte para oplocks de Nível 2, Nível 1, Lote e Filtro.
Atributos Estendidos Não
Pontos de Reanálise Não
ACLs persistentes Não
Fluxos nomeados Não
Arquivos esparsos Sim A esparsidade pode ser definida somente em arquivos e afeta o armazenamento do fluxo de dados. Como os dados FILESTREAM são armazenados em volumes NTFS, o recurso FileTable dá suporte a arquivos esparsos encaminhando as solicitações para o sistema de arquivos NTFS.
Compressão Sim
Encryptiion Sim
TxF Não
IDs de arquivo Não
IDs de objeto Não
Links simbólicos Não
Links físicos Não
Nomes curtos Não
Notificações de alteração de diretório Não
Bloqueio de intervalo de bytes Sim As solicitações de bloqueio de intervalo de bytes são passadas para o sistema de arquivos NTFS.
Arquivos mapeados de memória Não
Cancelar E/S Sim
Segurança Não A segurança em nível de compartilhamento do Windows e a segurança em nível de tabela e coluna do SQL Server são impostas.
Diário da USN Não Alterações de metadados em arquivos e diretórios em uma FileTable são operações DML em um banco de dados do SQL Server. Portanto, eles são registrados no arquivo de log de banco de dados correspondente. No entanto, eles não são registrados no diário NTFS USN (exceto para alterações de tamanho).

Os recursos de controle de alterações do SQL Server podem ser usados para capturar informações semelhantes.

Consulte Também

Carregar arquivos em FileTables
Trabalhar com diretórios e caminhos em FileTables
Acessar FileTables com Transact-SQL
DDL fileTable, funções, procedimentos armazenados e exibições