Usar FILESTREAM con otras características de SQL Server

Dado que los datos FILESTREAM están en el sistema de archivos, este tema proporciona algunas consideraciones, directrices y limitaciones para utilizar FILESTREAM con las características siguientes de SQL Server:

  • SQL Server Integration Services (SSIS)

  • Consultas distribuidas y servidores vinculados

  • Instantáneas de base de datos

  • Replicación

  • Trasvase de registros

  • Creación de reflejo de la base de datos

  • Índices de texto completo

  • Agrupación en clústeres de conmutación por error

  • SQL Server Express

SQL Server Integration Services (SSIS)

SQL Server Integration Services (SSIS) administra los datos FILESTREAM en el flujo de datos como cualesquiera otros datos BLOB utilizando el tipo de datos DT_IMAGE de SSIS.

Puede utilizar la transformación Importar columna para cargar archivos del sistema de archivos en una columna FILESTREAM. También puede usar la transformación Exportar columna para extraer archivos de una columna FILESTREAM a otra ubicación en el sistema de archivos.

Consultas distribuidas y servidores vinculados

Puede trabajar con datos FILESTREAM mediante consultas distribuidas y servidores vinculados si los trata como datos varbinary(max). No puede usar la función FILESTREAM PathName() en consultas distribuidas que emplean un nombre de cuatro partes, incluso cuando el nombre se refiere al servidor local. Sin embargo, puede emplear PathName() en la consulta interna de una consulta de paso a través que use OPENQUERY().

Instantáneas de base de datos

SQL Server no admite instantáneas de base de datos para grupos de archivos FILESTREAM. Si se incluye un grupo de archivos FILESTREAM en una cláusula CREATE DATABASE ON, se producirá un error en la instrucción y se generará el mensaje correspondiente.

Cuando se utiliza FILESTREAM, pueden crearse instantáneas de la base de datos de grupos de archivos estándar (no FILESTREAM). Los grupos de archivos FILESTREAM se marcan como sin conexión para esas instantáneas de la base de datos.

Una instrucción SELECT que se ejecuta en una tabla FILESTREAM de una instantánea de base de datos no debe incluir una columna FILESTREAM; de lo contrario, se devolverá el mensaje de error siguiente:

Could not continue scan with NOLOCK due to data movement.

Replicación

Una columna varbinary(max) que tiene el atributo FILESTREAM habilitado en el publicador puede replicarse en un suscriptor con o sin el atributo FILESTREAM. Para especificar la manera en la que se replica la columna, utilice el cuadro de diálogo Propiedades del artículo: <artículo> o el parámetro @schema_option de sp_addarticle o sp_addmergearticle. Para obtener más información acerca de cómo establecer opciones de esquema, vea Cómo especificar opciones de esquema (SQL Server Management Studio) y Cómo especificar opciones de esquema (programación de la replicación con Transact-SQL). Los datos que se replican a una columna varbinary(max) que no tiene el atributo FILESTREAM no deben superar el límite de 2 GB para ese tipo de datos; de lo contrario, se genera un error en tiempo de ejecución. Se recomienda replicar el atributo FILESTREAM, a menos que se estén replicando datos a SQL Server 2005. La replicación de tablas que incluyen columnas FILESTREAM en suscriptores de SQL Server 2000 no se admite, independientemente de la opción de esquema especificada. Para obtener más información acerca de cómo replicar datos a versiones anteriores de SQL Server, vea Usar varias versiones de SQL Server en una topología de replicación.

Nota

La replicación de valores de datos de gran tamaño de SQL Server 2008 a suscriptores de SQL Server 2005 está limitada a un máximo de 256 MB de valores de datos. Para obtener más información, vea Especificaciones de capacidad máxima.

Consideraciones acerca de la replicación transaccional

Si utiliza columnas FILESTREAM en tablas que se publican para la replicación transaccional, tenga en cuenta las consideraciones siguientes:

  • Si cualquiera de las tablas incluye columnas que tienen el atributo FILESTREAM, no puede utilizar valores de database snapshot o database snapshot character para la propiedad @sync_method de sp_addpublication.

  • La opción max text repl size especifica la cantidad máxima de datos que se pueden insertar en una columna publicada para su replicación. Esta opción se puede utilizar para controlar el tamaño de los datos FILESTREAM que se replican. Para obtener más información, vea max text repl size (opción).

  • Si especifica la opción de esquema para replicar el atributo FILESTREAM, pero filtra la columna uniqueidentifier que requiere FILESTREAM o especifica que no se replique la restricción UNIQUE para la columna, la replicación no replica el atributo FILESTREAM. La columna solo se replica como una columna varbinary(max).

Consideraciones acerca de la replicación de mezcla

Si utiliza columnas FILESTREAM en tablas que se publican para la replicación de mezcla, tenga en cuenta las consideraciones siguientes:

  • Tanto la replicación de mezcla como FILESTREAM requieren una columna del tipo de datos uniqueidentifier para identificar cada fila de una tabla. La replicación de mezcla agrega una columna automáticamente si la tabla no la tiene. La replicación de mezcla requiere que la columna tenga establecida la propiedad ROWGUIDCOL y su valor predeterminado sea NEWID() o NEWSEQUENTIALID(). Además de estos requisitos, FILESTREAM requiere que se defina una restricción UNIQUE para la columna. Estos requisitos tienen las consecuencias siguientes:

    • Si agrega una columna FILESTREAM a una tabla que ya está publicada para la replicación de mezcla, asegúrese de que la columna uniqueidentifier tiene una restricción UNIQUE. Si no tiene una restricción UNIQUE, agregue una restricción con nombre a la tabla en la base de datos de publicación. De forma predeterminada, la replicación de mezcla publicará este cambio del esquema y se aplicará a cada base de datos de suscripciones. Para obtener más información acerca de los cambios de esquema, vea Realizar cambios de esquema en las bases de datos de publicación.

      Si agrega manualmente una restricción UNIQUE tal como se ha descrito y desea quitar la replicación de mezcla, primero debe quitar la restricción UNIQUE; de lo contrario, se producirá un error en la eliminación de la replicación.

    • De forma predeterminada, la replicación de mezcla utiliza NEWSEQUENTIALID() porque puede proporcionar un mejor rendimiento que NEWID(). Si agrega una columna uniqueidentifier a una tabla que se publicará para la replicación de mezcla, especifique NEWSEQUENTIALID() como valor predeterminado.

  • La replicación de mezcla incluye una optimización para replicar tipos de objetos grandes. Esta optimización la controla el parámetro @stream_blob_columns de sp_addmergearticle. Si establece la opción de esquema para replicar el atributo FILESTREAM, el valor del parámetro @stream_blob_columns se establece en true. Esta optimización se puede invalidar con sp_changemergearticle. Este procedimiento almacenado le permite establecer @stream_blob_columns en false. Si agrega una columna FILESTREAM a una tabla que ya está publicada para la replicación de mezcla, se recomienda establecer la opción en true mediante sp_changemergearticle.

  • Si se habilita la opción de esquema para FILESTREAM una vez creado un artículo, puede producirse un error en la replicación si los datos de una columna FILESTREAM superan los 2 GB y hay un conflicto durante la replicación. Si espera que se produzca esta situación, se recomienda que quite y vuelva a crear el artículo de la tabla con la opción de esquema FILESTREAM adecuada habilitada durante la creación.

  • La replicación de mezcla puede sincronizar datos FILESTREAM a través de una conexión HTTPS mediante la Sincronización web. Estos datos no pueden superar el límite de 50 MB para la Sincronización web; de lo contrario, se generará un error en tiempo de ejecución.

Trasvase de registros

El trasvase de registros es compatible con FILESTREAM. Los servidores principal y secundario deben estar ejecutando SQL Server 2008 o una versión posterior y deben tener FILESTREAM habilitado.

Creación de reflejo de la base de datos

La creación de reflejo de la base de datos no es compatible con FILESTREAM. No se puede crear un grupo de archivos FILESTREAM en el servidor principal. La creación de reflejo de la base de datos no puede configurarse para una base de datos que contiene grupos de archivos FILESTREAM.

Indización de texto completo

La indización de texto completo funciona con una columna FILESTREAM del mismo modo que con una columna varbinary(max). La tabla FILESTREAM debe tener una columna con la extensión de nombre de archivo para cada BLOB FILESTREAM. Para obtener más información, vea Consultar columnas varbinary(max) y xml (búsqueda de texto completo), Filtros de búsqueda de texto completo, Proceso de indización de texto completo y consultas y sys.fulltext_document_types (Transact-SQL).

El motor de texto completo indiza el contenido de los BLOB FILESTREAM. Indizar archivos como las imágenes podría no ser útil. Cuando se actualiza un BLOB FILESTREAM, vuelve a indizarse.

Agrupación en clústeres de conmutación por error

Para la agrupación en clústeres de conmutación por error, los grupos de archivos FILESTREAM deben situarse en un disco compartido. Es preciso habilitar FILESTREAM en cada nodo del clúster que hospedará la instancia de FILESTREAM. Para obtener más información, vea Cómo configurar FILESTREAM en un clúster de conmutación por error.

SQL Server Express

SQL Server Express es compatible con FILESTREAM. El límite de tamaño de base de datos de 4 GB no incluye el contenedor de datos de FILESTREAM.