Compartir a través de


Administrar FileTables

Describe las tareas administrativas comunes para administrar FileTables.

Cómo: Obtener una lista de FileTables y objetos relacionados

Para obtener una lista de FileTables, consulte una de las siguientes vistas del catálogo.

SELECT * FROM sys.filetables;  
GO  
  
SELECT * FROM sys.tables WHERE is_filetable = 1;  
GO  

Para obtener una lista de los objetos definidos por el sistema que se crearon cuando se crearon las FileTables asociadas, consulte la vista de catálogo sys.filetable_system_defined_objects (Transact-SQL).

SELECT object_id, OBJECT_NAME(object_id) AS 'Object Name'  
    FROM sys.filetable_system_defined_objects  
    WHERE object_id = filetable_object_id;  
GO  

Deshabilitar y volver a habilitar el acceso no transaccional en el nivel de base de datos

Para adquirir el acceso exclusivo necesario para determinadas tareas administrativas, es posible que tenga que deshabilitar temporalmente el acceso no transaccional.

Comportamiento de la instrucción ALTER DATABASE al cambiar el nivel de acceso no transaccional

  • Cuando se establece el acceso no transaccional a READ_ONLY o OFF, el comando ALTER DATABASE no devuelve el control al usuario siempre que haya identificadores de archivo abiertos que entren en conflicto con la operación solicitada. Entre los identificadores de archivo que entran en conflicto con esta operación se incluyen los siguientes:

    • Cuando se establece el acceso a NONE, se cierran todos los identificadores de archivo abiertos.

    • Cuando se establece el acceso a READ_ONLY, todos los identificadores de archivo abiertos para el acceso de escritura.

    Para obtener información sobre cómo matar los identificadores de archivo abiertos, vea Matar identificadores de archivo abiertos asociados con una FileTable en este tema.

    Si el comando ALTER DATABASE se cancela o termina con un tiempo de espera, no se cambia el nivel de acceso transaccional.

  • Si llama a la instrucción ALTER DATABASE con una cláusula de terminación> WITH <(ROLLBACK AFTER entero [ SECONDS ] | ROLLBACK IMMEDIATE | NO_WAIT), se eliminan todos los identificadores de archivo no transaccionales abiertos.

Advertencia

Cerrar manejadores de archivos abiertos puede hacer que los usuarios pierdan datos no guardados. Este comportamiento es coherente con el comportamiento del propio sistema de archivos.

Efectos de deshabilitar el acceso no transaccional

Cambiar el nivel de acceso no transaccional en el nivel de base de datos tiene los siguientes efectos en los directorios de FileTable en el directorio de nivel de base de datos:

  • Cuando se establece el acceso a NONE, todos los directorios de FileTable y su contenido ya no son accesibles ni visibles.

  • Al establecer el acceso a READ_ONLY, todos los directorios de FileTable y su contenido también son de solo lectura.

Deshabilitar FILESTREAM en el nivel de instancia tiene los siguientes efectos en los directorios de nivel de base de datos de esa instancia y los directorios de FileTable en ellos:

  • Ninguno de los directorios de nivel de base de datos de la instancia está visible si FILESTREAM está deshabilitado en el nivel de instancia.

Cómo: Deshabilitar y volver a habilitar el acceso no transaccional en el nivel de base de datos

Para más información, vea Opciones de ALTER DATABASE SET (Transact-SQL).

Para deshabilitar el acceso total no transaccional
Llame a la instrucción ALTER DATABASE y ESTABLEZCA el valor de NON_TRANSACTED_ACCESS para READ_ONLY o OFF.

-- Disable write access.  
ALTER DATABASE database_name  
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = READ_ONLY );  
GO  
  
-- Disable non-transactional access.  
ALTER DATABASE database_name  
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = OFF );  
GO  

Para volver a habilitar el acceso no transaccional completo
Llame a la instrucción ALTER DATABASE y ESTABLEZCA el valor de NON_TRANSACTED_ACCESS en FULL.

ALTER DATABASE database_name  
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL );  
GO  

Cómo: Garantizar la visibilidad de las FileTables en una base de datos

Un directorio de nivel de base de datos y los directorios de FileTable en él son visibles cuando se cumplen todas estas condiciones:

  1. FILESTREAM está habilitado en el nivel de instancia.

  2. El acceso no transaccional está habilitado en el nivel de base de datos.

  3. Se ha especificado un directorio válido en el nivel de base de datos.

Deshabilitar y volver a habilitar el espacio de nombres FileTable en el nivel de tabla

Al deshabilitar el espacio de nombres FileTable, se deshabilitan todas las restricciones y desencadenadores definidos por el sistema que se crearon con FileTable. Esto es útil en los casos en los que una FileTable debe reorganizarse a gran escala mediante operaciones de Transact-SQL sin incurrir en el gasto de aplicar la semántica de FileTable. Sin embargo, estas operaciones pueden dejar FileTable en un estado incoherente y pueden evitar que se vuelva a habilitar el espacio de nombres FileTable.

La deshabilitación de un espacio de nombres de FileTable tiene los siguientes resultados:

  • Las columnas y los datos de FileTable no se quitan físicamente de la tabla.

  • El directorio FileTable y los archivos y directorios que contiene desaparecen del sistema de archivos y no están disponibles para operaciones de entrada/salida de archivos.

  • Las columnas de FileTable definidas por el sistema no se pueden quitar ni volver a crear; Sin embargo, de lo contrario, se comportan como columnas normales para las operaciones DML.

  • Los manejadores de archivos abiertos impiden que se deshabiliten las restricciones de FileTable, ya que esta operación requiere bloquear el esquema de la tabla.

  • El cumplimiento de toda la semántica de FileTable, incluidas las restricciones y desencadenadores definidos por el sistema, se detiene después de deshabilitar el espacio de nombres de FileTable.

Volver a habilitar un espacio de nombres FileTable tiene los siguientes resultados:

  • La tabla de archivos se verifica para comprobar su coherencia. Si se encuentran incoherencias, se genera un error y la FileTable permanece deshabilitada; De lo contrario, FileTable se vuelve a habilitar.

  • Se restaura la aplicación de la semántica de FileTable, incluidas las restricciones y desencadenadores definidos por el sistema.

  • El directorio FileTable y los archivos y directorios que contiene se vuelven visibles en el sistema de archivos y están disponibles para el acceso de E/S de archivos.

Instrucciones para deshabilitar y volver a habilitar el espacio de nombres FileTable en el nivel de la tabla

Llame a la instrucción ALTER TABLE con la opción { ENABLE | DISABLE } FILETABLE_NAMESPACE.

Para deshabilitar el espacio de nombres FileTable

ALTER TABLE filetable_name  
   DISABLE FILETABLE_NAMESPACE;  
GO  

Para volver a habilitar el espacio de nombres FileTable

ALTER TABLE filetable_name  
   ENABLE FILETABLE_NAMESPACE;  
GO  

Eliminación de descriptores de archivo abiertos asociados con una FileTable

El mantenimiento de identificadores abiertos para los archivos almacenados en una FileTable puede impedir el acceso exclusivo necesario para determinadas tareas administrativas. Para habilitar tareas urgentes, es posible que tenga que eliminar los identificadores de archivos abiertos asociados a una o varias FileTables.

Advertencia

Cerrar manejadores de archivos abiertos puede hacer que los usuarios pierdan datos no guardados. Este comportamiento es coherente con el comportamiento del propio sistema de archivos.

Cómo: Obtener una lista de identificadores de archivo abiertos asociados a una FileTable

Consulte la vista de catálogo sys.dm_filestream_non_transacted_handles (Transact-SQL).

SELECT * FROM sys.dm_filestream_non_transacted_handles;  
GO  

Cómo eliminar los identificadores de archivo abierto asociados con una FileTable

Llame al procedimiento almacenado sp_kill_filestream_non_transacted_handles (Transact-SQL) con los argumentos adecuados para eliminar todos los identificadores de archivo abiertos en la base de datos o en FileTable, o para eliminar un identificador específico.

USE database_name;  
  
-- Kill all open handles in all the filetables in the database.  
EXEC sp_kill_filestream_non_transacted_handles;  
GO  
  
-- Kill all open handles in a single filetable.  
EXEC sp_kill_filestream_non_transacted_handles @table_name = 'filetable_name';  
GO  
  
-- Kill a single handle.  
EXEC sp_kill_filestream_non_transacted_handles @handle_id = integer_handle_id;  
GO  

Cómo: Identificar los bloqueos mantenidos por FileTables

La mayoría de los bloqueos tomados por FileTables corresponden a los archivos abiertos por las aplicaciones.

Para identificar los archivos abiertos y los bloqueos asociados
Una el campo request_owner_id en la vista de administración dinámica sys.dm_tran_locks (Transact-SQL) con el campo fcb_id de sys.dm_filestream_non_transacted_handles (Transact-SQL). En algunos casos, el bloqueo no corresponde a un único identificador de archivo abierto.

SELECT opened_file_name  
    FROM sys.dm_filestream_non_transacted_handles  
    WHERE fcb_id IN  
        ( SELECT request_owner_id FROM sys.dm_tran_locks );  
GO  

Seguridad de FileTable

Los archivos y directorios almacenados en FileTables solo están protegidos por la seguridad de SQL Server. La seguridad basada en tablas y columnas se aplica tanto para el acceso al sistema de archivos como al acceso a Transact-SQL. No se admiten las API de seguridad del sistema de archivos de Windows ni la configuración de ACL.

Los permisos de seguridad y acceso que se aplican a los grupos de archivos y contenedores FILESTREAM también se aplican a FileTables, ya que los datos del archivo se almacenan como una columna FILESTREAM en FileTable.

Seguridad y acceso Transact-SQL de FileTable
Transact-SQL acceso a los datos de FileTables está protegido de la misma manera que cualquier otra tabla. Las comprobaciones de seguridad de nivel de columna y tabla adecuadas se realizan para cada operación que tenga acceso o cambie los datos.

Seguridad de FileTable y acceso al sistema de archivos
Las API del sistema de archivos requieren los permisos adecuados de SQL Server en toda la fila de la tabla FileTable (es decir, el permiso de nivel de tabla) para abrir un identificador para un archivo o directorio almacenado en FileTable. Si el usuario no tiene el permiso de SQL Server adecuado en ninguna columna de FileTable, se deniega el acceso al sistema de archivos.

Backup y FileTables

Cuando se usa SQL Server para realizar una copia de seguridad de una FileTable, se realiza una copia de seguridad de los datos FILESTREAM con los datos estructurados de la base de datos. Si no desea realizar una copia de seguridad de datos FILESTREAM con datos relacionales, puede usar una copia de seguridad parcial para excluir grupos de archivos FILESTREAM.

Coherencia transaccional de las copias de seguridad de FileTable

Muchas herramientas y operaciones administrativas ( incluida la copia de seguridad, la copia de seguridad del registro y la replicación transaccional) leen datos transaccionalesmente coherentes mediante la lectura de los registros de transacciones. En este momento, leen cualquier dato de FILESTREAM que se haya actualizado como parte de una transacción. Cuando el acceso no transaccional no está habilitado en el nivel de base de datos, estas herramientas y operaciones funcionan con coherencia transaccional completa.

Sin embargo, cuando se habilita el acceso no transaccional completo, una FileTable podría contener datos que se actualizaron más recientemente (a través de una actualización no transaccional) que la transacción que lee la herramienta o el proceso desde el registro de transacciones. Esto significa que una operación de restauración "a un momento dado" en una transacción específica puede contener datos FILESTREAM más recientes que esa transacción. Este es el comportamiento esperado cuando se permiten actualizaciones no transaccionales en FileTables.

SQL Server Profiler y FileTables

SQL Server Profiler puede capturar las operaciones de abrir y cerrar archivos de Windows en la salida de seguimiento de los archivos almacenados en una FileTable.

Auditoría y FileTables

FileTable se puede auditar igual que cualquier otra tabla. Sin embargo, los patrones de acceso de Win32 no son operaciones basadas en conjuntos. Una sola acción del sistema de archivos se traduce en varias operaciones DML Transact-SQL. Por ejemplo, abrir un archivo en Microsoft Word se traduce en varias operaciones de abrir, cerrar, crear, renombrar y eliminar, y en las actividades correspondientes de DML Transact-SQL. Esto da como resultado registros de auditoría detallados en los que es difícil correlacionar los registros entre las acciones del sistema de archivos y los registros de auditoría de DML correspondientes Transact-SQL.

DBCC y FileTables

Puede usar DBCC CHECKCONSTRAINTS para validar las restricciones en una FileTable, incluidas las restricciones definidas por el sistema.

Véase también

Compatibilidad de FileTable con otras características de SQL Server
DDL de FileTable, funciones, procedimientos almacenados y vistas