Compatibilidad de FileTable con otras características de SQL Server

Se aplica a:SQL Server

Describe el funcionamiento de FileTables con otras características de SQL Server.

Grupos de disponibilidad AlwaysOn y FileTables

Si la base de datos que contiene datos de FILESTREAM o FileTable pertenece a un grupo de disponibilidad AlwaysOn:

  • Los grupos de disponibilidad AlwaysOn admiten parcialmente la funcionalidad de FileTable. Después de una conmutación por error, es posible tener acceso a los datos de FileTable en la réplica principal, pero no en las réplicas secundarias legibles.

    Nota:

    Después de una conmutación por error se admite toda la funcionalidad de FILESTREAM. Los datos de FILESTREAM son accesibles tanto en las réplicas secundarias legibles como en la nueva réplica principal.

  • Las funciones FILESTREAM y FileTable aceptan o devuelven nombres de red virtual (VNN) en lugar de nombres de equipo. Para más información sobre estas funciones, consulte Funciones FILESTREAM y FileTable (Transact-SQL).

  • Todo acceso a los datos de FILESTREAM o FileTable a través de las API del sistema de archivos debe utilizar VNN en lugar de nombres de equipo. Para obtener más información, consulta Usar FILESTREAM y FileTable con grupos de disponibilidad Always On.

Partición y FileTables

FileTables no admite la creación de particiones. Con la compatibilidad con varios grupos de archivos FILESTREAM, los problemas de ampliación se pueden administrar sin tener que recurrir a la creación de particiones en la mayoría de los escenarios (a diferencia de FILESTREAM de SQL 2008).

Replicación y FileTables

La replicación y las características relacionadas (incluidos la replicación transaccional, la replicación de mezcla, la captura de datos modificados y el seguimiento de cambios) no se admiten con FileTables.

Semántica de transacción y FileTables

aplicaciones para Windows

Las aplicaciones Windows no entienden las transacciones de base de datos; por lo tanto, las operaciones de escritura de Windows no proporcionan las propiedades ACID de una transacción de base de datos. Por consiguiente, las reversiones transaccionales y la recuperación no son posibles en las operaciones de actualización de Windows.

Aplicaciones de Transact-SQL

Para las aplicaciones de Transact-SQL que funcionen en la columna FILESTREAM (file_stream) de una FileTable, la semántica de aislamiento es la misma que con el tipo de datos FILESTREAM de una tabla de usuario normal.

Notificaciones de consulta y FileTables

La consulta no puede contener ninguna referencia a la columna FILESTREAM de la FileTable en la cláusula WHERE ni en ninguna otra parte de la consulta.

SELECT INTO y FileTables

Las instrucciones SELECT INTO de una FileTable no propagan la semántica de la FileTable en la tabla de destino creada (al igual que las columnas FILESTREAM de una tabla regular). Todas las columnas de destino de la tabla se comportan como columnas normales. No tienen ninguna semántica de FileTable asociada.

Desencadenadores y FileTables

Desencadenadores DDL (lenguaje de definición de datos)

No existen consideraciones especiales para los desencadenadores DDL con las FileTables. Los desencadenadores DDL normales se activan para operaciones de creación o modificación de bases de datos, así como operaciones CREATE/ALTER TABLE para FileTables. Los desencadenadores pueden recuperar los datos de eventos reales que incluyan el texto de comandos DDL e información adicional, llamando a la función EVENTDATA(). No existen eventos nuevos ni cambios en el esquema Eventdata existente.

Desencadenadores DML (lenguaje de manipulación de datos)

Estas restricciones se aplican durante la operación DDL para crear desencadenadores.

  • Las FileTables no admiten desencadenadores INSTEAD OF para operaciones DML. Se trata de una restricción existente en todas las tablas que contengan columnas FILESTREAM.

  • Las FileTables sí admiten desencadenadores AFTER para operaciones DML.

  • Los desencadenadores definidos en una FileTable no pueden actualizar ninguna FileTable, incluida la FileTable primaria. Esta restricción existe principalmente para impedir que un desencadenador entre en conflictos de bloqueo con los bloqueos mantenidos por el acceso al sistema de archivos de la misma transacción.

Acceso no transaccional y sus efectos en los desencadenadores

  • Cuando se permite el acceso de actualización no transaccional en una base de datos, se puede realizar una actualización en contexto de los datos de FILESTREAM en cualquier tabla, incluida la tabla FileTable de esa base de datos. Debido a esta posibilidad, puede que la imagen anterior del contenido de FILESTREAM no esté disponible para que la use el desencadenador.

  • En operaciones de actualización no transaccional a través del sistema de archivos, SQL Server crea una transacción interna para capturar la operación CloseHandle y se pueden activar los desencadenadores DML definidos como parte de esa transacción. La reversión de una transacción de este tipo dentro del cuerpo del desencadenador, aunque no se impide, no revierte los cambios realizados en FILESTREAM. Dicha reversión también puede impedir que se ejecuten los desencadenadores UPDATE, aunque el contenido de FILESTREAM pueda haber cambiado.

  • Además de estos impactos, los desencadenadores de las FileTables deben ocuparse de un par de comportamientos adicionales

    • En el caso de operaciones de actualización no transaccional de una FileTable a través del sistema de archivos, es posible que el contenido de FILESTREAM esté bloqueado exclusivamente por otras operaciones de Win32 y quizá no se pueda acceder a él para operaciones de lectura y escritura a través del cuerpo del desencadenador. En casos como este, cualquier intento de acceso al contenido de FILESTREAM dentro del cuerpo del desencadenador puede provocar un error de "Infracción de uso compartido". Los desencadenadores se deben diseñar para controlar ese tipo de errores apropiadamente.

    • La imagen AFTER de FILESTREAM quizá no sea estable porque, en algunos casos, otras actualizaciones no transaccionales pueden escribir activamente en ella al mismo tiempo, debido a los modos de uso compartido permitidos en el acceso al sistema de archivos.

  • La terminación anómala de descriptores de Win32, como la finalización explícita de descriptores de Win32 por parte de un administrador o un fallo de la base de datos, no provoca la ejecución de disparadores de usuario durante las operaciones de recuperación, aunque el contenido de FILESTREAM pueda haber sido modificado por la aplicación Win32 finalizada de forma anómala.

Vistas y FileTables

Vistas

Una vista se puede crear en una FileTable como en cualquier otra tabla. Sin embargo, las siguientes consideraciones se aplican a una vista creada en una FileTable:

  • Las vistas no tendrán semántica de FileTable. Es decir, las columnas de la vista (incluidas las columnas de atributos de archivo) se comportan como columnas de vistas normales sin ninguna semántica especial y lo mismo se aplica a las filas que representen archivos y directorios.

  • Las vistas pueden ser actualizables según la semántica de «vista actualizable», pero las restricciones de la tabla subyacente pueden rechazar las actualizaciones, igual que en la propia tabla.

  • La ruta de acceso de un archivo se puede visualizar en la vista añadiéndola como columna explícita en la vista. Por ejemplo:

    CREATE VIEW MP3FILES AS SELECT column1, column2, ..., GetFileNamespacePath() AS PATH, column3,... FROM Documents

Vistas indexadas

Las vistas indizadas actualmente no pueden incluir columnas FILESTREAM ni columnas calculadas o columnas calculadas persistentes que dependan de las columnas FILESTREAM. Además, este comportamiento se mantiene sin cambios con las vistas definidas en la FileTable.

Aislamiento de instantáneas y FileTables

El aislamiento de instantánea de lectura confirmada (RCSI) y el aislamiento de instantánea (SI) se basan en la capacidad de que los lectores dispongan de una instantánea de los datos, incluso cuando se están realizando operaciones de actualización sobre esos datos. Sin embargo, las FileTables permiten acceso de escritura no transaccional a los datos de FILESTREAM. Como resultado, las siguientes restricciones se aplican a estas características de base de datos que contenga FileTables:

  • Una base de datos que contiene FileTables se puede modificar para habilitar RCSI/SI.

  • Cuando el acceso no transaccional se establece en FULL para la base de datos, una transacción que se ejecuta en RCSI o SI se comporta de la siguiente forma:

    • Cualquier lectura Transact-SQL de la columna file_stream de FileTable produce un error. INSERT y UPDATE en la columna siguen funcionando correctamente, siempre y cuando no lean de la columna file_stream.

    • Si la instrucción Transact-SQL especifica sugerencias de tabla READCOMMITTEDLOCK, las lecturas se realizarán correctamente y se aplicarán bloqueos a las filas, en vez de usar las versiones de fila.

    • Las solicitudes transaccionales de apertura de FileStream Win32 también fallan.

    • El acceso Win32 a FileTable sin transacciones se realiza correctamente. No se verán afectadas las consultas internas realizadas por FileTable.

    • La indización de texto completo siempre tendrá éxito, independientemente de las opciones de la base de datos (READ_COMMITTED_SNAPSHOT o ALLOW_SNAPSHOT_ISOLATION).

Bases de datos secundarias legibles

Las mismas consideraciones se aplican a las bases de datos secundarias legibles en cuanto a las instantáneas, como se describe en la sección anterior, Aislamiento de instantánea y FileTables.

Bases de datos contenidas y FileTables

La característica FILESTREAM, de la que depende la característica FileTable, requiere cierta configuración fuera de la base de datos. Por consiguiente, una base de datos que utiliza FILESTREAM o FileTable no está completamente contenida.

Puede establecer la contención de la base de datos en PARTIAL si desea utilizar algunas características de bases de datos contenidas, como usuarios contenidos. Sin embargo, en este caso, algunas de las opciones de base de datos no están contenidas en la base de datos y no se mueven automáticamente cuando lo hace la base de datos.