Accéder aux FileTables avec les API d'E/S de fichier

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

Dans cette rubrique

Je souhaite…

  • Commencer à utiliser les API d'E/S de fichier avec des FileTables

  • Créer des fichiers et des répertoires dans un FileTable

  • Lire des fichiers et des répertoires dans un FileTable

  • Mettre à jour des fichiers et des répertoires dans un FileTable

  • Supprimer des fichiers et des répertoires dans un FileTable

En savoir plus

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

  • Éléments supplémentaires à prendre en considération pour l'accès d'E/S de fichier aux FileTables

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

    • Mises à jour partielles

    • Sémantique transactionnelle

    • Contrôle d'accès concurrentiel

    • Déclencheurs

  • Fonctionnalités de système de fichiers prises en charge dans les FileTables

Commencer à utiliser les API d'E/S de fichier avec des FileTables

Les FileTables sont principalement utilisés 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 le vaste ensemble d'API d'E/S de fichier disponibles.

  1. L'accès aux API d'E/S de fichier commence en général par l'acquisition d'un chemin d'accès 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 d'accès logique du fichier ou du répertoire. Pour plus d'informations, consultez Travailler avec des répertoires et des chemins d'accès dans FileTables.

  2. L'application utilise ensuite ce chemin d'accès logique pour obtenir un handle de fichier ou de répertoire et effectuer une action à l'aide de l'objet. Le chemin d'accès peut être passé à toute fonction API du système de fichiers prise en charge, par exemple CreateFile() ou CreateDirectory(), pour créer ou ouvrir un fichier et obtenir un handle. Le handle peut ensuite être utilisé pour créer un flux de données, énumérer ou organiser les répertoires, obtenir ou définir des attributs de fichier, supprimer des fichiers ou des répertoires, etc.

[Haut de la page]

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

Il est possible de créer un fichier ou un répertoire dans un FileTable en appelant les API d'E/S de fichier, telles que CreateFile ou CreateDirectory.

  • Tous les indicateurs de création de disposition, 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 de fichiers. Les mises à jour de l'espace de noms de fichier sont également prises en charge ; en d'autres termes les opérations de création/suppression, de changement de nom et de déplacement de répertoire sont prises en charge.

  • La création d'un fichier ou 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 alors que pour les répertoires, cette colonne est Null.

  • Pour les fichiers, la colonne is_directory contient la valeur 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 de fichier ou opérations Transact-SQL simultanées affectent le même fichier ou répertoire dans la hiérarchie.

[Haut de la page]

Lecture de fichiers et de répertoires dans un FileTable

Une sémantique d'isolation de lecture validée (READ COMMITTED) est appliquée dans SQL Server pour toutes les opérations d'accès d'E/S de fichier sur les données de flux et les données d'attribut.

[Haut de la page]

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

  • Toutes les opérations d'écriture ou de mise à jour d'E/S de fichier sur un FileTable sont non transactionnelles. En d'autres termes, aucune transaction SQL Server n'est liée à ces opérations et aucune garantie ACID n'est fournie.

  • L'ensemble des mises à jour sur place/accès en continu d'E/S de fichier est pris en charge pour le FileTable.

  • Les mises à jour d'attributs ou de données FILESTREAM via des API d'E/S de fichier se traduisent par des mises à jour des colonnes d'attributs file_stream et de fichiers correspondantes dans le FileTable.

[Haut de la page]

Suppression de fichiers et de répertoires dans un FileTable

Toute la sémantique des API d'E/S de fichier Windows est appliquée lorsque vous supprimez un fichier ou un répertoire.

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

  • La suppression d'un fichier ou d'un répertoire entraîne la suppression de la ligne correspondante dans le FileTable. Cela équivaut à supprimer la ligne via une opération Transact-SQL.

[Haut de la page]

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

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

  • Gestion des répertoires

  • Gestion des fichiers

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

  • Gestion des disques

  • Gestion des volumes

  • NTFS transactionnel

[Haut de la page]

Éléments supplémentaires à prendre en considération pour l'accès d'E/S de fichier aux FileTables

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

Lorsque la base de données qui contient FILESTREAM ou des données FileTable appartient à un groupe de disponibilité AlwaysOn, tous les accès à FILESTREAM ou aux données FileTable via les API du système de fichiers doivent utiliser des VNN à la place des noms d'ordinateur. Pour plus d'informations, consultez FILESTREAM et FileTable avec groupes de disponibilité AlwaysOn (SQL Server).

Mises à jour partielles

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

[Haut de la page]

Sémantique transactionnelle

Lorsque vous accédez aux fichiers d'un FileTable à l'aide des API d'E/S de fichier, ces opérations ne sont pas associées à des transactions utilisateur. Elles présentent les caractéristiques supplémentaires suivantes :

  • Dans la mesure où l'accès non transactionnel aux données FILESTREAM dans un FileTable n'est pas associé à une transaction, il n'a pas de sémantique d'isolation spécifique. Toutefois SQL Server peut utiliser des transactions internes pour appliquer une sémantique de verrouillage ou de concurrence aux données de FileTable. Toutes les transactions internes de ce type sont effectuées avec une isolation de lecture validée (READ COMMITTED).

  • Il n'existe aucune garantie ACID pour ces opérations non transactionnelles sur des données FILESTREAM. Les garanties de cohérence sont semblables à 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, il est également possible d'accéder à la colonne FILESTREAM d'un FileTable à l'aide de l'accès transactionnel FILESTREAM en appelant OpenSqlFileStream(). Ce type d'accès peut être entièrement transactionnel et respecte tous les niveaux de cohérences transactionnelles actuellement pris en charge.

[Haut de la page]

Contrôle d'accès concurrentiel

SQL Server applique le contrôle d'accès concurrentiel pour l'accès de FileTable parmi les applications de système de fichiers, ainsi qu'entre applications de système de fichiers et applications Transact-SQL. Ce contrôle d'accès concurrentiel s'effectue en prenant des verrous appropriés sur les lignes FileTable.

[Haut de la page]

Déclencheurs

La création, la modification ou la suppression de fichiers, de répertoires ou de leurs attributs via le système de fichiers se traduit par les opérations d'insertion, de mise à jour ou de suppression correspondantes dans le FileTable. Tous les déclencheurs DML Transact-SQL associés sont déclenchés dans le cadre de ces opérations.

[Haut de la page]

Fonctionnalités de système de fichiers prises en charge dans les FileTables

Fonctionnalité

Prise en charge

Commentaires

Oplocks

Oui

La prise en charge du niveau 2, du niveau 1, des oplocks Lot et Filtre est assurée.

Attributs étendus

Non

Points d'analyse

Non

ACL persistants

Non

Flux nommés

Non

Fichiers partiellement alloués

Oui

Le caractère éparse ne peut être défini que sur les fichiers et affecte le stockage du flux de données. Dans la mesure où les données FILESTREAM sont stockées sur des volumes NTFS, la fonctionnalité FileTable prend en charge les fichiers partiellement alloués en envoyant les demandes au système de fichiers NTFS.

Compression

Oui

Chiffrement

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 passées au système de fichiers NTFS.

Fichiers mappés en mémoire

Non

Annulation d'entrées/sorties

Oui

Sécurité

Non

La sécurité au niveau du partage Windows et la sécurité au niveau table/colonne 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, elles sont journalisées dans le fichier journal de base de données correspondant. En revanche, elles ne sont pas consignées dans le journal USN NTFS (à l'exception des modifications de taille).

Les fonctionnalités de suivi des modifications SQL Server permettent d'obtenir des informations similaires.

[Haut de la page]

Voir aussi

Concepts

Charger des fichiers dans FileTables

Travailler avec des répertoires et des chemins d'accès dans FileTables

Accéder aux FileTables avec Transact-SQL

DDL, fonctions, procédures stockées et vues FileTable