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, consulta 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 FILESTREAM y FileTable con grupos de disponibilidad Always On (SQL Server).

Particionar 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 y la recuperación transaccionales no son posibles con 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 desencadenan operaciones CREAT o ALTER DATABASE, así como operaciones CREATE o 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. No se evitará una reversión en una transacción dentro del cuerpo del desencadenador, pero no se revierten los cambios realizados en la FILESTREAM. Este intento de reversión también puede impedir que se activen 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 los identificadores Win32, como eliminar explícitamente los identificadores Win32 por parte de un administrador O un bloqueo de la base de datos, no ejecuta desencadenadores de usuario durante las operaciones de recuperación, aunque quizá la terminación anómala de la aplicación Win32 pueda haber cambiado el contenido de FILESTREAM.

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 se pueden actualizar en función de la semántica de «vista actualizable», pero las restricciones de la tabla subyacente pueden rechazar las actualizaciones como en la tabla.

  • La ruta de acceso al archivo de un archivo se puede mostrar agregándola como columna explícita en la vista. Por ejemplo:

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

Vistas indizadas

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ánea y FileTables

El aislamiento de instantánea de lectura confirmada (RCSI) y el aislamiento de instantánea (SI) confían en la posibilidad de disponer de una instantánea de los datos disponibles para los lectores, aunque se produzcan operaciones de actualización en los datos. Sin embargo, las FileTables permiten el acceso de escritura no transaccional a los datos de secuencia de archivo. 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 se seguirán ejecutando correctamente en la columna, en tanto en cuanto no lean en 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.

    • Además, se producirá un error en las solicitudes de apertura de FileStream de Win32 con transacciones.

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

    • La indización de texto completo siempre se realizará correctamente, independientemente de cuáles sean 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 independientes y FileTables

La característica FILESTREAM de la función de FileTable depende requiere cierta configuración fuera de la base de datos. Por consiguiente, una base de datos que utiliza FILESTREAM o FileTable no es totalmente independiente.

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.