Partager via


Accéder aux FileTables avec les API de fichiers Input-Output

Décrit le fonctionnement des E/S du système de fichiers sur un FileTable.

Introduction aux API d’E/S de fichiers avec FileTables

L’utilisation principale des FileTables est censée être via le système de fichiers Windows et les API d’E/S de fichier. Les FileTables prennent en charge l’accès non transactionnel via l’ensemble complet d’API d’E/S de fichier disponibles.

  1. L’accès à l’API d’E/S de fichier commence généralement par acquérir un chemin UNC logique pour le fichier ou le répertoire. Les applications peuvent utiliser une instruction Transact-SQL avec la fonction GetFileNamespacePath (Transact-SQL) pour obtenir le chemin logique du fichier ou du répertoire. Pour plus d'informations, consultez Work with Directories and Paths in FileTables.

  2. Ensuite, l’application utilise ce chemin logique pour obtenir un handle dans le fichier ou le répertoire et faire quelque chose avec l’objet. Le chemin d’accès peut être transmis à n’importe quelle fonction d’API de système de fichiers prise en charge, telle que CreateFile() ou CreateDirectory(), pour créer ou ouvrir un fichier et obtenir un handle. Le handle peut ensuite être utilisé pour diffuser en continu des données, énumérer ou organiser des répertoires, obtenir ou définir des attributs de fichier, pour supprimer des fichiers ou des répertoires, etc.

Création de fichiers et de répertoires dans un FileTable

Vous pouvez créer un fichier ou un répertoire dans un FileTable en appelant des API d’E/S de fichier telles que CreateFile ou CreateDirectory.

  • Tous les indicateurs de disposition de création, les modes de partage et les modes d’accès sont pris en charge. Cela inclut la création, la suppression et la modification sur place des fichiers. Les mises à jour de l’espace de noms de fichiers sont également prises en charge, c’est-à-dire la création/suppression de répertoires, le renommage et les opérations de déplacement.

  • La création d’un fichier ou d’un répertoire correspond à la création d’une ligne dans le FileTable sous-jacent.

  • Pour les fichiers, les données de flux sont stockées dans la colonne file_stream ; pour les répertoires, cette colonne a la valeur Null.

  • Pour les fichiers, la colonne is_directory contient false. Pour les répertoires, cette colonne contient la valeur true.

  • Le partage et la concurrence d’accès sont appliqués lorsque plusieurs opérations d’E/S simultanées ou Transact-SQL affectent le même fichier ou répertoire dans la hiérarchie.

Lecture de fichiers et de répertoires dans un FileTable

La sémantique d’isolation de lecture validée est appliquée dans SQL Server pour toutes les opérations d’accès aux E/S des fichiers sur les flux et les données d'attributs.

Écriture et mise à jour de fichiers et de répertoires dans un FileTable

  • Toutes les opérations d’écriture ou de mise à jour des E/S de fichier sur un FileTable ne sont pas transactionnelles. Autrement dit, aucune transaction SQL Server n’est liée à ces opérations, et aucune garantie ACID n’est fournie.

  • Toutes les mises à jour des E/S de fichiers en continu/sur place sont prises en charge pour FileTable.

  • Les mises à jour apportées aux données ou attributs FILESTREAM par le biais d’API d’E/S de fichier entraînent des mises à jour des colonnes d’attributs de fichier et de file_stream correspondantes dans FileTable.

Suppression de fichiers et de répertoires dans un FileTable

Toutes les sémantiques d’API d’E/S de fichier Windows sont appliquées lorsque vous supprimez un fichier ou un répertoire.

  • La suppression d’un répertoire échoue si le répertoire contient des sous-répertoires de fichiers.

  • La suppression d’un fichier ou d’un répertoire supprime la ligne correspondante de FileTable. Cela équivaut à supprimer la ligne via une opération de Transact-SQL.

Opérations de système de fichiers prises en charge

Les FileTables prennent en charge les API du système de fichiers liées aux opérations de système de fichiers suivantes :

  • Gestion d’annuaires

  • Gestion des fichiers

Les FileTables ne prennent pas en charge les opérations suivantes :

  • Gestion des disques

  • Gestion des volumes

  • NTFS transactionnel

Considérations supplémentaires relatives à l'accès aux E/S de fichiers aux FileTables

Utilisation de noms de réseau virtuel (VNN) avec des groupes de disponibilité AlwaysOn

Lorsque la base de données qui contient des données FILESTREAM ou FileTable appartient à un groupe de disponibilité AlwaysOn, tous les accès aux données FILESTREAM ou FileTable via les API du système de fichiers doivent utiliser des réseaux virtuels plutôt que des noms d’ordinateurs. Pour plus d’informations, consultez FILESTREAM et FileTable avec des groupes de disponibilité AlwaysOn (SQL Server).

Mises à jour partielles

Un handle accessible en écriture obtenu pour les données FILESTREAM dans un FileTable à l’aide de la fonction GetFileNamespacePath (Transact-SQL) peut être utilisé pour effectuer des mises à jour partielles sur place du contenu FILESTREAM. Ce comportement diffère de l’accès FILESTREAM traité via un handle obtenu en appelant OpenSQLFILESTREAM() et en passant un contexte de transaction explicite.

Sémantique transactionnelle

Lorsque vous accédez aux fichiers d’un FileTable à l’aide d’API d’E/S de fichier, ces opérations ne sont associées à aucune transaction utilisateur et présentent les caractéristiques supplémentaires suivantes :

  • Étant donné que l’accès non transactionnel aux données FILESTREAM dans un FileTable n’est associé à aucune transaction, il n’a aucune sémantique d’isolation spécifique. Toutefois, SQL Server peut utiliser des transactions internes pour appliquer la sémantique de verrouillage ou de concurrence sur les données FileTable. Toutes les transactions internes de ce type sont effectuées avec l’isolation validée en lecture.

  • Il n’existe aucune garantie ACID pour ces opérations non traitées sur les données FILESTREAM. Les garanties de cohérence sont similaires à celles des mises à jour de fichiers effectuées par les applications dans le système de fichiers.

  • Ces modifications ne peuvent pas être restaurées.

Toutefois, la colonne FILESTREAM d’un FileTable est également accessible avec l’accès FILESTREAM transactionnel en appelant OpenSqlFileStream(). Ce type d’accès peut être entièrement transactionnel et respectera de manière cohérente tous les niveaux transactionnels qui sont actuellement pris en charge.

Contrôle d’accès concurrentiel

SQL Server applique le contrôle d’accès concurrentiel pour l’accès FileTable entre les applications de système de fichiers et entre les applications de système de fichiers et les applications Transact-SQL. Ce contrôle d’accès concurrentiel est obtenu en prenant les verrous adéquats sur les lignes de la table de fichiers.

Déclencheurs

La création, la modification ou la suppression de fichiers ou de répertoires ou de leurs attributs via le système de fichiers entraîne des opérations d’insertion, de mise à jour ou de suppression correspondantes dans fileTable. Tous les déclencheurs DML associés Transact-SQL sont déclenchés dans le cadre de ces opérations.

Fonctionnalité de système de fichiers prise en charge dans FileTables

Capacité Soutenu Commentaires
Oplocks Oui La prise en charge est disponible pour les verrous de niveau 2, niveau 1, traitement par lots et filtre.
Attributs étendus Non
Reparse Points Non
Listes de contrôle d’accès persistantes Non
Streams désignés Non
Fichiers clairsemés Oui La parcimonie ne peut être définie que sur les fichiers et affecte le stockage du flux de données. Étant donné que les données FILESTREAM sont stockées sur des volumes NTFS, la fonctionnalité FileTable prend en charge les fichiers clairsemés en transférant les requêtes au système de fichiers NTFS.
Compression Oui
Encryptiion Oui
TxF Non
ID de fichier Non
ID d’objet Non
Liens symboliques Non
Liens physiques Non
Noms courts Non
Notifications de modification de répertoire Non
Verrouillage de plage d’octets Oui Les demandes de verrouillage de plage d’octets sont transmises au système de fichiers NTFS.
Fichiers mappés en mémoire Non
Annuler les E/S Oui
Sécurité Non La sécurité au niveau du partage Windows et la sécurité au niveau des tables et des colonnes SQL Server sont appliquées.
Journal USN Non Les modifications de métadonnées apportées aux fichiers et répertoires d’un FileTable sont des opérations DML sur une base de données SQL Server. Par conséquent, ils sont enregistrés dans le fichier journal de base de données correspondant. Toutefois, ils ne sont pas enregistrés dans le journal NTFS USN (à l’exception des modifications de taille).

Les fonctionnalités de suivi des modifications SQL Server peuvent être utilisées pour capturer des informations similaires.

Voir aussi

Charger des fichiers dans FileTables
Utiliser des répertoires et des chemins d’accès dans FileTables
Accéder aux FileTables avec Transact-SQL
FileTable DDL, Functions, Procédures stockées et vues