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

Les données FILESTREAM figurant 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 de SQL Server :

  • SQL Server Integration Services (SSIS)

  • Requêtes distribuées et serveurs liés

  • Chiffrement

  • Instantanés de base de données

  • Réplication

  • Envoi de journaux

  • Mise en miroir de bases de données

  • Indexation de texte intégral

  • Clustering de basculement

  • SQL Server Express

  • Bases de données à relation contenant-contenu

SQL Server Integration Services (SSIS)

SQL Server Integration Services (SSIS) gère les données FILESTREAM dans le flux de données comme toutes les autres données BLOB en utilisant le type de données SSIS DT_IMAGE.

Vous pouvez utiliser la transformation d'importation de colonne pour charger des fichiers du système de fichiers dans une colonne FILESTREAM. Vous pouvez également utiliser la transformation d'exportation de colonne pour extraire des fichiers d'une colonne FILESTREAM à un autre emplacement dans le système de fichiers.

Requêtes distribuées et serveurs liés

Vous pouvez utiliser des données FILESTREAM dans vos requêtes distribuées et sur les serveurs liés en les traitant comme des données varbinary (max). Vous ne pouvez pas utiliser la fonction FILESTREAM PathName() dans les requêtes distribuées qui utilisent un nom en quatre parties, même lorsque le nom fait référence au serveur local. En revanche, vous pouvez utiliser PathName() dans la requête interne d'une requête directe qui utilise OPENQUERY().

Chiffrement

Les données FILESTREAM ne sont pas chiffrées, même lorsque le chiffrement transparent des données est activé.

Instantanés de base de données

SQL Server ne prend pas en charge les instantanés 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 instantanés 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 instantanés de base de données.

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

Could not continue scan with NOLOCK due to data movement.

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. 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, sauf si vous répliquez des données vers 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 spécifiée.

[!REMARQUE]

La réplication de grandes valeurs de données à partir d'Abonnés SQL Server 2012 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.

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

      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 de définir @stream\_blob\_columns sur false. 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écuter une requête avec une recherche en texte intégral, Configurer et gérer des filtres pour la recherche 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é.

Clustering de basculement

Pour le clustering 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 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 10 Go n'inclut pas le conteneur de données FILESTREAM.

Bases de données à relation contenant-contenu

La fonctionnalité FILESTREAM 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 contenue.

Vous pouvez définir la relation contenant-contenu de la base de données sur PARTIAL si vous souhaitez utiliser certaines fonctionnalités des bases de données à relation contenant-contenu, telles que les utilisateurs contenus. Dans ce cas, toutefois, vous devez savoir qu'une partie des paramètres de la base de données ne sont pas contenus dans la base de données et ne sont pas automatiquement déplacés avec celle-ci.

Voir aussi

Concepts

Données blob (Binary Large Object) (SQL Server)