Partilhar via


Aceder às FileTables com APIs de arquivo Input-Output

Aplica-se a:SQL Server

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

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

Espera-se que o uso principal de FileTables seja por meio do sistema de arquivos do Windows e APIs de E/S de arquivos. FileTables suporta acesso não transacional através do rico conjunto de APIs de E/S de arquivos 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 suportada, como CreateFile() ou CreateDirectory(), para criar ou abrir um arquivo e obter um identificador. O identificador pode ser usado para transmitir dados, enumerar ou organizar diretórios, obter ou definir atributos de arquivo, 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 são suportados. Isso inclui a criação de arquivos, exclusão e modificação no local. Também são suportadas atualizações de File Namespace, ou seja, operações de criação/exclusão de diretório, renomeação e movimentação.

  • 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, esta coluna é null.

  • Para arquivos, a coluna is_directory contém falso . Para diretórios, esta coluna contém verdadeiro.

  • O compartilhamento e a simultaneidade de 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 a ficheiros em dados de fluxo e atributos.

Escrevendo 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 não são transacionais. Ou seja, nenhuma transação do SQL Server está vinculada a essas operações e nenhuma garantia ACID é fornecida.

  • Todas as operações de streaming/atualizações no local de E/S de arquivo são suportadas 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 atributos de file_stream e arquivo correspondentes na FileTable.

Excluindo arquivos e diretórios em uma FileTable

Todas as semânticas da API de E/S do Windows são impostas quando você exclui 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 equivale a excluir a linha por meio de uma operação Transact-SQL.

Operações de sistema de arquivos suportadas

FileTables suporta as APIs do sistema de arquivos relacionadas às seguintes operações do sistema de arquivos:

  • Gestão de Diretórios

  • Gestão de Ficheiros

FileTables não suportam as seguintes operações:

  • Gerenciamento de disco

  • Gerenciamento de volumes

  • NTFS transacional

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

Usando nomes de rede virtual (VNNs) com grupos de disponibilidade Always On

Quando o banco de dados que contém dados FILESTREAM ou FileTable pertence a um grupo de disponibilidade Always On, todo o acesso a 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 Always On (SQL Server).

Atualizações parciais

Um identificador gravável obtido para dados de um FILESTREAM em uma FileTable, usando a função GetFileNamespacePath (Transact-SQL), pode ser utilizado para realizar atualizações parciais diretamente no conteúdo 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 nenhuma transação de usuário e têm as seguintes características adicionais:

  • Como o acesso não transacionado a 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 semântica de bloqueio ou simultaneidade nos dados FileTable. Todas as transações internas desse tipo são feitas com isolamento de leitura confirmada.

  • 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 arquivos 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 transacional FILESTREAM chamando OpenSqlFileStream(). Este tipo de acesso pode ser totalmente transacional e respeitará consistentemente todos os níveis de transacionalidade atualmente suportados.

Controle de Concorrência

O 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. Este controlo de concorrência é obtido usando bloqueios apropriados nas linhas da FileTable.

Gatilhos

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

Funcionalidade do sistema de arquivos suportada em FileTables

Capacidade Suportado Observações
Oplocks Sim Há suporte para oplocks de Nível 2, Nível 1, Batch e Filter.
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 apenas em arquivos e afeta o armazenamento do fluxo de dados. Como os dados FILESTREAM são armazenados em volumes NTFS, o recurso FileTable suporta arquivos esparsos encaminhando as solicitações para o sistema de arquivos NTFS.
Compressão Sim
Encriptação Sim
TxF Não
Identificadores de ficheiro Não
Id de objeto Não
Ligações simbólicas Não
Links rígidos 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 I/O Sim
Segurança Não A segurança ao nível de partilha do Windows e a segurança ao nível de tabela e coluna do SQL Server são aplicadas.
Diário da USN Não As 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 do banco de dados correspondente. No entanto, eles não são registados no diário USN NTFS, exceto quando há alterações no tamanho.

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

Ver também

Carregar arquivos em FileTables
Trabalhar com diretórios e caminhos em FileTables
Tabelas de arquivos do Access com Transact-SQL
DDL FileTable, funções, procedimentos armazenados e visualizações