Compatibilité de FileTable avec d’autres fonctionnalités SQL Server

S’applique à :SQL Server

Décrit le fonctionnement de FileTables avec d'autres fonctionnalités de SQL Server.

Groupes de disponibilité Always On et FileTables

Lorsque la base de données qui contient des données FILESTREAM ou FileTable appartient à un groupe de disponibilité Always On :

  • La fonctionnalité FileTable est partiellement prise en charge par les groupes de disponibilité Always On. Après un basculement, les données FileTable sont accessibles sur le réplica principal, mais les données FileTable ne sont pas accessibles sur les réplicas secondaires lisibles.

    Remarque

    Après un basculement, toutes les fonctionnalités FILESTREAM sont prises en charge. Les données FILESTREAM sont accessibles à la fois sur les réplicas secondaires avec accès en lecture et sur le nouveau réplica principal.

  • Les fonctions FILESTREAM et FileTable acceptent ou retournent des noms de réseau virtuel (VNN) à la place de noms d'ordinateur. Pour plus d’informations sur ces fonctions, consultez FILESTREAM et FileTable Functions (Transact-SQL).

  • 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 Utiliser FILESTREAM et FileTable avec des groupes de disponibilité Always On.

Partition et FileTables

Le partitionnement n’est pas pris en charge sur FileTables. Avec la prise en charge de plusieurs groupes de fichiers FILESTREAM, les problèmes de montée en puissance parallèle purs peuvent être gérés sans avoir recours au partitionnement dans la plupart des cas (contrairement à FILESTREAM de SQL 2008).

Réplication et FileTables

La réplication et les fonctionnalités associées (notamment la réplication transactionnelle, la réplication de fusion, la capture de données modifiées et le suivi des modifications) ne sont pas prises en charge avec FileTables.

Sémantique des transactions et FileTables

applications Windows

Les applications Windows ne comprennent pas les transactions de base de données. Par conséquent, les opérations d’écriture Windows ne fournissent pas les propriétés ACID d’une transaction de base de données. Par conséquent, les restaurations transactionnelles et la récupération ne sont pas possibles avec les opérations de mise à jour Windows.

Applications Transact-SQL

Pour les applications Transact-SQL travaillant sur la colonne FILESTREAM (file_stream) dans un FileTable, la sémantique d’isolation est identique à celle du type de données FILESTREAM dans une table utilisateur régulière.

Notifications de requête et FileTables

La requête ne peut pas contenir de référence à la colonne FILESTREAM dans fileTable, dans la clause WHERE ou toute autre partie de la requête.

SELECT INTO et FileTables

Les instructions SELECT INTO d’un FileTable ne propagent pas la sémantique FileTable sur la table de destination créée (comme les colonnes FILESTREAM dans une table régulière). Toutes les colonnes de table de destination se comportent comme des colonnes normales. Ils n’ont aucune sémantique FileTable associée.

Déclencheurs et FileTables

Déclencheurs DDL (langage de définition de données)

Il n'y a pas d'éléments spéciaux à prendre en considération pour les déclencheurs DDL utilisés avec les FileTables. Les déclencheurs DDL normaux se déclenchent pour les opérations Create/Alter Database, ainsi que pour les opérations CREATE/ALTER TABLE pour Les FileTables. Les déclencheurs peuvent récupérer les données d'événement réelles, notamment le texte de la commande DDL et d'autres informations en appelant la fonction EVENTDATA(). Aucun nouvel événement ou changement n'a été apporté au schéma Eventdata existant.

Déclencheurs DML (langage de manipulation de données)

Ces restrictions sont appliquées pendant l’opération DDL pour créer des déclencheurs.

  • Les FileTables ne prennent pas en charge les déclencheurs INSTEAD OF pour les opérations DML. Il s'agit d'une restriction existante sur toutes les tables qui contiennent des colonnes FILESTREAM.

  • FileTables prend en charge les déclencheurs AFTER pour les opérations DML.

  • Les déclencheurs définis sur un FileTable ne peuvent pas mettre à jour de FileTables (y compris le FileTable parent). Cette restriction existe principalement pour empêcher un déclencheur d'entrer en conflit de verrouillage avec les verrous maintenus par l'accès au système de fichiers dans la même transaction.

Accès non transactionnel et ses effets sur les déclencheurs

  • Lorsqu'un accès de mise à jour non transactionnel est autorisé dans une base de données, il est possible d'effectuer une mise à jour sur place des données FILESTREAM dans toutes les tables, notamment un FileTable dans cette base de données. En raison de cette possibilité, l'image Avant du contenu FILESTREAM risque de ne pas être disponible pour le déclencheur.

  • Pour les opérations de mise à jour non transactionnelles via le système de fichiers, SQL Server crée une transaction interne pour capturer l’opération CloseHandle et tous les déclencheurs DML définis peuvent être déclenchés dans le cadre de cette transaction. Une restauration de cette transaction à l’intérieur du corps du déclencheur, bien qu’elle n’ait pas été empêchée, ne restaure pas les modifications apportées à FILESTREAM. Cette restauration peut également empêcher l'activation des déclencheurs de mise à jour, bien que le contenu FILESTREAM soit modifié.

  • En plus de ces impacts, les déclencheurs sur les FileTables doivent gérer quelques comportements supplémentaires :

    • Avec les opérations de mise à jour non transactionnelles sur FileTable via le système de fichiers, il est possible que le contenu FILESTREAM soit verrouillé exclusivement par d’autres opérations Win32 et ne soit pas accessible en lecture/écriture via le corps du déclencheur. Dans ce cas, toute tentative d’accès au contenu FILESTREAM dans le corps du déclencheur peut provoquer une erreur de violation de partage. Les déclencheurs doivent être conçus pour gérer ces erreurs convenablement.

    • L’image AFTER du FILESTREAM peut ne pas être stable, car dans certains cas, elle peut être écrite activement par d’autres mises à jour non transactionnelles en même temps (en raison des modes de partage autorisés dans l’accès au système de fichiers).

  • L’arrêt anormal des handles Win32, comme le meurtre explicite de handles Win32 par un administrateur OU un plantage de base de données, n’exécutez pas de déclencheurs utilisateur pendant les opérations de récupération, même si le contenu FILESTREAM a peut-être été modifié par l’application Win32 interrompue anormalement.

Vues et FileTables

Vues

Une vue peut être créée sur un FileTable comme sur toute autre table. Toutefois, les considérations suivantes s'appliquent à une vue créée sur un FileTable :

  • Les vues ne peuvent pas avoir de sémantique FileTable. Autrement dit, les colonnes de l’affichage (y compris les colonnes d’attribut de fichier) se comportent comme des colonnes d’affichage normales sans sémantique spéciale et la même chose est vraie pour les lignes représentant des fichiers/répertoires.

  • Les vues peuvent être mises à jour en fonction de la sémantique « vue pouvant être mise à jour », mais les contraintes de table sous-jacentes peuvent rejeter les mises à jour comme dans la table.

  • Le chemin d’accès d’un fichier peut être visualisées dans la vue en l’ajoutant en tant que colonne explicite dans la vue. Par exemple :

    CREATE VIEW MP3FILES AS SELECT column1, column2, ..., GetFileNamespacePath() AS PATH, column3,... FROM Documents

Vues indexées

Actuellement, les vues indexées ne peuvent pas inclure de colonnes FILESTREAM ou de colonnes calculées/persistantes qui dépendent des colonnes FILESTREAM. Ce comportement reste également inchangé avec les vues définies sur le FileTable.

Isolation des instantanés et FileTables

L’isolation d’instantané validée (RCSI) et l’isolation d’instantané (SI) reposent sur la possibilité d’avoir une instantané des données disponibles pour les lecteurs, même lorsque des opérations de mise à jour se produisent sur les données. Cependant, les FileTables autorisent l'accès en écriture non transactionnel aux données FILESTREAM. Par conséquent, les restrictions suivantes s’appliquent à ces fonctionnalités dans les bases de données qui contiennent des FileTables :

  • Une base de données qui contient des FileTables peut être modifiée pour activer l'isolement RCSI/SI.

  • Lorsque l'accès non_transactional est défini sur FULL pour la base de données, une transaction s'exécutant sous RCSI ou SI a le comportement suivant :

    • Toutes les lectures Transact-SQL de la colonne FileTable file_stream échouent. INSERT et UPDATE sur la colonne réussissent toujours, tant qu’ils ne lisent pas à partir de la colonne file_stream.

    • Si l’instruction Transact-SQL spécifie des indicateurs de table READCOMMITTEDLOCK, les lectures réussissent et prennent des verrous sur les lignes, au lieu d’utiliser le contrôle de version des lignes.

    • Les requêtes d'ouverture du FileStream Win32 transactionnel échouent également.

    • L'accès à FileTable Win32 non transactionnel aboutit. Toutes les requêtes internes effectuées par FileTable ne sont pas affectées.

    • L'indexation de texte intégral réussit toujours, quelles que soient les options de base de données (READ_COMMITTED_SNAPSHOT ou ALLOW_SNAPSHOT_ISOLATION).

Réplicas secondaires accessibles en lecture

Les mêmes remarques s'appliquent aux bases de données secondaires accessibles en lecture et aux instantanés, comme décrit dans la section précédente, Isolement de capture instantanée et FileTables.

Bases de données autonomes et FileTables

La fonctionnalité FILESTREAM, de laquelle la fonctionnalité FileTable dépend, requiert une configuration spécifique hors de la base de données. Par conséquent, une base de données qui utilise FILESTREAM ou FileTable n’est pas entièrement autonome.

Vous pouvez définir l’autonomie de la base de données sur PARTIAL si vous souhaitez utiliser certaines fonctionnalités des bases de données autonomes, telles que les utilisateurs autonomes. Dans ce cas, toutefois, certains des paramètres de base de données ne sont pas contenus dans la base de données et ne sont pas déplacés automatiquement lorsque la base de données se déplace.