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.
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.
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