FILESTREAM (SQL Server)FILESTREAM (SQL Server)

FILESTREAM permet aux applications SQL ServerSQL Serverde stocker des données non structurées, telles que des documents et des images, dans le système de fichiers.FILESTREAM enables SQL ServerSQL Server-based applications to store unstructured data, such as documents and images, on the file system. Les applications peuvent tirer parti des API de diffusion et des performances du système de fichiers, et en même temps maintenir la cohérence transactionnelle entre les données non structurées et les données structurées correspondantes.Applications can leverage the rich streaming APIs and performance of the file system and at the same time maintain transactional consistency between the unstructured data and corresponding structured data.

FILESTREAM intègre le Moteur de base de données SQL ServerSQL Server Database Engine avec un système de fichiers NTFS ou ReFS en stockant les données d’objet blob varbinary(max) en tant que fichiers dans le système de fichiers.FILESTREAM integrates the Moteur de base de données SQL ServerSQL Server Database Engine with an NTFS or ReFS file systems by storing varbinary(max) binary large object (BLOB) data as files on the file system. Transact-SQLTransact-SQL Les instructions peuvent insérer, mettre à jour, interroger, rechercher et sauvegarder des données FILESTREAM. statements can insert, update, query, search, and back up FILESTREAM data. Les interfaces de système de fichiers Win32 fournissent l'accès de diffusion en continu aux données.Win32 file system interfaces provide streaming access to the data.

FILESTREAM utilise le cache système NT pour mettre en cache les données de fichiers.FILESTREAM uses the NT system cache for caching file data. Cela aide à réduire tout effet que les données FILESTREAM peuvent avoir sur les performances du Moteur de base de donnéesDatabase Engine .This helps reduce any effect that FILESTREAM data might have on Moteur de base de donnéesDatabase Engine performance. Le pool de mémoires tampons SQL ServerSQL Server n'est pas utilisé ; par conséquent, cette mémoire est disponible pour le traitement de requête.The SQL ServerSQL Server buffer pool is not used; therefore, this memory is available for query processing.

FILESTREAM n'est pas activé automatiquement lorsque vous installez ou mettez à niveau SQL ServerSQL Server.FILESTREAM is not automatically enabled when you install or upgrade SQL ServerSQL Server. Vous devez activer FILESTREAM à l’aide du Gestionnaire de configuration SQL Server et de SQL Server Management StudioSQL Server Management Studio.You must enable FILESTREAM by using SQL Server Configuration Manager and SQL Server Management StudioSQL Server Management Studio. Pour utiliser FILESTREAM, vous devez créer ou modifier une base de données de sorte qu'elle contienne un type spécial de groupe de fichiers.To use FILESTREAM, you must create or modify a database to contain a special type of filegroup. Ensuite, créez ou modifiez une table afin qu’elle contienne une colonne varbinary(max) avec l’attribut FILESTREAM.Then, create or modify a table so that it contains a varbinary(max) column with the FILESTREAM attribute. Après avoir effectué ces tâches, vous pouvez utiliser Transact-SQLTransact-SQL et Win32 pour gérer les données FILESTREAM.After you complete these tasks, you can use Transact-SQLTransact-SQL and Win32 to manage the FILESTREAM data.

À quel moment utiliser FILESTREAMWhen to Use FILESTREAM

Dans SQL ServerSQL Server, les objets blob peuvent être des données varbinary(max) standard qui stockent les données dans des tables, ou des objets varbinary(max) FILESTREAM qui stockent les données dans le système de fichiers.In SQL ServerSQL Server, BLOBs can be standard varbinary(max) data that stores the data in tables, or FILESTREAM varbinary(max) objects that store the data in the file system. La taille et l'utilisation des données déterminent si vous devez utiliser du stockage de base de données ou du stockage de système de fichiers.The size and use of the data determines whether you should use database storage or file system storage. Si les conditions suivantes sont remplies, vous devez envisager d'utiliser FILESTREAM :If the following conditions are true, you should consider using FILESTREAM:

  • La taille des objets stockés est, en moyenne, supérieure à 1 Mo.Objects that are being stored are, on average, larger than 1 MB.

  • L'accès en lecture rapide est important.Fast read access is important.

  • Vous développez des applications qui utilisent une couche intermédiaire pour la logique d'application.You are developing applications that use a middle tier for application logic.

    Pour les plus petits objets, le stockage des objets blob varbinary(max) dans la base de données procure souvent de meilleures performances de diffusion en continu.For smaller objects, storing varbinary(max) BLOBs in the database often provides better streaming performance.

Stockage FILESTREAMFILESTREAM Storage

Le stockage FILESTREAM est implémenté en tant que colonne varbinary(max) dans laquelle les données sont stockées comme objet blob dans le système de fichiers.FILESTREAM storage is implemented as a varbinary(max) column in which the data is stored as BLOBs in the file system. Les tailles des objets blob sont limitées uniquement par la taille de volume du système de fichiers.The sizes of the BLOBs are limited only by the volume size of the file system. La limitation varbinary(max) standard de tailles de fichiers de 2 Go ne s’applique pas aux objets blob stockés dans le système de fichiers.The standard varbinary(max) limitation of 2-GB file sizes does not apply to BLOBs that are stored in the file system.

Pour spécifier qu’une colonne doit stocker des données dans le système de fichiers, spécifiez l’attribut FILESTREAM sur une colonne varbinary(max) .To specify that a column should store data on the file system, specify the FILESTREAM attribute on a varbinary(max) column. Le Moteur de base de donnéesDatabase Engine stocke alors toutes les données pour cette colonne dans le système de fichiers, mais pas dans le fichier de base de données.This causes the Moteur de base de donnéesDatabase Engine to store all data for that column on the file system, but not in the database file.

Les données FILESTREAM doivent être stockées dans des groupes de fichiers FILESTREAM.FILESTREAM data must be stored in FILESTREAM filegroups. Un groupe de fichiers FILESTREAM est un groupe de fichiers spécial qui contient des répertoires de système de fichiers au lieu des fichiers eux-mêmes.A FILESTREAM filegroup is a special filegroup that contains file system directories instead of the files themselves. Ces répertoires de système de fichiers portent le nom de conteneurs de données.These file system directories are called data containers. Les conteneurs de données sont l’interface entre le stockage du Moteur de base de donnéesDatabase Engine et le stockage du système de fichiers.Data containers are the interface between Moteur de base de donnéesDatabase Engine storage and file system storage.

Lorsque vous utilisez le stockage FILESTREAM, considérez les éléments suivants :When you use FILESTREAM storage, consider the following:

  • Lorsqu'une table contient une colonne FILESTREAM, chaque ligne doit avoir un ID de ligne unique n'acceptant pas la valeur Null.When a table contains a FILESTREAM column, each row must have a nonnull unique row ID.

  • Plusieurs conteneurs de données peuvent être ajoutés à un groupe de fichiers FILESTREAM.Multiple data containers can be added to a FILESTREAM filegroup.

  • Les conteneurs de données FILESTREAM ne peuvent pas être imbriqués.FILESTREAM data containers cannot be nested.

  • Lorsque vous utilisez le clustering de basculement, les groupes de fichiers FILESTREAM doivent être sur des ressources de disque partagées.When you are using failover clustering, the FILESTREAM filegroups must be on shared disk resources.

  • Les groupes de fichiers FILESTREAM peuvent être sur des volumes compressés.FILESTREAM filegroups can be on compressed volumes.

Gestion intégréeIntegrated Management

FILESTREAM étant implémenté en tant que colonne varbinary(max) et intégré directement dans le Moteur de base de donnéesDatabase Engine, la plupart des fonctions et outils d’administration SQL ServerSQL Server fonctionnent sans changement pour les données FILESTREAM.Because FILESTREAM is implemented as a varbinary(max) column and integrated directly into the Moteur de base de donnéesDatabase Engine, most SQL ServerSQL Server management tools and functions work without modification for FILESTREAM data. Par exemple, vous pouvez utiliser tous les modes de récupération et de sauvegarde avec les données FILESTREAM, et les données FILESTREAM sont sauvegardées avec les données structurées dans la base de données.For example, you can use all backup and recovery models with FILESTREAM data, and the FILESTREAM data is backed up with the structured data in the database. Si vous ne souhaitez pas sauvegarder les données FILESTREAM avec les données relationnelles, vous pouvez utiliser une sauvegarde partielle pour exclure les groupes de fichiers FILESTREAM.If you do not want to back up FILESTREAM data with relational data, you can use a partial backup to exclude FILESTREAM filegroups.

Sécurité intégréeIntegrated Security

Dans SQL ServerSQL Server, les données FILESTREAM sont sécurisées tout comme les autres données : en accordant des autorisations au niveau des tables ou des colonnes.In SQL ServerSQL Server, FILESTREAM data is secured just like other data is secured: by granting permissions at the table or column levels. Si un utilisateur dispose de l'autorisation pour la colonne FILESTREAM dans une table, il peut ouvrir les fichiers associés.If a user has permission to the FILESTREAM column in a table, the user can open the associated files.

Note

Le chiffrement n'est pas pris en charge sur les données FILESTREAM.Encryption is not supported on FILESTREAM data.

Seul le compte sous lequel le compte de service SQL ServerSQL Server s’exécute dispose des autorisations sur le conteneur FILESTREAM.Only the account under which the SQL ServerSQL Server service account runs is granted permissions to the FILESTREAM container. Nous recommandons de n'accorder des autorisations sur le conteneur de données à aucun autre compte.We recommend that no other account be granted permissions on the data container.

Note

Les connexions SQL ne fonctionnent pas avec les conteneurs FILESTREAM.SQL logins will not work with FILESTREAM containers. Seule l’authentification NTFS ou ReFS fonctionne avec les conteneurs FILESTREAM.Only NTFS or ReFS authentication will work with FILESTREAM containers.

Accès aux données BLOB avec Transact-SQL et accès en continu au système de fichiers Accessing BLOB Data with Transact-SQL and File System Streaming Access

Après avoir stocké des données dans une colonne FILESTREAM, vous pouvez accéder aux fichiers en utilisant des transactions Transact-SQLTransact-SQL ou en utilisant des API Win32.After you store data in a FILESTREAM column, you can access the files by using Transact-SQLTransact-SQL transactions or by using Win32 APIs.

Accès Transact-SQLTransact-SQL Access

Grâce à Transact-SQLTransact-SQL, vous pouvez insérer, mettre à jour et supprimer des données FILESTREAM :By using Transact-SQLTransact-SQL, you can insert, update, and delete FILESTREAM data:

  • Vous pouvez utiliser une opération d'insertion pour préremplir un champ FILESTREAM avec une valeur NULL, une valeur vide ou des données inline relativement courtes.You can use an insert operation to prepopulate a FILESTREAM field with a null value, empty value, or relatively short inline data. Toutefois, une grande quantité de données est diffusée en continu plus efficacement dans un fichier qui utilise des interfaces Win32.However, a large amount of data is more efficiently streamed into a file that uses Win32 interfaces.

  • Lorsque vous mettez à jour un champ FILESTREAM, vous modifiez les données d'objet blob sous-jacentes dans le système de fichiers.When you update a FILESTREAM field, you modify the underlying BLOB data in the file system. Lorsqu'un champ FILESTREAM a la valeur NULL, les données d'objet blob associées au champ sont supprimées.When a FILESTREAM field is set to NULL, the BLOB data associated with the field is deleted. Vous ne pouvez pas utiliser une mise à jour segmentée Transact-SQLTransact-SQL , implémentée comme UPDATE.Write(), pour effectuer des mises à jour partielles des données.You cannot use a Transact-SQLTransact-SQL chunked update, implemented as UPDATE.Write(), to perform partial updates to the data.

  • Lorsque vous supprimez une ligne ou supprimez ou tronquez une table qui contient des données FILESTREAM, vous supprimez les données d'objet blob sous-jacentes dans le système de fichiers.When you delete a row or delete or truncate a table that contains FILESTREAM data, you delete the underlying BLOB data in the file system.

Accès de diffusion en continu au système de fichiersFile System Streaming Access

La prise en charge de diffusion en continu Win32 fonctionne dans le contexte d'une transaction SQL ServerSQL Server .The Win32 streaming support works in the context of a SQL ServerSQL Server transaction. Dans une transaction, vous pouvez utiliser des fonctions FILESTREAM pour obtenir un chemin d'accès de système de fichiers UNC logique d'un fichier.Within a transaction, you can use FILESTREAM functions to obtain a logical UNC file system path of a file. Vous utilisez ensuite l’API OpenSqlFilestream pour obtenir un descripteur de fichier.You then use the OpenSqlFilestream API to obtain a file handle. Ce descripteur peut ensuite être utilisé par des interfaces de diffusion de fichiers en continu Win32, telles que ReadFile() et WriteFile(), afin d’accéder au fichier et de le mettre à jour par le biais du système de fichiers.This handle can then be used by Win32 file streaming interfaces, such as ReadFile() and WriteFile(), to access and update the file by way of the file system.

Les opérations de fichiers étant transactionnelles, vous ne pouvez pas supprimer ou renommer des fichiers FILESTREAM par le biais du système de fichiers.Because file operations are transactional, you cannot delete or rename FILESTREAM files through the file system.

Modèle d'instructionStatement Model

L'accès au système de fichiers FILESTREAM modèle une instruction Transact-SQLTransact-SQL en utilisant l'ouverture et la fermeture de fichier.The FILESTREAM file system access models a Transact-SQLTransact-SQL statement by using file open and close. L'instruction démarre lorsqu'un descripteur de fichier est ouvert et se termine lorsque le descripteur est fermé.The statement starts when a file handle is opened and ends when the handle is closed. Par exemple, lorsqu'un descripteur d'écriture est fermé, tout déclencheur AFTER possible enregistré sur la table est activé comme si une instruction UPDATE était effectuée.For example, when a write handle is closed, any possible AFTER trigger that is registered on the table fires as if an UPDATE statement is completed.

Espace de noms de stockageStorage Namespace

Dans FILESTREAM, le Moteur de base de donnéesDatabase Engine contrôle l'espace de noms du système de fichiers physique d'objet blob.In FILESTREAM, the Moteur de base de donnéesDatabase Engine controls the BLOB physical file system namespace. Une nouvelle fonction intrinsèque, PathName, fournit le chemin UNC logique de l’objet blob qui correspond à chaque cellule FILESTREAM dans la table.A new intrinsic function, PathName, provides the logical UNC path of the BLOB that corresponds to each FILESTREAM cell in the table. L’application utilise ce chemin logique pour obtenir le descripteur Win32 et opérer sur les données d’objet blob en utilisant des interfaces de système de fichiers Win32 ordinaires.The application uses this logical path to obtain the Win32 handle and operate on the BLOB data by using regular Win32 file system interfaces. La fonction retourne NULL si la valeur de la colonne FILESTREAM est NULL.The function returns NULL if the value of the FILESTREAM column is NULL.

Accès au système de fichiers traitéTransacted File System Access

Une nouvelle fonction intrinsèque, GET_FILESTREAM_TRANSACTION_CONTEXT(), fournit le jeton qui représente la transaction actuelle à laquelle la session est associée.A new intrinsic function, GET_FILESTREAM_TRANSACTION_CONTEXT(), provides the token that represents the current transaction that the session is associated with. La transaction doit avoir été démarrée mais pas encore abandonnée ou validée.The transaction must have been started and not yet aborted or committed. En obtenant un jeton, l'application lie les opérations de diffusion en continu de système de fichiers FILESTREAM avec une transaction commencée.By obtaining a token, the application binds the FILESTREAM file system streaming operations with a started transaction. La fonction retourne NULL si aucune transaction n'est explicitement commencée.The function returns NULL in case of no explicitly started transaction.

Tous les descripteurs de fichiers doivent être fermés avant que la transaction ne soit validée ou abandonnée.All file handles must be closed before the transaction commits or aborts. Si un descripteur est laissé ouvert au-delà de l'étendue de transaction, les lectures supplémentaires contre le descripteur provoqueront un échec ; les écritures supplémentaires contre le descripteur réussiront, mais les données effectives ne seront pas écrites sur le disque.If a handle is left open beyond the transaction scope, additional reads against the handle will cause a failure; additional writes against the handle will succeed, but the actual data will not be written to disk. De même, si la base de données ou l'instance du Moteur de base de donnéesDatabase Engine s'arrête, tous les descripteurs ouverts sont invalidés.Similarly, if the database or instance of the Moteur de base de donnéesDatabase Engine shuts down, all open handles are invalidated.

Durabilité transactionnelleTransactional Durability

Avec FILESTREAM, lors de la validation des transactions, le Moteur de base de donnéesDatabase Engine garantit la durabilité des transactions pour les données d'objet blob FILESTREAM modifiées à partir de l'accès en continu au système de fichiers.With FILESTREAM, upon transaction commit, the Moteur de base de donnéesDatabase Engine ensures transaction durability for FILESTREAM BLOB data that is modified from the file system streaming access.

Sémantique d'isolationIsolation Semantics

La sémantique d'isolation est gouvernée par les niveaux d'isolation des transactions du Moteur de base de donnéesDatabase Engine .The isolation semantics are governed by Moteur de base de donnéesDatabase Engine transaction isolation levels. Le niveau d'isolation de lecture validée est pris en charge pour l'accès Transact-SQLTransact-SQL et au système de fichiers.Read-committed isolation level is supported for Transact-SQLTransact-SQL and file system access. Les opérations de lecture renouvelables, ainsi que les isolements de capture instantanée sérialisables, sont pris en charge.Repeatable read operations, and also serializable and snapshot isolations, are supported. La lecture erronée n'est pas prise en charge.Dirty read is not supported.

Les opérations d'ouverture d'accès au système de fichiers n'attendent pas de verrous.The file system access open operations do not wait for any locks. Au lieu de cela, les opérations d'ouverture échouent immédiatement si elles ne peuvent pas accéder aux données à cause de l'isolation des transactions.Instead, the open operations fail immediately if they cannot access the data because of transaction isolation. Les appels API de diffusion en continu échouent avec ERROR_SHARING_VIOLATION si l'opération d'ouverture ne peut se poursuivre à cause de la violation d'isolation.The streaming API calls fail with ERROR_SHARING_VIOLATION if the open operation cannot continue because of isolation violation.

Pour permettre les mises à jour partielles, l'application peut publier un contrôle FS de périphérique (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT) afin d'extraire l'ancien contenu dans le fichier auquel le descripteur ouvert fait référence.To allow for partial updates to be made, the application can issue a device FS control (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT) to fetch the old content into the file that the opened handle references. Cela déclenchera une copie de l'ancien contenu côté serveur.This will trigger a server-side old content copy. Pour de meilleures performances d'application et afin d'éviter des dépassements de délais d'attente potentiels lorsque vous travaillez avec de très grands fichiers, nous vous recommandons d'utiliser des E/S asynchrones.For better application performance and to avoid running into potential time-outs when you are working with very large files, we recommend that you use asynchronous I/O.

Si le FSCTL est publié après l'écriture dans le descripteur, la dernière opération d'écriture persistera et les écritures antérieures effectuées dans le descripteur seront perdues.If the FSCTL is issued after the handle has been written to, the last write operation will persist, and prior writes that were made to the handle are lost.

API du système de fichiers et niveaux d'isolation pris en chargeFile System APIs and Supported Isolation Levels

Lorsqu'une API du système de fichiers ne parvient pas à ouvrir un fichier en raison d'une violation d'isolation, une exception ERROR_SHARING_VIOLATION est retournée.When a file system API cannot open a file because of an isolation violation, an ERROR_SHARING_VIOLATION exception is returned. Cette violation d'isolation se produit lorsque deux transactions essaient d'accéder au même fichier.This isolation violation occurs when two transactions try to access the same file. Le résultat de l'opération d'accès dépend du mode dans lequel le fichier a été ouvert et de la version de SQL ServerSQL Server sur laquelle la transaction s'exécute.The outcome of the access operation depends on the mode the file was opened in and the version of SQL ServerSQL Server that the transaction is running on. Le tableau suivant décrit les résultats possibles pour les deux transactions qui accèdent au même fichier.The following table outlines the possibly outcomes for two transactions that are accessing the same file.

Transaction 1Transaction 1 Transaction 2Transaction 2 Résultat sur SQL Server 2008Outcome on SQL Server 2008 Résultat sur SQL Server 2008 R2 et les versions ultérieuresOutcome on SQL Server 2008 R2 and later versions
Ouvert pour la lecture.Open for read. Ouvert pour la lecture.Open for read. Réussite des deux transactions.Both succeed. Réussite des deux transactions.Both succeed.
Ouvert pour la lecture.Open for read. Ouvert pour l'écriture.Open for write. Réussite des deux transactions.Both succeed. Les opérations d'écriture sous la transaction 2 n'affectent pas les opérations de lecture effectuées dans la transaction 1.Write operations under transaction 2 do not affect read operations performed in transaction 1. Réussite des deux transactions.Both succeed. Les opérations d'écriture sous la transaction 2 n'affectent pas les opérations de lecture effectuées dans la transaction 1.Write operations under transaction 2 do not affect read operations performed in transaction 1.
Ouvert pour l'écriture.Open for write. Ouvert pour la lecture.Open for read. L'opération d'ouverture sur la transaction 2 échoue avec une exception ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Réussite des deux transactions.Both succeed.
Ouvert pour l'écriture.Open for write. Ouvert pour l'écriture.Open for write. L'opération d'ouverture sur la transaction 2 échoue avec une exception ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception. L'opération d'ouverture sur la transaction 2 échoue avec une exception ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception.
Ouvert pour la lecture.Open for read. Ouvert pour SELECT.Open for SELECT. Réussite des deux transactions.Both succeed. Réussite des deux transactions.Both succeed.
Ouvert pour la lecture.Open for read. Ouvert pour UPDATE ou DELETE.Open for UPDATE or DELETE. Réussite des deux transactions.Both succeed. Les opérations d'écriture sous la transaction 2 n'affectent pas les opérations de lecture effectuées dans la transaction 1.Write operations under transaction 2 do not affect read operations performed in transaction 1. Réussite des deux transactions.Both succeed. Les opérations d'écriture sous la transaction 2 n'affectent pas les opérations de lecture effectuées dans la transaction 1.Write operations under transaction 2 do not affect read operations performed in transaction 1.
Ouvert pour l'écriture.Open for write. Ouvert pour SELECT.open for SELECT. La transaction 2 se bloque jusqu'à ce que la transaction 1 valide ou termine la transaction, ou l'opération d'obtention d'un verrou pour la transaction se solde par une erreur de délai d'attente.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out. Réussite des deux transactions.Both succeed.
Ouvert pour l'écriture.Open for write. Ouvert pour UPDATE ou DELETE.Open for UPDATE or DELETE. La transaction 2 se bloque jusqu'à ce que la transaction 1 valide ou termine la transaction, ou l'opération d'obtention d'un verrou pour la transaction se solde par une erreur de délai d'attente.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out. La transaction 2 se bloque jusqu'à ce que la transaction 1 valide ou termine la transaction, ou l'opération d'obtention d'un verrou pour la transaction se solde par une erreur de délai d'attente.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out.
Ouvert pour SELECT.Open for SELECT. Ouvert pour la lecture.Open for read. Réussite des deux transactions.Both succeed. Réussite des deux transactions.Both succeed.
Ouvert pour SELECT.Open for SELECT. Ouvert pour l'écriture.Open for write. Réussite des deux transactions.Both succeed. Les opérations d'écriture sous la transaction 2 n'affectent pas la transaction 1.Write operations under transaction 2 do not affect transaction 1. Réussite des deux transactions.Both succeed. Les opérations d'écriture sous la transaction 2 n'affectent pas la transaction 1.Write operations under transaction 2 do not affect transaction 1.
Ouvert pour UPDATE ou DELETE.Open for UPDATE or DELETE. Ouvert pour la lecture.Open for read. L'opération d'ouverture sur la transaction 2 échoue avec une exception ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Réussite des deux transactions.Both succeed.
Ouvert pour UPDATE ou DELETE.Open for UPDATE or DELETE. Ouvert pour l'écriture.Open for write. L'opération d'ouverture sur la transaction 2 échoue avec une exception ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. L'opération d'ouverture sur la transaction 2 échoue avec une exception ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception.
Ouvert pour SELECT avec lecture renouvelable.Open for SELECT with repeatable read. Ouvert pour la lecture.Open for read. Réussite des deux transactions.Both succeed. Réussite des deux transactions.Both succeed.
Ouvert pour SELECT avec lecture renouvelable.Open for SELECT with repeatable read. Ouvert pour l'écriture.Open for write. L'opération d'ouverture sur la transaction 2 échoue avec une exception ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. L'opération d'ouverture sur la transaction 2 échoue avec une exception ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception.

Double écriture à partir de clients distantsWrite-Through from Remote Clients

L'accès de système de fichiers distant aux données FILESTREAM est activé sur le protocole SMB (Block Server Message).Remote file system access to FILESTREAM data is enabled over the Server Message Block (SMB) protocol. Si le client est distant, aucune opération d'écriture n'est mise en cache par le côté client.If the client is remote, no write operations are cached by the client side. Les opérations d'écriture seront toujours envoyées au serveur.The write operations will always be sent to the server. Les données peuvent être mises en cache du côté serveur.The data can be cached on the server side. Nous recommandons que les applications qui s'exécutent sur des clients distants consolident les petites opérations d'écriture afin d'effectuer moins d'opérations d'écriture avec une taille de données supérieure.We recommend that applications that are running on remote clients consolidate small write operations to make fewer write operations using larger data size.

La création de vues mappées en mémoire (E/S mappées en mémoire) à l'aide d'un descripteur FILESTREAM n'est pas prise en charge.Creating memory mapped views (memory mapped I/O) by using a FILESTREAM handle is not supported. Si le mappage mémoire est utilisé pour les données FILESTREAM, le Moteur de base de donnéesDatabase Engine ne peut pas garantir la cohérence et la durabilité des données, ni l’intégrité de la base de données.If memory mapping is used for FILESTREAM data, the Moteur de base de donnéesDatabase Engine cannot guarantee consistency and durability of the data or the integrity of the database.

Activer et configurer FILESTREAMEnable and Configure FILESTREAM
Créer une base de données compatible FILESTREAM Create a FILESTREAM-Enabled Database
Créer une table pour le stockage de données FILESTREAM Create a Table for Storing FILESTREAM Data
Accéder aux données FILESTREAM avec Transact-SQL Access FILESTREAM Data with Transact-SQL
Créer des applications clientes pour les données FILESTREAM Create Client Applications for FILESTREAM Data
Accéder à des données FILESTREAM avec OpenSqlFilestream Access FILESTREAM Data with OpenSqlFilestream
Effectuer des mises à jour partielles de données FILESTREAM Make Partial Updates to FILESTREAM Data
Éviter les conflits avec les opérations de base de données dans les applications FILESTREAM Avoid Conflicts with Database Operations in FILESTREAM Applications
Déplacer une base de données compatible FILESTREAM Move a FILESTREAM-Enabled Database
Configurer FILESTREAM sur un cluster de basculement Set Up FILESTREAM on a Failover Cluster
Configurer un pare-feu pour l'accès FILESTREAM Configure a Firewall for FILESTREAM Access

Compatibilité de FILESTREAM avec d'autres fonctionnalités SQL ServerFILESTREAM Compatibility with Other SQL Server Features