Compartir a través de


Obtener acceso a las API de E/S de archivo

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

En este tema

Deseo…

  • Empezar a usar API de E/S con FileTables

  • Crear los archivos y directorios de una FileTable

  • Leer los archivos y directorios de una FileTable

  • Actualizar los archivos y directorios de una FileTable

  • Eliminar los archivos y directorios de una FileTable

Más información

  • Operaciones compatibles del sistema de archivos

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

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

    • Actualizaciones parciales

    • Semántica transaccional

    • Control de simultaneidad

    • Desencadenadores

  • Funcionalidad del sistema de archivos admitida en las FileTables

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 obtener más información, vea Trabajar con directorios y rutas de acceso de 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.

[ARRIBA]

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 de acceso se aplican cuando varias operaciones de E/S de archivos o varias operaciones Transact-SQL simultáneas afectan al mismo archivo o directorio de la jerarquía.

[ARRIBA]

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.

[ARRIBA]

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.

[ARRIBA]

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.

  • La eliminación de un directorio no se realiza correctamente si contiene subdirectorios de archivos.

  • Al eliminar un archivo o directorio, se quita la fila correspondiente de la FileTable. Esto es equivalente a eliminar la fila mediante una operación Transact-SQL.

[ARRIBA]

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

[ARRIBA]

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 utilizar los VNN en lugar de nombres de equipo. Para obtener más información, vea FILESTREAM y FileTable con grupos de disponibilidad AlwaysOn (SQL Server).

Actualizaciones parciales

Se puede usar un identificador de escritura obtenido para los datos de FILESTREAM en una FileTable mediante la función GetFileNamespacePath (Transact-SQL) para realizar actualizaciones parciales en contexto del 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ícito.

[ARRIBA]

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.

Sin embargo, 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.

[ARRIBA]

Control de simultaneidad

SQL Server aplica el control de simultaneidad para el acceso de FileTable entre las aplicaciones del sistema de archivos, así como 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.

[ARRIBA]

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 activarán como parte de estas operaciones.

[ARRIBA]

Funcionalidad del sistema de archivos admitida en FileTables

Capacidad

Admitida

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).

Las funciones de seguimiento de cambios de SQL Server se pueden usar para capturar información similar.

[ARRIBA]

Vea también

Conceptos

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