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

S’applique à :SQL Server

Étant donné que les données FILESTREAM se situent dans le système de fichiers, cette rubrique fournit des considérations, des instructions et des limitations relatives à l’utilisation de FILESTREAM avec les fonctionnalités suivantes dans SQL Server :

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 quand 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 - <Boîte de dialogue Article> ou 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 (9.x). La réplication de tables qui ont des colonnes FILESTREAM vers les abonnés SQL Server 2000 (8.x) n’est pas prise en charge, quelle que soit l’option de schéma spécifiée.

Note

La réplication de valeurs de données volumineuses de SQL Server vers SQL Server 2005 (9,x) Abonnés est limitée à un maximum de 256 Mo de valeurs de données. 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 la valeur 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, le 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 transactions

Lacopie des journaux de transaction prend en charge FILESTREAM. Les serveurs principaux et secondaires doivent exécuter SQL Server 2008 (10.0.x) ou une version ultérieure et avoir FILESTREAM 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 Requête avec 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 autonomes

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

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