Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Describe cómo funciona la E/S del sistema de archivos en una FileTable.
Introducción a las API de E/S de archivos 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 admiten el acceso no transaccional a través del amplio conjunto de API de E/S de archivos disponibles.
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 lógica del archivo o directorio. Para más información, consulte Work with Directories and Paths in FileTables.
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 del sistema de archivos 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 todos los indicadores de disposición de creación, los modos de uso compartido y los modos de acceso. Esto incluye la creación, la eliminación y la modificación local 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 de Transact-SQL simultáneas 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 escritura o actualización de E/S de archivos en una FileTable no son transaccionales. es decir, no hay ninguna transacción de SQL Server enlazada a estas operaciones, y no se proporcionan garantías ACID.
Se admiten en FileTable todas las operaciones de E/S de archivos en streaming y las actualizaciones en el mismo lugar.
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 con una operación de Transact-SQL.
Operaciones del sistema de archivos compatibles
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 de discos
Administración del volumen
NTFS transaccional
Consideraciones adicionales para el acceso de E/S de archivos a FileTables
Uso de nombres de Virtual Network (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, vea FILESTREAM y FileTable con grupos de disponibilidad Always On (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 llevar a cabo actualizaciones parciales en contexto del contenido de FILESTREAM. Este comportamiento difiere del acceso transaccional a FILESTREAM mediante un identificador obtenido al llamar a OpenSQLFILESTREAM() y al pasar un contexto de transacción explícito.
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. Pero 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 transacción en datos 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 acceder a la columna FILESTREAM de una FileTable mediante acceso transaccional a FILESTREAM 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 concurrencia
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 de 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 activarán como parte de estas operaciones.
Funcionalidad del sistema de archivos admitida en FileTables
| Capacidad | Compatible | Comentarios |
|---|---|---|
| Oplocks | Sí | Se admiten los bloqueos oportunistas de nivel 2, nivel 1, lote y filtro. |
| Atributos extendidos | No | |
| Puntos de reanálisis | No | |
| ACL persistentes | No | |
| Secuencias con nombre | No | |
| Archivos dispersos | Sí | 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 | Sí | |
| Cifrado | Sí | |
| TxF | No | |
| Identificadores de archivo | No | |
| Identificadores de objeto | No | |
| Vínculos simbólicos | No | |
| Enlaces duros | No | |
| Nombres cortos | No | |
| Notificaciones de cambio de directorio | No | |
| Bloqueo de intervalo de bytes | Sí | Las solicitudes de bloqueo de rango de bytes se pasan al sistema de archivos NTFS. |
| Archivos mapeados en memoria | No | |
| Cancelar E/S | 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). Se pueden usar las capacidades de seguimiento de cambios de SQL Server para capturar información similar. |