FILESTREAM (SQL Server)FILESTREAM (SQL Server)

SE APLICA A: síSQL Server (solo en Windows) noAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (Windows only) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

FILESTREAM permite a las aplicaciones basadas en SQL ServerSQL Server almacenar datos no estructurados, como documentos e imágenes, en el sistema de archivos.FILESTREAM enables SQL ServerSQL Server-based applications to store unstructured data, such as documents and images, on the file system. Las aplicaciones pueden aprovechar las API de transmisión de datos enriquecidas y el rendimiento del sistema de archivos al mismo tiempo que mantienen la coherencia transaccional entre los datos no estructurados y los datos estructurados correspondientes.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 integra Motor de base de datos de SQL ServerSQL Server Database Engine con sistemas de archivos NTFS o ReFS almacenando datos de objetos binarios grandes (BLOB) varbinary(max) como archivos en el sistema de archivos.FILESTREAM integrates the Motor de base de datos de 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 pueden insertar, actualizar, consultar, buscar y realizar copias de seguridad de los datos FILESTREAM.statements can insert, update, query, search, and back up FILESTREAM data. Las interfaces del sistema de archivos de Win32 proporcionan el acceso de la transmisión por secuencias a los datos.Win32 file system interfaces provide streaming access to the data.

FILESTREAM usa la memoria caché del sistema NT para almacenar en memoria caché los datos de archivos.FILESTREAM uses the NT system cache for caching file data. Esto ayuda a reducir cualquier efecto que los datos FILESTREAM podrían tener en el rendimiento de Motor de base de datosDatabase Engine .This helps reduce any effect that FILESTREAM data might have on Motor de base de datosDatabase Engine performance. No se usa el grupo de búferes de SQL ServerSQL Server ; por consiguiente, esta memoria está disponible para el procesamiento de consultas.The SQL ServerSQL Server buffer pool is not used; therefore, this memory is available for query processing.

FILESTREAM no se habilita automáticamente al instalar o actualizar SQL ServerSQL Server.FILESTREAM is not automatically enabled when you install or upgrade SQL ServerSQL Server. Debe habilitar FILESTREAM utilizando el Administrador de configuración de SQL Server y 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. Para utilizar FILESTREAM, debe crear o modificar una base de datos que contenga un tipo especial de grupo de archivos.To use FILESTREAM, you must create or modify a database to contain a special type of filegroup. Luego, debe crear o modificar una tabla de modo que contenga una columna varbinary(max) con el atributo FILESTREAM.Then, create or modify a table so that it contains a varbinary(max) column with the FILESTREAM attribute. Después de completar estas tareas, puede usar Transact-SQLTransact-SQL y Win32 para administrar los datos FILESTREAM.After you complete these tasks, you can use Transact-SQLTransact-SQL and Win32 to manage the FILESTREAM data.

Cuándo se usa FILESTREAMWhen to Use FILESTREAM

En SQL ServerSQL Server, los BLOB pueden ser datos de varbinary(max) estándar que almacena los datos en tablas u objetos FILESTREAM varbinary(max) que almacenan los datos en el sistema de archivos.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. El tamaño y el uso de los datos determinan si debería usar el almacenamiento de base de datos o el almacenamiento del sistema de archivos.The size and use of the data determines whether you should use database storage or file system storage. Si las condiciones siguientes son verdaderas, debería pensar en usar FILESTREAM:If the following conditions are true, you should consider using FILESTREAM:

  • Los objetos que se están almacenando son, por término medio, mayores de 1 MB.Objects that are being stored are, on average, larger than 1 MB.
  • El acceso de lectura rápido es importante.Fast read access is important.
  • Está desarrollando aplicaciones que usan un nivel intermedio para la lógica de la aplicación.You are developing applications that use a middle tier for application logic.

Para objetos de menor tamaño, el almacenamiento de BLOB varbinary(max) en la base de datos a menudo proporciona un mejor rendimiento de la transmisión de datos.For smaller objects, storing varbinary(max) BLOBs in the database often provides better streaming performance.

Almacenamiento de FILESTREAMFILESTREAM Storage

El almacenamiento de FILESTREAM se implementa como una columna varbinary(max) en la que los datos están almacenados como BLOB en el sistema de archivos.FILESTREAM storage is implemented as a varbinary(max) column in which the data is stored as BLOBs in the file system. Los tamaños de los BLOB están limitados solo por el tamaño del volumen del sistema de archivos.The sizes of the BLOBs are limited only by the volume size of the file system. La limitación varbinary(max) estándar de tamaños de archivo de 2 GB no se aplica a BLOB que están almacenados en el sistema de archivos.The standard varbinary(max) limitation of 2-GB file sizes does not apply to BLOBs that are stored in the file system.

Para especificar que una columna debería almacenar datos en el sistema de archivos, especifique el atributo FILESTREAM en una columna varbinary(max) .To specify that a column should store data on the file system, specify the FILESTREAM attribute on a varbinary(max) column. Esto hace que Motor de base de datosDatabase Engine almacene todos los datos para esa columna en el sistema de archivos pero no en el archivo de base de datos.This causes the Motor de base de datosDatabase Engine to store all data for that column on the file system, but not in the database file.

Los datos de FILESTREAM deben estar almacenados en los grupos de archivos FILESTREAM.FILESTREAM data must be stored in FILESTREAM filegroups. Un grupo de archivos FILESTREAM es un grupo de archivos especial que contiene los directorios de sistema de archivos en lugar de los propios archivos.A FILESTREAM filegroup is a special filegroup that contains file system directories instead of the files themselves. Estos directorios del sistema de archivos se denominan contenedores de datos.These file system directories are called data containers. Los contenedores de datos son la interfaz entre el almacenamiento del Motor de base de datosDatabase Engine y el almacenamiento del sistema de archivos.Data containers are the interface between Motor de base de datosDatabase Engine storage and file system storage.

Cuando use el almacenamiento FILESTREAM, piense en lo siguiente:When you use FILESTREAM storage, consider the following:

  • Cuando una tabla contiene una columna FILESTREAM, cada fila debe tener un identificador de fila único distinto de NULL.When a table contains a FILESTREAM column, each row must have a nonnull unique row ID.
  • Se pueden agregar varios contenedores de datos a un grupo de archivos FILESTREAM.Multiple data containers can be added to a FILESTREAM filegroup.
  • Los contenedores de datos FILESTREAM no pueden estar anidados.FILESTREAM data containers cannot be nested.
  • Cuando se usan clústeres de conmutación por error, los grupos de archivos FILESTREAM deben estar en recursos de disco compartido.When you are using failover clustering, the FILESTREAM filegroups must be on shared disk resources.
  • Los grupos de archivos FILESTREAM pueden estar en volúmenes comprimidos.FILESTREAM filegroups can be on compressed volumes.

Administración integradaIntegrated Management

Debido a que FILESTREAM se implementa como columna varbinary(max) y se integra directamente en el Motor de base de datosDatabase Engine, la mayoría de las funciones y de las herramientas de administración de SQL ServerSQL Server funcionan sin la modificación de los datos FILESTREAM.Because FILESTREAM is implemented as a varbinary(max) column and integrated directly into the Motor de base de datosDatabase Engine, most SQL ServerSQL Server management tools and functions work without modification for FILESTREAM data. Por ejemplo, puede usar todos los modelos de recuperación y copia de seguridad con datos FILESTREAM y se realizan copias de seguridad de los datos FILESTREAM con los datos estructurados de la base de datos.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 no desea realizar una copia de seguridad de los datos FILESTREAM con datos relacionales, puede usar una copia de seguridad parcial para excluir los grupos de archivos FILESTREAM.If you do not want to back up FILESTREAM data with relational data, you can use a partial backup to exclude FILESTREAM filegroups.

Seguridad integradaIntegrated Security

En SQL ServerSQL Server, los datos de FILESTREAM se protegen de la misma manera que los demás datos: concediendo permisos en el nivel de tabla o columna.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 usuario tiene permiso para la columna FILESTREAM de una tabla, el usuario puede abrir los archivos asociados.If a user has permission to the FILESTREAM column in a table, the user can open the associated files.

Nota

El cifrado no se admite en los datos FILESTREAM.Encryption is not supported on FILESTREAM data.

Solo la cuenta con la que la cuenta de servicio de SQL ServerSQL Server se ejecuta se permiten los permisos al contenedor FILESTREAM.Only the account under which the SQL ServerSQL Server service account runs is granted permissions to the FILESTREAM container. Recomendamos que no se concedan permisos a ninguna otra cuenta en el contenedor de datos.We recommend that no other account be granted permissions on the data container.

Nota

Los inicios de sesión de SQL no funcionarán con contenedores FILESTREAM.SQL logins will not work with FILESTREAM containers. Solo la autenticación NTFS o ReFS funcionará con contenedores FILESTREAM.Only NTFS or ReFS authentication will work with FILESTREAM containers.

Acceso a datos BLOB con Transact-SQL y acceso de transmisión de datos del sistema de archivosAccessing BLOB Data with Transact-SQL and File System Streaming Access

Después de almacenar los datos en una columna FILESTREAM, puede tener acceso a los archivos usando las transacciones de Transact-SQLTransact-SQL o usando las API de 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.

Acceso a Transact-SQLTransact-SQL Access

Usando Transact-SQLTransact-SQL, puede insertar, actualizar y eliminar los datos de FILESTREAM:By using Transact-SQLTransact-SQL, you can insert, update, and delete FILESTREAM data:

  • Puede usar una operación de inserción para rellenar previamente un campo FILESTREAM con un valor nulo, un valor vacío o un dato insertado relativamente corto.You can use an insert operation to prepopulate a FILESTREAM field with a null value, empty value, or relatively short inline data. Sin embargo, se envía una gran cantidad de datos de manera más eficaz en un archivo que usa interfaces de Win32.However, a large amount of data is more efficiently streamed into a file that uses Win32 interfaces.
  • Al actualizar un campo FILESTREAM, modifica los datos de BLOB subyacentes en el sistema de archivos.When you update a FILESTREAM field, you modify the underlying BLOB data in the file system. Cuando un campo FILESTREAM está establecido en NULL, se eliminan los datos de BLOB asociados al campo.When a FILESTREAM field is set to NULL, the BLOB data associated with the field is deleted. No puede usar ninguna actualización fragmentada de Transact-SQLTransact-SQL , implementada como UPDATE . Write(), para realizar actualizaciones parciales en los datos.You cannot use a Transact-SQLTransact-SQL chunked update, implemented as UPDATE . Write(), to perform partial updates to the data.
  • Al eliminar una fila, o eliminar o truncar una tabla que contiene datos FILESTREAM, elimina los datos de BLOB subyacentes del sistema de archivos.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.

Acceso a la transmisión por secuencias del sistema de archivosFile System Streaming Access

La compatibilidad de transmisión por secuencias de Win32 funciona en el contexto de una transacción de SQL ServerSQL Server .The Win32 streaming support works in the context of a SQL ServerSQL Server transaction. Dentro de una transacción, puede usar las funciones FILESTREAM para obtener una ruta de acceso al sistema de archivos de UNC lógica de un archivo.Within a transaction, you can use FILESTREAM functions to obtain a logical UNC file system path of a file. Tras ello, use la API OpenSqlFilestream para obtener un identificador de archivos.You then use the OpenSqlFilestream API to obtain a file handle. Después, este identificador lo pueden usar las interfaces de transmisión por secuencias de archivo de Win32, como ReadFile() y WriteFile(), para obtener acceso y actualizar el archivo a través del sistema de archivos.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.

Dado que las operaciones de archivo son transaccionales, no puede eliminar ni cambiar el nombre de los archivos FILESTREAM a través del sistema de archivos.Because file operations are transactional, you cannot delete or rename FILESTREAM files through the file system.

Modelo de la instrucciónStatement Model

El acceso del sistema de archivos de FILESTREAM modela una instrucción de Transact-SQLTransact-SQL usando la apertura y el cierre de archivo.The FILESTREAM file system access models a Transact-SQLTransact-SQL statement by using file open and close. La instrucción se inicia cuando un identificador de archivos se abre y finaliza cuando se cierra el identificador.The statement starts when a file handle is opened and ends when the handle is closed. Por ejemplo, cuando se cierra un identificador de escritura, cualquier posible desencadenador de AFTER que esté registrado en la tabla se desencadena como si la instrucción UPDATE estuviera completada.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.

Espacio de nombres de almacenamientoStorage Namespace

En FILESTREAM, el Motor de base de datosDatabase Engine controla el espacio de nombres del sistema de archivos físico de BLOB.In FILESTREAM, the Motor de base de datosDatabase Engine controls the BLOB physical file system namespace. Una nueva función intrínseca, PathName, proporciona la ruta UNC lógica del BLOB que se corresponde con cada celda de FILESTREAM de la tabla.A new intrinsic function, PathName, provides the logical UNC path of the BLOB that corresponds to each FILESTREAM cell in the table. La aplicación usa esta ruta de acceso lógica para obtener el identificador de Win32 y funcionar en los datos de BLOB usando las interfaces del sistema de archivos de Win32 normales.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 función devuelve NULL si el valor de la columna FILESTREAM es NULL.The function returns NULL if the value of the FILESTREAM column is NULL.

Acceso al sistema de archivos transaccionalesTransacted File System Access

Una nueva función intrínseca, GET_FILESTREAM_TRANSACTION_CONTEXT(), proporciona el token que representa la transacción actual a la que la sesión está asociada.A new intrinsic function, GET_FILESTREAM_TRANSACTION_CONTEXT(), provides the token that represents the current transaction that the session is associated with. Se debe haber iniciado la transacción y no haberse anulado ni confirmado todavía.The transaction must have been started and not yet aborted or committed. Al obtener un token, la aplicación enlaza las operaciones de transmisión por secuencias del sistema de archivos FILESTREAM con una transacción iniciada.By obtaining a token, the application binds the FILESTREAM file system streaming operations with a started transaction. La función devuelve NULL en caso de no haber ninguna transacción explícitamente iniciada.The function returns NULL in case of no explicitly started transaction.

Se deben cerrar todos los identificadores de archivo antes de que la transacción se confirme o se anule.All file handles must be closed before the transaction commits or aborts. Si un identificador se deja abierto más allá del ámbito de transacción, las lecturas adicionales frente al identificador producirán un error; las escrituras adicionales frente al identificador tendrán éxito pero los datos reales no se escribirán en el disco.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 igual forma, si la base de datos o la instancia del Motor de base de datosDatabase Engine se cierra, se invalidan todos los identificadores abiertos.Similarly, if the database or instance of the Motor de base de datosDatabase Engine shuts down, all open handles are invalidated.

Durabilidad transaccionalTransactional Durability

Con FILESTREAM, al confirmar la transacción, el Motor de base de datosDatabase Engine asegura la durabilidad de la transacción para los datos de BLOB FILESTREAM que se modifican del acceso a la transmisión por secuencias del sistema de archivos.With FILESTREAM, upon transaction commit, the Motor de base de datosDatabase Engine ensures transaction durability for FILESTREAM BLOB data that is modified from the file system streaming access.

Semántica de aislamientoIsolation Semantics

La semántica de aislamiento se rige por los niveles de aislamiento de transacción del Motor de base de datosDatabase Engine .The isolation semantics are governed by Motor de base de datosDatabase Engine transaction isolation levels. Se admite el nivel de aislamiento de lectura confirmada para Transact-SQLTransact-SQL y el acceso al sistema de archivos.Read-committed isolation level is supported for Transact-SQLTransact-SQL and file system access. Se admiten operaciones de lectura repetibles, así como serializables y aislamientos de instantáneas.Repeatable read operations, and also serializable and snapshot isolations, are supported. No se admite la lectura de datos sucios.Dirty read is not supported.

Las operaciones de apertura de acceso al sistema de archivos no esperan ningún bloqueo.The file system access open operations do not wait for any locks. En su lugar, se produce un error inmediato de las operaciones de apertura si no pueden obtener acceso a los datos debido al aislamiento de transacción.Instead, the open operations fail immediately if they cannot access the data because of transaction isolation. Se produce un error en las llamadas de API de transmisión por secuencias con ERROR_SHARING_VIOLATION si la operación de apertura no puede continuar debido a la infracción de aislamiento.The streaming API calls fail with ERROR_SHARING_VIOLATION if the open operation cannot continue because of isolation violation.

Para permitir que se realicen actualizaciones parciales, la aplicación puede emitir un control FS de dispositivo (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT) para capturar el contenido anterior en el archivo al que hace referencia el identificador abierto.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. Esto desencadenará una copia de contenido antiguo de servidor.This will trigger a server-side old content copy. Para un mejor rendimiento de la aplicación, y para evitar encontrarse con posibles tiempos de espera mientras trabaja con archivos muy grandes, recomendamos que use E/S asincrónica.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 se emite FSCTL una vez que se haya escrito en el identificador, se conservará la última operación de escritura y se perderán las escrituras anteriores realizadas en el identificador.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 del sistema de archivos y niveles de aislamiento admitidosFile System APIs and Supported Isolation Levels

Cuando una API del sistema de archivos no puede abrir un archivo a causa de una infracción de aislamiento, se devuelve una excepción ERROR_SHARING_VIOLATION.When a file system API cannot open a file because of an isolation violation, an ERROR_SHARING_VIOLATION exception is returned. Esta infracción de aislamiento se produce cuando dos transacciones intentan acceder al mismo archivo.This isolation violation occurs when two transactions try to access the same file. El resultado de la operación de acceso depende del modo en el que se abrió el archivo y de la versión de SQL ServerSQL Server en la que se ejecute la transacción.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. En la tabla siguiente se explican resumidamente los posibles resultados de dos transacciones que están accediendo al mismo archivo.The following table outlines the possibly outcomes for two transactions that are accessing the same file.

Transacción 1Transaction 1 Transacción 2Transaction 2 Resultado en SQL Server 2008Outcome on SQL Server 2008 Resultado en SQL Server 2008 R2 y versiones posterioresOutcome on SQL Server 2008 R2 and later versions
Abrir para lectura.Open for read. Abrir para lectura.Open for read. Ambas son correctas.Both succeed. Ambas son correctas.Both succeed.
Abrir para lectura.Open for read. Abrir para escritura.Open for write. Ambas son correctas.Both succeed. Las operaciones de escritura de la transacción 2 no influyen en las operaciones de lectura realizadas en la transacción 1.Write operations under transaction 2 do not affect read operations performed in transaction 1. Ambas son correctas.Both succeed. Las operaciones de escritura de la transacción 2 no influyen en las operaciones de lectura realizadas en la transacción 1.Write operations under transaction 2 do not affect read operations performed in transaction 1.
Abrir para escritura.Open for write. Abrir para lectura.Open for read. Se produce un error en la operación de apertura de la transacción 2 con una excepción ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Ambas son correctas.Both succeed.
Abrir para escritura.Open for write. Abrir para escritura.Open for write. Se produce un error en la operación de apertura de la transacción 2 con una excepción ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Se produce un error en la operación de apertura de la transacción 2 con una excepción ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception.
Abrir para lectura.Open for read. Abrir para SELECT.Open for SELECT. Ambas son correctas.Both succeed. Ambas son correctas.Both succeed.
Abrir para lectura.Open for read. Abrir para UPDATE o DELETE.Open for UPDATE or DELETE. Ambas son correctas.Both succeed. Las operaciones de escritura de la transacción 2 no influyen en las operaciones de lectura realizadas en la transacción 1.Write operations under transaction 2 do not affect read operations performed in transaction 1. Ambas son correctas.Both succeed. Las operaciones de escritura de la transacción 2 no influyen en las operaciones de lectura realizadas en la transacción 1.Write operations under transaction 2 do not affect read operations performed in transaction 1.
Abrir para escritura.Open for write. Abrir para SELECT.open for SELECT. La transacción 2 se bloquea hasta que la transacción 1 se confirme o finalice la transacción. O bien, se agota el tiempo de espera de bloqueo de la transacción.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out. Ambas son correctas.Both succeed.
Abrir para escritura.Open for write. Abrir para UPDATE o DELETE.Open for UPDATE or DELETE. La transacción 2 se bloquea hasta que la transacción 1 se confirme o finalice la transacción. O bien, se agota el tiempo de espera de bloqueo de la transacción.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out. La transacción 2 se bloquea hasta que la transacción 1 se confirme o finalice la transacción. O bien, se agota el tiempo de espera de bloqueo de la transacción.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out.
Abrir para SELECT.Open for SELECT. Abrir para lectura.Open for read. Ambas son correctas.Both succeed. Ambas son correctas.Both succeed.
Abrir para SELECT.Open for SELECT. Abrir para escritura.Open for write. Ambas son correctas.Both succeed. Las operaciones de escritura de la transacción 2 no influyen en la transacción 1.Write operations under transaction 2 do not affect transaction 1. Ambas son correctas.Both succeed. Las operaciones de escritura de la transacción 2 no influyen en la transacción 1.Write operations under transaction 2 do not affect transaction 1.
Abrir para UPDATE o DELETE.Open for UPDATE or DELETE. Abrir para lectura.Open for read. Se produce un error en la operación de apertura de la transacción 2 con una excepción ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Ambas son correctas.Both succeed.
Abrir para UPDATE o DELETE.Open for UPDATE or DELETE. Abrir para escritura.Open for write. Se produce un error en la operación de apertura de la transacción 2 con una excepción ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Se produce un error en la operación de apertura de la transacción 2 con una excepción ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception.
Abrir para SELECT con REPEATABLE READ.Open for SELECT with repeatable read. Abrir para lectura.Open for read. Ambas son correctas.Both succeed. Ambas son correctas.Both succeed.
Abrir para SELECT con REPEATABLE READ.Open for SELECT with repeatable read. Abrir para escritura.Open for write. Se produce un error en la operación de apertura de la transacción 2 con una excepción ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Se produce un error en la operación de apertura de la transacción 2 con una excepción ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception.

Escritura continua desde clientes remotosWrite-Through from Remote Clients

El acceso del sistema de archivos remoto a los datos FILESTREAM está habilitado por el protocolo Bloque de mensajes de servidor (SMB).Remote file system access to FILESTREAM data is enabled over the Server Message Block (SMB) protocol. Si el cliente es remoto, no se almacena en caché ninguna operación de escritura del lado cliente.If the client is remote, no write operations are cached by the client side. Las operaciones de escritura siempre se enviarán al servidor.The write operations will always be sent to the server. Los datos pueden se pueden almacenar en memoria caché en el servidor.The data can be cached on the server side. Recomendamos que las aplicaciones que se están ejecutando en clientes remotos consoliden pequeñas operaciones de escritura para realizar menos operaciones de escritura mediante un tamaño de datos mayor.We recommend that applications that are running on remote clients consolidate small write operations to make fewer write operations using larger data size.

No se admite la creación de vistas asignadas de memoria (E/S asignada de memoria) usando un identificador FILESTREAM.Creating memory mapped views (memory mapped I/O) by using a FILESTREAM handle is not supported. Si la asignación de memoria se usa para los datos FILESTREAM, el Motor de base de datosDatabase Engine no puede garantizar la coherencia y la durabilidad de los datos o la integridad de la base de datos.If memory mapping is used for FILESTREAM data, the Motor de base de datosDatabase Engine cannot guarantee consistency and durability of the data or the integrity of the database.

Habilitar y configurar FILESTREAMEnable and Configure FILESTREAM
crear una base de datos habilitada para FILESTREAMCreate a FILESTREAM-Enabled Database
Crear una tabla para almacenar datos FILESTREAMCreate a Table for Storing FILESTREAM Data
Obtener acceso a datos FILESTREAM con Transact-SQL Crear aplicaciones cliente para datos FILESTREAMAccess FILESTREAM Data with Transact-SQL Create Client Applications for FILESTREAM Data
Obtener acceso a los datos FILESTREAM con OpenSqlFilestreamAccess FILESTREAM Data with OpenSqlFilestream
Realizar actualizaciones parciales de los datos FILESTREAMMake Partial Updates to FILESTREAM Data
Evitar conflictos con operaciones de base de datos en aplicaciones FILESTREAMAvoid Conflicts with Database Operations in FILESTREAM Applications
Mover una base de datos habilitada para FILESTREAMMove a FILESTREAM-Enabled Database
Configurar FILESTREAM en un clúster de conmutación por errorSet Up FILESTREAM on a Failover Cluster
Configurar un Firewall para el acceso de FILESTREAMConfigure a Firewall for FILESTREAM Access

Compatibilidad de FILESTREAM con otras características de SQL ServerFILESTREAM Compatibility with Other SQL Server Features
Vistas de administración dinámica de secuencia de archivo y FileTable (Transact-SQL)Filestream and FileTable Dynamic Management Views (Transact-SQL)
Vistas de catálogo de secuencia de archivo y FileTable (Transact-SQL)Filestream and FileTable Catalog Views (Transact-SQL)
Procedimientos almacenados del sistema de Filestream y FileTable (Transact-SQL)Filestream and FileTable System Stored Procedures (Transact-SQL)