Acessar FileTables com APIs de entrada e saída de arquivo

Aplica-se a:SQL Server

Descreve como a E/S do sistema de arquivos funciona em uma FileTable.

Começar a usar APIs de E/S de arquivos com FileTables

O uso primário de FileTables espera ser por meio do sistema de arquivos do Windows e APIs de E/S de arquivos. FileTables oferecem suporte ao acesso não transacional por meio do conjunto vasto de APIs de E/S de arquivos disponíveis.

  1. O acesso à API de E/S de arquivos normalmente começa com a aquisição de 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 Work with Directories and Paths in 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 transmitido 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. Em seguida, o identificador pode ser usado para transmitir dados, enumerar ou organizar diretórios, obter ou definir atributos de arquivos, excluir arquivos ou diretórios etc.

Criando arquivos e diretórios em uma FileTable

Você pode criar um arquivo ou um diretório em uma FileTable chamando APIs de E/S de arquivos, como CreateFile ou CreateDirectory.

  • Há suporte para todos os sinalizadores de criação de disposição, modos de compartilhamento e modos de acesso. Isso inclui a criação, a exclusão e a modificação de arquivos no local. Além disso, há suporte para atualizações de Namespace de Arquivo, ou seja, operações de criação/exclusão, renomeação e movimentação de diretório.

  • 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 Transact-SQL afetam o mesmo arquivo ou diretório na hierarquia.

Lendo arquivos e diretórios em uma FileTable

A semântica de isolamento de leitura confirmada é imposta no SQL Server para todas as operações de acesso de E/S de arquivos no fluxo e nos dados de atributos.

Gravando e atualizando arquivos e diretórios em uma FileTable

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

  • Todas as atualizações no local/de streaming de E/S de arquivos têm suporte para a FileTable.

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

Excluindo arquivos e diretórios em uma FileTable

Toda a semântica da API de E/S de arquivos do Windows é imposta ao excluir um arquivo ou diretório.

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

  • A exclusão de um arquivo ou diretório remove a linha correspondente da FileTable. Isso é equivalente a excluir a linha por meio de uma operação Transact-SQL.

Operações do sistema de arquivos com suporte

As FileTables oferecem suporte a APIs do sistema de arquivos relacionadas às seguintes operações do sistema de arquivos:

  • Gerenciamento de diretórios

  • Gerenciamento de arquivos

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

  • Gerenciamento de disco

  • Gerenciamento de volume

  • NTFS transacional

Considerações adicionais sobre acesso de E/S a arquivos para 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 a dados FILESTREAM ou FileTable por meio das 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 Always On (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 fazer atualizações parciais in-loco para o conteúdo FILESTREAM. Esse comportamento é diferente do acesso transacionado ao FILESTREAM por meio de um identificador obtido com uma chamada a OpenSQLFILESTREAM() e transmissão de um contexto de transação explícita.

Semântica transacional

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

  • Como o acesso não transacionado aos dados FILESTREAM em uma FileTable não é associado a qualquer transação, ele não tem semântica de isolamento específica. Porém, o SQL Server pode usar transações internas para impor semântica de bloqueio ou simultaneidade nos dados da FileTable. Qualquer transação interna desse tipo é realizada com isolamento de confirmação de leitura.

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

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

Entretanto, a coluna FILESTREAM em uma FileTable também pode ser acessada com por acesso transacional ao FILESTREAM com uma chamada a OpenSqlFileStream() . Esse tipo de acesso pode ser totalmente transacional e respeitará todos os níveis de transacionais consistentemente com suporte atualmente.

Controle de simultaneidade

SQL Server impõe o controle de simultaneidade para acesso fileTable entre aplicativos do sistema de arquivos e entre aplicativos do sistema de arquivos e aplicativos Transact-SQL. Esse controle de simultaneidade é obtido aplicando-se os bloqueios apropriados nas linhas da FileTable.

Gatilhos

A criação, modificação ou exclusão de arquivos ou diretórios, ou seus atributos, pelo sistema de arquivos resultará em operações de inserção, atualização ou exclusão correspondentes na FileTable. Todos os gatilhos DML transact-SQL associados são disparados como parte dessas operações.

Funcionalidade do sistema de arquivos com suporte em FileTables

Funcionalidade Com suporte Comentários
Oplocks Sim Há 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 dispersão 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 oferece suporte a arquivos esparsos encaminhando as solicitações ao sistema de arquivos NTFS.
Compactação Sim
Criptografia 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 ao sistema de arquivos NTFS.
Arquivos mapeados na 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 USN Não As alterações de metadados em arquivos e diretórios de uma FileTable são operações DML em um banco de dados do SQL Server . Portanto, elas são registradas em log no arquivo de log de banco de dados correspondente. Entretanto, não são registradas no diário NTFS USN (com exceção de alterações de tamanho).

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, funções, procedimentos armazenados e exibições de FileTable