Utilisation de FILESTREAM avec d'autres fonctionnalités SQL Server

Les données FILESTREAM étant dans le système de fichiers, cette rubrique fournit quelques considérations, indications et limitations relatives à l'utilisation de FILESTREAM avec les fonctionnalités suivantes dans SQL Server :

  • Captures instantanées de base de données

  • Réplication

  • Copie des journaux de transaction

  • Mise en miroir de bases de données

  • Texte intégral

  • Gestion des clusters de basculement

  • SQL Server Express

Captures instantanées de base de données

SQL Server ne prend pas en charge les captures instantanées de base de données pour les groupes de fichiers FILESTREAM. Si un groupe de fichiers FILESTREAM est inclus dans une clause CREATE DATABASE ON, l'instruction échoue et une erreur est levée.

Lorsque vous utilisez FILESTREAM, vous pouvez créer des captures instantanées de base de données de groupes de fichiers standard (non-FILESTREAM). Les groupes de fichiers FILESTREAM sont marqués comme hors connexion pour ces captures instantanées de base de données.

Une instruction SELECT exécutée sur une table FILESTREAM dans une capture instantanée de base de données ne doit pas inclure de colonne FILESTREAM ; autrement, le message d'erreur suivant est retourné :

Impossible de poursuivre l'analyse avec NOLOCK car les données ont été déplacées.

Réplication

Une colonne varbinary(max) qui a l'attribut FILESTREAM activé sur le serveur de publication peut être répliquée sur un abonné avec ou sans l'attribut FILESTREAM. Pour spécifier la façon dont la colonne est répliquée, utilisez la boîte de dialogue Propriétés de l'article - <Article> ou le paramètre @schema\_option de sp_addarticle ou sp_addmergearticle. Pour plus d'informations sur la façon de définir des options de schéma, consultez Procédure : spécifier des options de schéma (SQL Server Management Studio) et Procédure : spécifier des options de schéma (programmation Transact-SQL de la réplication). Les données répliquées sur une colonne varbinary(max) qui n'a pas l'attribut FILESTREAM ne doivent pas dépasser la limite de 2 Go pour ce type de données, autrement une erreur d'exécution est générée. Nous vous recommandons de répliquer l'attribut FILESTREAM, à moins que vous ne répliquiez des données sur SQL Server 2005. La réplication de tables qui possèdent des colonnes FILESTREAM sur des abonnés SQL Server 2000 n'est pas prise en charge, quelle que soit l'option de schéma définie. Pour plus d'informations sur la façon de répliquer des données sur les versions antérieures de SQL Server, consultez Utilisation de plusieurs versions de SQL Server dans une topologie de réplication.

[!REMARQUE]

La réplication de grandes valeurs de données à partir d'Abonnés SQL Server 2008 vers SQL Server 2005 est limitée à des valeurs de données de 256 Mo maximum. Pour plus d'informations, consultez Spécifications de capacité maximale.

Considérations relatives à la réplication transactionnelle

Si vous utilisez des colonnes FILESTREAM dans des tables publiées pour la réplication transactionnelle, notez les considérations suivantes :

  • Si des tables incluent des colonnes qui ont l'attribut FILESTREAM, vous ne pouvez pas utiliser de valeurs de database snapshot ou database snapshot character pour la propriété @sync\_method de sp_addpublication.

  • L'option max text repl size spécifie la quantité maximale de données qui peuvent être insérées dans une colonne publiée pour la réplication. Cette option peut être utilisée pour contrôler la taille des données FILESTREAM répliquées. Pour plus d'informations, consultez Option max text repl size.

  • Si vous spécifiez l'option de schéma pour répliquer l'attribut FILESTREAM, mais que vous filtrez la colonne uniqueidentifier requise par FILESTREAM ou que vous spécifiez qu'il ne faut pas répliquer la contrainte UNIQUE pour la colonne, la réplication ne réplique pas l'attribut FILESTREAM. La colonne est répliquée uniquement en tant que colonne varbinary(max).

Considérations relatives à la réplication de fusion

Si vous utilisez des colonnes FILESTREAM dans des tables publiées pour la réplication de fusion, notez les considérations suivantes :

  • La réplication de fusion et FILESTREAM requièrent une colonne de type de données uniqueidentifier afin d'identifier chaque ligne dans une table. La réplication de fusion ajoute automatiquement une colonne si la table n'en a pas. La réplication de fusion requiert que la propriété ROWGUIDCOL de la colonne soit définie et que la valeur par défaut soit NEWID() ou NEWSEQUENTIALID(). En plus de ces spécifications, FILESTREAM requiert qu'une contrainte UNIQUE soit définie pour la colonne. Ces exigences entraînent les conséquences suivantes :

    • Si vous ajoutez une colonne FILESTREAM à une table qui est déjà publiée pour la réplication de fusion, assurez-vous que la colonne uniqueidentifier a une contrainte UNIQUE. Si elle n'a pas de contrainte UNIQUE, ajoutez une contrainte nommée à la table dans la base de données de publication. Par défaut, la réplication de fusion publiera cette modification de schéma et elle s'appliquera à chaque base de données d'abonnement. Pour plus d'informations sur les modifications de schéma, consultez Modification du schéma dans les bases de données de publication.

      Si vous ajoutez une contrainte UNIQUE manuellement comme décrit et que vous souhaitez supprimer la réplication de fusion, vous devez d'abord supprimer la contrainte UNIQUE, sinon la suppression de réplication échouera.

    • Par défaut, la réplication de fusion utilise NEWSEQUENTIALID() car ses performances peuvent être supérieures à celles de NEWID(). Si vous ajoutez une colonne uniqueidentifier à une table qui sera publiée pour la réplication de fusion, spécifiez NEWSEQUENTIALID() comme valeur par défaut.

  • La réplication de fusion inclut une optimisation pour répliquer de grands types d'objets. Cette optimisation est contrôlée par le paramètre @stream\_blob\_columns de sp_addmergearticle. Si vous définissez l'option de schéma de façon à répliquer l'attribut FILESTREAM, la valeur de paramètre @stream\_blob\_columns a la valeur true. Cette optimisation peut être substituée en utilisant sp_changemergearticle. Cette procédure stockée vous permet d'affecter la valeur false à @stream\_blob\_columns. Si vous ajoutez une colonne FILESTREAM à une table qui est déjà publiée pour la réplication de fusion, nous vous recommandons d'affecter la valeur true à l'option en utilisant sp_changemergearticle.

  • L'activation de l'option de schéma pour FILESTREAM après qu'un article a été créé peut provoquer l'échec de la réplication si les données dans une colonne FILESTREAM dépassent 2 Go et qu'il y a un conflit pendant la réplication. Si vous pensez que cette situation surviendra, il est recommandé de supprimer et de recréer l'article de table avec l'option de schéma FILESTREAM appropriée activée au moment de la création.

  • La réplication de fusion peut synchroniser des données FILESTREAM sur une connexion HTTPS en utilisant la Synchronisation Web. Ces données ne peuvent pas dépasser la limite de 50 Mo pour la Synchronisation Web, sinon une erreur d'exécution est générée.

Copie des journaux de transaction

La copie des journaux de transaction prend en charge FILESTREAM. Les serveurs principaux et secondaires doivent exécuter SQL Server 2008, ou une version ultérieure, et FILESTREAM doit être activé.

Mise en miroir de bases de données

La mise en miroir de bases de données ne prend pas en charge FILESTREAM. Un groupe de fichiers FILESTREAM ne peut pas être créé sur le serveur principal. La mise en miroir de bases de données ne peut pas être configurée pour une base de données qui contient des groupes de fichiers FILESTREAM.

Indexation de texte intégral

L'indexation de texte intégral fonctionne avec une colonne FILESTREAM de la même façon qu'avec une colonne varbinary(max). La table FILESTREAM doit avoir une colonne qui contient l'extension de nom de fichier pour chaque objet blob FILESTREAM. Pour plus d'informations, consultez Exécution de requêtes sur des colonnes varbinary(max) et xml (Recherche en texte intégral), Filtres de recherche en texte intégral,Processus d'indexation et d'interrogation en texte intégral et sys.fulltext_document_types (Transact-SQL).

Le moteur de texte intégral indexe le contenu des objets blob FILESTREAM. L'indexation de fichiers tels que des images peut ne pas être utile. Lorsqu'un objet blob FILESTREAM est mis à jour, il est réindexé.

Gestion des clusters de basculement

Pour la gestion des clusters de basculement, les groupes de fichiers FILESTREAM doivent être mis sur un disque partagé. FILESTREAM doit être activé sur chaque nœud dans le cluster qui hébergera l'instance FILESTREAM. Pour plus d'informations, consultez Procédure : configurer FILESTREAM sur un cluster de basculement.

SQL Server Express

SQL Server Express prend en charge FILESTREAM. La limite de taille de base de données de 4 Go n'inclut pas le conteneur de données FILESTREAM.