Obtener acceso a FileTables con API de entrada-salida de archivo

Se aplica a:SQL Server

Describe el funcionamiento de E/S del sistema de archivos en una FileTable.

Empezar a usar API de E/S con FileTables

El principal uso previsto para las FileTables se realizará a través del sistema de archivos de Windows y las API de E/S de archivos. Las FileTables no admiten el acceso no transaccional a través del variado conjunto de API de E/S de archivos disponibles.

  1. El acceso de las API de E/S de archivos se inicia normalmente mediante la obtención de una ruta de acceso UNC lógica del archivo o directorio. Las aplicaciones pueden usar una instrucción Transact-SQL con la función GetFileNamespacePath (Transact-SQL) para obtener la ruta de acceso lógica del archivo o directorio. Para más información, consulte Work with Directories and Paths in FileTables.

  2. A continuación la aplicación usa esta ruta de acceso lógica para obtener un identificador del archivo o directorio y hacer algo con el objeto. La ruta de acceso se puede pasar a cualquier función de API admitida, como CreateFile () o CreateDirectory (), para crear o abrir un archivo y obtener un identificador. El identificador se puede usar después para transmitir datos, enumerar u organizar directorios, obtener o establecer atributos de archivo, eliminar archivos o directorios, etc.

Crear los archivos y directorios de una FileTable

Un archivo o directorio se puede crear en una FileTable llamando a las API de E/S de archivos, como CreateFile o CreateDirectory.

  • Se admiten todas las marcas de disposición de creación, todos los modos de uso compartido y todos los modos de acceso, incluidas la creación, eliminación y modificación en contexto de archivos. Asimismo, se admiten las actualizaciones del espacio de nombres de archivos. Es decir, las operaciones de creación y eliminación, cambio de nombre y movimiento de directorios.

  • La creación de un nuevo archivo o directorio se corresponde con la creación de una nueva fila en la FileTable subyacente.

  • En los archivos, los datos de flujo se almacenan en la columna file_stream mientras que, en los directorios, esta columna tiene el valor NULL.

  • En los archivos, la columna is_directory contiene false. En los directorios, esta columna contiene true.

  • El uso compartido y la simultaneidad del acceso se aplican cuando varias operaciones simultáneas de E/S de archivos o operaciones de Transact-SQL afectan al mismo archivo o directorio de la jerarquía.

Leer los archivos y directorios de una FileTable

La semántica de aislamiento de lectura confirmada se aplica en SQL Server a todas las operaciones de acceso de E/S de archivos, para datos de atributo y de flujo.

Escribir y actualizar los archivos y directorios de una FileTable

  • Todas las operaciones de lectura y escritura de E/S de los archivos de una FileTable son no transaccionales; es decir, no hay ninguna transacción de SQL Server enlazada a estas operaciones, y no se proporcionan garantías ACID.

  • Todas las actualizaciones de transmisión de datos o en contexto de E/S de archivos son compatibles con la FileTable.

  • Las actualizaciones de los atributos o datos de FILESTREAM a través de las API de E/S de archivos tendrán como resultado la actualización de las columnas de atributos de archivos y la columna file_stream correspondiente de la FileTable.

Eliminar los archivos y directorios de una FileTable

Toda la semántica de las API de E/S de archivos de Windows se aplica cuando se elimina un archivo o directorio.

  • Se produce un error al eliminar un directorio si este contiene archivos o subdirectorios.

  • Al eliminar un archivo o directorio, se quita la fila correspondiente de la FileTable. Esto equivale a eliminar la fila a través de una operación de Transact-SQL.

Operaciones compatibles del sistema de archivos

Las FileTables admiten las API del sistema de archivos relacionadas con las siguientes operaciones del sistema de archivos:

  • Administración de directorios

  • Administración de archivos

Las FileTables no admiten las operaciones siguientes:

  • Administración del disco

  • Administración del volumen

  • NTFS de transacciones

Consideraciones adicionales sobre el acceso de E/S de archivos a FileTables

Usar nombres de red virtual (VNN) con grupos de disponibilidad AlwaysOn

Cuando la base de datos que contiene datos de FILESTREAM o FileTable pertenece a un grupo de disponibilidad AlwaysOn, todo acceso a los datos de FILESTREAM o FileTable a través de las API del sistema de archivos debe usar los VNN en lugar de nombres de equipo. Para obtener más información, consulte FILESTREAM y FileTable con Always On grupos de disponibilidad (SQL Server).

Actualizaciones parciales

Se puede usar un identificador grabable obtenido para los datos FILESTREAM en una FileTable mediante la función GetFileNamespacePath (Transact-SQL) para realizar actualizaciones parciales en contexto al contenido de FILESTREAM. Este comportamiento es diferente al acceso de FILESTREAM con transacciones a través del identificador que se obtiene llamando a OpenSQLFILESTREAM() y pasando un contexto de transacción explícita.

Semántica transaccional

Cuando se obtiene acceso a los archivos de una FileTable con las API de E/S de archivos, estas operaciones no están asociadas con ninguna transacción de usuario y tienen las características adicionales siguientes:

  • Como el acceso sin transacciones de los datos de FILESTREAM de una FileTable no está asociado a ninguna transacción, no tiene una semántica específica de aislamiento. Sin embargo, SQL Server puede usar transacciones internas para aplicar la semántica de bloqueo o simultaneidad en los datos de FileTable. Cualquier transacción interna de este tipo se realiza con el aislamiento de lectura confirmada.

  • No existen garantías ACID para estas operaciones sin transacciones de los datos de FILESTREAM. Las garantías de coherencia son similares a las de las actualizaciones de archivos efectuadas por las aplicaciones del sistema de archivos.

  • Estos cambios no se pueden revertir.

Pero también se puede obtener acceso a la columna FILESTREAM de una FileTable a través de FILESTREAM con transacciones llamando a OpenSqlFileStream () . Este tipo de acceso puede ser totalmente transaccional y respetará todos los niveles de coherencia transaccional que se admiten actualmente.

Control de simultaneidad

SQL Server aplica el control de simultaneidad para el acceso a FileTable entre las aplicaciones del sistema de archivos y entre las aplicaciones del sistema de archivos y las aplicaciones transact-SQL. Este control de simultaneidad se logra aplicando los bloqueos adecuados en las filas de la FileTable.

Desencadenadores

La creación, modificación o eliminación de archivos o directorios o de sus atributos a través del sistema de archivos tendrán como resultado las operaciones de inserción, actualización o eliminación correspondientes en la FileTable. Los desencadenadores DML de Transact-SQL asociados se desencadenan como parte de estas operaciones.

Funcionalidad del sistema de archivos admitida en FileTables

Capacidad Compatible Comentarios
Oplocks Se admiten los bloqueos oportunistas de nivel 2, nivel 1, lote y filtro.
Atributos extendidos No
Puntos de análisis No
ACL persistentes No
Flujos con nombre No
Archivos dispersos La dispersión se puede establecer solo en archivos y afecta al almacenamiento del flujo de datos. Dado que los datos de FILESTREAM se almacenan en volúmenes NTFS, la característica FileTable admite archivos dispersos reenviando las solicitudes al sistema de archivos NTFS.
Compresión
Cifrado
TxF No
Identificadores de archivo No
Identificadores de objeto No
Vínculos simbólicos No
Vínculos físicos No
Nombres cortos No
Notificaciones de cambio de directorio No
Bloqueo de intervalo de bytes Las solicitudes de bloqueo de intervalo de butes se pasan al sistema de archivos NTFS.
Archivos asignados en memoria No
Cancelar E/S
Seguridad No Se aplica la seguridad de nivel de recursos compartidos de Windows y la seguridad de nivel de tabla y columna de SQL Server .
Diario USN No Los cambios de metadatos en archivos y directorios de una FileTable son operaciones DML en una base de datos de SQL Server . Por consiguiente, se registran en el archivo de registro de la base de datos correspondiente. Sin embargo, no se registran en el diario de NTFS USN (salvo los cambios de tamaño).

SQL Server se pueden usar para capturar información similar.

Consulte también

Cargar archivos en FileTables
Trabajar con directorios y rutas de acceso de FileTables
Obtener acceso a FileTables con Transact-SQL
DDL de FileTable, funciones, procedimientos almacenados y vistas