Gestione di tabelle FileTableManage FileTables

Vengono descritte attività amministrative comuni per la gestione di tabelle FileTable.Describes common administrative tasks for managing FileTables.

Per ottenere un elenco di tabelle FileTable, eseguire una query su una delle viste del catalogo riportate di seguito:To get a list of FileTables, query one of the following catalog views:

SELECT * FROM sys.filetables;  
GO  

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

Per ottenere un elenco degli oggetti definiti dal sistema creati quando sono state create le tabelle FileTable associate, eseguire una query sulla vista del catalogo sys.filetable_system_defined_objects (Transact-SQL).To get a list of the system-defined objects that were created when the associated FileTables were created, query the catalog view sys.filetable_system_defined_objects (Transact-SQL).

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

Disabilitare e riabilitare l'accesso non transazionale a livello di database Disabling and Re-enabling Non-Transactional Access at the Database Level

Per acquisire l'accesso esclusivo necessario per determinate attività di amministrazione, può essere necessario disabilitare temporaneamente l'accesso non transazionale.To acquire the exclusive access that is required for certain administrative tasks, you may have to disable non-transactional access temporarily.

Comportamento dell'istruzione ALTER DATABASE in caso di modifica del livello di accesso non transazionaleBehavior of the ALTER DATABASE statement when changing the level of non-transactional access

  • Quando si imposta l'accesso non transazionale su READ_ONLY o OFF, il comando ALTER DATABASE non restituisce il controllo all'utente finché sono presenti handle di file aperti che creano conflitti con l'operazione richiesta.When you set non-transactional access to READ_ONLY or OFF, the ALTER DATABASE command does not return control to the user as long as there are open file handles that conflict with the requested operation. Gli handle di file che creano conflitti con questa operazione includono gli elementi seguenti:The file handles that conflict with this operation include the following:

    • Quando l'accesso viene impostato su NESSUNO, tutti gli handle di file aperti.When you are setting access to NONE, all open file handles.

    • Quando l'accesso viene impostato su READ_ONLY, tutti gli handle di file aperti per l'accesso in scrittura.When you are setting access to READ_ONLY, all file handles opened for write access.

      Per informazioni sulla terminazione degli handle di file aperti, vedere Terminazione di handle di file aperti associati a una tabella FileTable in questo argomento.For information about killing open file handles, see Killing Open File Handles Associated with a FileTable in this topic.

      Se il comando ALTER DATABASE è annullato o termina con un timeout, il livello di accesso transazionale non viene modificato.If the ALTER DATABASE command is canceled or ends with a timeout, then the level of transactional access is not changed.

  • Se viene chiamata l'istruzione ALTER DATABASE con una clausola WITH <terminazione> (ROLLBACK AFTER integer [ SECONDS ] | ROLLBACK IMMEDIATE | NO_WAIT), vengono terminati tutti gli handle di file non transazionali aperti.If you call the ALTER DATABASE statement with a WITH <termination> clause (ROLLBACK AFTER integer [ SECONDS ] | ROLLBACK IMMEDIATE | NO_WAIT), then all open non-transactional file handles are killed.

Avviso

La terminazione di handle di file aperti può causare la perdita dei dati non salvati da parte degli utenti.Killing open file handles may cause users to lose unsaved data. Questo comportamento è coerente con quello del file system stesso.This behavior is consistent with the behavior of the file system itself.

Effetti della disabilitazione dell'accesso non transazionaleEffects of disabling non-transactional access

La modifica del livello dell'accesso non transazionale a livello del database comporta gli effetti seguenti sulle directory FileTable all'interno della directory a livello di database:Changing the level of non-transactional access at the database level has the following effects on the FileTable directories under the database-level directory:

  • Quando l'accesso viene impostato su NESSUNO, tutte le directory FileTable e il relativo contenuto non sono più accessibili o visibili.When you set access to NONE, then all the FileTable directories and their contents are no longer accessible or visible.

  • Quando l'accesso viene impostato su READ_ONLY, anche tutte le directory FileTable e il relativo contenuto sono in sola lettura.When you set access to READ_ONLY, then all the FileTable directories and their contents are also read-only.

    La disabilitazione di FILESTREAM a livello di istanza comporta gli effetti seguenti sulle directory a livello di database nell'istanza e la tabella FileTable all'interno di esse:Disabling FILESTREAM at the instance level has the following effects on the database-level directories on that instance, and the FileTable directories under them:

  • Nessuna delle directory a livello di database nell'istanza è visibile se FILESTREAM è disabilitato a livello di istanza.None of the database-level directories on the instance are visible if FILESTREAM is disabled at the instance level.

Procedura: disabilitare e riabilitare l'accesso non transazionale a livello di database How To: Disable and Re-enable Non-Transactional Access at the Database Level

Per altre informazioni, vedere Opzioni ALTER DATABASE SET (Transact-SQL).For more information, see ALTER DATABASE SET Options (Transact-SQL).

Per disabilitare l'accesso non transazionale completoTo disable full non-transactional access
Chiamare l'istruzione ALTER DATABASE e usare SET per impostare il valore di NON_TRANSACTED_ACCESS su READ_ONLY o OFF.Call the ALTER DATABASE statement and SET the value of NON_TRANSACTED_ACCESS to READ_ONLY or 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  

Per riabilitare l'accesso non transazionale completoTo re-enable full non-transactional access
Chiamare l'istruzione ALTER DATABASE e usare SET per impostare il valore di NON_TRANSACTED_ACCESS su FULL.Call the ALTER DATABASE statement and SET the value of NON_TRANSACTED_ACCESS to FULL.

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

Procedura: assicurare la visibilità delle tabelle FileTables in un database How to: Ensure the Visibility of the FileTables in a Database

Una directory a livello di database e le directory FileTable in essa contenute sono visibili se si verificano tutte le condizioni seguenti:A database-level directory and the FileTable directories under it are visible when all of these conditions are true:

  1. FILESTREAM è abilitato a livello di istanza.FILESTREAM is enabled at the instance level.

  2. L'accesso non transazionale è abilitato a livello di database.Non-transactional access is enabled at the database level.

  3. Una directory valida è stata specificata al livello di database.A valid directory has been specified at the database level.

Disabilitare e riabilitare lo spazio dei nomi FileTable a livello di tabella Disabling and Re-enabling the FileTable Namespace at the Table Level

Disabilitando lo spazio dei nomi della tabella FileTable vengono disabilitati tutti i vincoli e i trigger definiti dal sistema creati con la tabella FileTable.Disabling the FileTable namespace disables all the system-defined constraints and triggers that were created with the FileTable. Ciò è utile nei casi in cui una tabella FileTable deve essere riorganizzata su larga scala utilizzando operazioni Transact-SQLTransact-SQL , ma si desidera evitare le spese correlate all'applicazione di semantica della tabella FileTable.This is useful in cases where a FileTable has to be reorganized on a large scale by using Transact-SQLTransact-SQL operations without incurring the expense of enforcing FileTable semantics. Queste operazioni possono, tuttavia, lasciare la tabella FileTable in uno stato non coerente e impedire l'operazione di abilitazione dello spazio dei nomi di Filetable.However these operations can leave the FileTable in an inconsistent state, and can prevent the re-enabling of the FileTable namespace.

La disabilitazione di uno spazio dei nomi FileTable comporta i risultati riportati di seguito:Disabling a FileTable namespace has the following results:

  • Le colonne e i dati della tabella FileTable non vengono eliminati fisicamente dalla tabella.FileTable columns and data are not physically dropped from the table.

  • La directory FileTable, i file e le directory in essa contenute vengono rimossi dal file system e non sono disponibili per l'accesso I/O al file.The FileTable directory and the files and directories that it contains disappear from the file system and are not available for file i/o access.

  • Le colonne della tabella FileTable definite dal sistema non possono essere eliminate e ricreate, diversamente si comportano come colonne ordinarie per le operazioni DML.System-defined FileTable columns cannot be dropped and recreated; otherwise, however, they behave like ordinary columns for DML operations.

  • Gli handle di file aperti impediscono la disabilitazione dei vincoli FileTable, poiché questa operazione richiede un blocco dello schema sulla tabella.Open file handles prevent the FileTable constraints from being disabled, since this operation requires a schema lock on the table.

  • L'applicazione di tutta la semantica FileTable, incluso i vincoli e i trigger definiti dal sistema, si arresta dopo la disabilitazione dello spazio dei nomi FileTable.Enforcement of all the FileTable semantics, including system-defined constraints and triggers, stops after the FileTable namespace is disabled.

    La riabilitazione di uno spazio dei nomi FileTable comporta i risultati riportati di seguito:Re-enabling a FileTable namespace has the following results:

  • Viene verificata la coerenza della tabella FileTable.The FileTable is checked for consistency. Quando vengono individuate incoerenze, viene generato un errore e FileTable rimane disabilitata; in caso contrario la tabella FileTable viene riabilitata.If inconsistencies are found, then an error is raised and the FileTable remains disabled; otherwise, the FileTable is re-enabled.

  • L'applicazione della semantica FileTable, incluso i vincoli e i trigger definiti dal sistema, viene ripristinata.The enforcement of FileTable semantics, including system-defined constraints and triggers, is restored.

  • La directory FileTable, i file e le directory in essa contenute diventano visibili nel file system e disponibili per l'accesso I/O al file.The FileTable directory and the files and directories that it contains become visible in the file system and become available for file i/o access.

Procedura: disabilitare e riabilitare lo spazio dei nomi FileTable a livello di tabella How To: Disable and Re-enable the FileTable Namespace at the Table Level

Chiamare l'istruzione ALTER TABLE con l'opzione { ENABLE | DISABLE } FILETABLE_NAMESPACE .Call the ALTER TABLE statement with the { ENABLE | DISABLE } FILETABLE_NAMESPACE option.

Per disabilitare lo spazio dei nomi FileTableTo disable the FileTable namespace

ALTER TABLE filetable_name  
DISABLE FILETABLE_NAMESPACE;  
GO  

Per riabilitare lo spazio dei nomi FileTableTo re-enable the FileTable namespace

ALTER TABLE filetable_name  
ENABLE FILETABLE_NAMESPACE;  
GO  

Terminazione di handle di file aperti associati a una tabella FileTable Killing Open File Handles Associated with a FileTable

Gli handle aperti per i file archiviati in una tabella FileTable possono impedire l'accesso esclusivo necessario per determinate attività di amministrazione.Open handles to the files stored in a FileTable can prevent the exclusive access that is required for certain administrative tasks. Per consentire attività urgenti, può essere necessario terminare gli handle di file aperti associati a una o più tabelle FileTable.To enable urgent tasks, you may have to kill open file handles associated with one or more FileTables.

Avviso

La terminazione di handle di file aperti può causare la perdita dei dati non salvati da parte degli utenti.Killing open file handles may cause users to lose unsaved data. Questo comportamento è coerente con quello del file system stesso.This behavior is consistent with the behavior of the file system itself.

Procedura: recuperare un elenco di handle di file aperti associati a una tabella FileTable How To: Get a List of Open File Handles Associated with a FileTable

Eseguire una query sulla vista del catalogo sys.dm_filestream_non_transacted_handles (Transact-SQL).Query the catalog view sys.dm_filestream_non_transacted_handles (Transact-SQL).

SELECT * FROM sys.dm_filestream_non_transacted_handles;  
GO  

Procedura: terminare gli handle di file aperti associati a una tabella FileTable How To: Kill Open File Handles Associated with a FileTable

Chiamare la stored procedure sp_kill_filestream_non_transacted_handles (Transact-SQL) con gli argomenti appropriati per terminare tutti gli handle di file aperti nel database o nella tabella FileTable o per terminare un handle specifico.Call the stored procedure sp_kill_filestream_non_transacted_handles (Transact-SQL) with the appropriate arguments to kill all open file handles in the database or in the FileTable, or to kill a specific handle.

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  

Procedura: identificare i blocchi utilizzati da tabelle FileTable How to: Identify the Locks Held by FileTables

La maggior parte dei blocchi applicati da tabelle FileTable corrisponde a file aperti dalle applicazioni.Most locks taken by FileTables correspond to files opened by applications.

Identificazione di file aperti e blocchi associatiTo identify open files and the associated locks
Aggiungere il campo request_owner_id nella vista a gestione dinamica sys.dm_tran_locks (Transact-SQL) con il campo fcb_id in sys.dm_filestream_non_transacted_handles (Transact-SQL).Join the request_owner_id field in the dynamic management view sys.dm_tran_locks (Transact-SQL) with the fcb_id field in sys.dm_filestream_non_transacted_handles (Transact-SQL). In alcuni casi, il blocco non corrisponde a un solo handle di file aperto.In some cases, the lock does not correspond to a single open file handle.

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  

Sicurezza delle tabelle FileTable FileTable Security

I file e le directory archiviati nelle tabelle FileTable sono protetti solo dalla sicurezza di SQL.The files and directories stored in FileTables are secured by SQL Server security only. La sicurezza basata sulla tabella e sulla colonna è applicata per l'accesso al file system nonché per l'accesso a Transact-SQLTransact-SQL .Table and column-based security is enforced for file system access as well as Transact-SQLTransact-SQL access. Le API di sicurezza del file system di Windows e le impostazioni ACL non sono supportate.Windows file system security APIs and ACL settings are not supported.

Alle tabelle File Table vengono applicate anche le autorizzazioni di sicurezza e accesso applicabili a filegroup e contenitori FILESTREAM, in quanto i dati dei file vengono archiviati come colonna FILESTREAM nella tabella FileTable.The security and access permissions that are applicable to FILESTREAM filegroups and containers also apply to FileTables, since the file data is stored as a FILESTREAM column in the FileTable.

Sicurezza delle tabelle FileTable e accesso Transact-SQLFileTable Security and Transact-SQL Access
Transact-SQLTransact-SQL L'accesso ai dati nelle tabelle FileTable è protetto con la stessa modalità di qualsiasi altra tabella. access to data in FileTables is secured in the same way as any other table. Per ogni operazione di accesso o modifica dei dati, vengono effettuati controlli di sicurezza appropriati a livello di tabella e colonna.Appropriate table and column-level security checks are done for every operation that accesses or changes the data.

Sicurezza delle tabelle FileTable e accesso al file systemFileTable Security and File System Access
Per aprire un handle per una directory o un file archiviato nella tabella FileTable tramite API del file system, saranno necessarie autorizzazioni SQL ServerSQL Server appropriate per l'intera riga nella tabella FileTable (ovvero autorizzazioni a livello di tabella).File system APIs require appropriate SQL ServerSQL Server permissions on the entire row in the FileTable (that is, table-level permission) to open a handle to a file or directory stored in the FileTable. Se l'utente non dispone dell'autorizzazione SQL ServerSQL Server appropriata per una qualsiasi colonna nella tabella FileTable, l'accesso al file system viene negato.If the user does not have the appropriate SQL ServerSQL Server permission on any column in the FileTable, then file system access is denied.

Backup e tabelle FileTable Backup and FileTables

Quando si utilizza SQL ServerSQL Server per eseguire il backup di una tabella FileTable, viene eseguito il backup dei dati FILESTREAM con i dati strutturati nel database.When you use SQL ServerSQL Server to back up a FileTable, the FILESTREAM data is backed up with the structured data in the database. Se non si desidera eseguire il backup dei dati FILESTREAM con i dati relazionali, è possibile utilizzare un backup parziale per escludere i filegroup FILESTREAM.If you do not want to back up FILESTREAM data with relational data, you can use a partial backup to exclude FILESTREAM filegroups.

Consistenza transazionale dei backup di FileTableTransactional Consistency of FileTable Backups

Molti strumenti e operazioni di amministrazione, quali backup, backup del log e replica transazionale, leggono dati coerenti a livello di transazione tramite la lettura dei log delle transazioni.Many administrative tools and operations, (including backup, log backup, and transactional replication) read transactionally consistent data by reading the transaction logs. A questo punto, leggono tutti i dati FILESTREAM aggiornati come parte di una transazione.At this time, they read any FILESTREAM data updated as part of a transaction. Quando l'accesso non transazionale non è abilitato a livello di database, questi strumenti e operazioni funzionano con coerenza transazionale completa.When non-transactional access is not enabled at the database level, these tools and operations work with full transactional consistency.

Quando invece è abilitato l'accesso non transazionale completo, una tabella FileTable potrebbe contenere dati aggiornati più recentemente (tramite un aggiornamento non transazionale) rispetto alla transazione letta dallo strumento o dal processo dal log delle transazioni.However, when full non-transactional access is enabled, then a FileTable could contain data that was updated more recently (through a non-transactional update) than the transaction that the tool or process is reading from the transaction log. Ciò significa che un'operazione di ripristino temporizzata di una transazione specifica può contenere dati FILESTREAM più recenti di tale transazione.This means that a “point in time” restore operation to a specific transaction may contain FILESTREAM data that is more recent than that transaction. Si tratta del comportamento previsto quando nelle tabelle FileTable sono consentiti gli aggiornamenti non transazionali.This is the expected behavior when non-transactional updates are allowed on FileTables.

SQL Server Profiler e tabelle FileTable SQL Server Profiler and FileTables

SQL ServerSQL Server Il profiler può acquisire le operazioni di Windows File Open e File Close nell'output di traccia per i file archiviati in una tabella FileTable. Profiler can capture the Windows File Open and File Close operations in trace output for files that are stored in a FileTable.

Controllo e tabelle FileTable Auditing and FileTables

È possibile controllare una tabella FileTable proprio come qualsiasi altra tabella.FileTable can be audited just like any other table. I modelli di accesso Win32, tuttavia, non sono operazioni basate su set.However, Win32 access patterns are not set based operations. Una singola azione nel file system si traduce in più operazioni DML Transact-SQL.A single action in the file system translates into multiple Transact-SQL DML operations. L'apertura di un file in Microsoft Word, ad esempio, si traduce in più operazioni di apertura/chiusura/creazione/ridenominazione/eliminazione e nelle attività DML Transact-SQL corrispondenti.For example, opening a file in Microsoft Word translates into multiple open/close/create/rename/delete operations and corresponding Transact-SQL DML activities. Ciò comporta record di controllo dettagliati in cui è difficile correlare i record tra azioni del file system e i record di controllo DML Transact-SQL corrispondenti.This results in verbose audit records where it is hard to correlate records between file system actions and corresponding Transact-SQL DML audit records.

DBCC e tabelle FileTable DBCC and FileTables

È possibile utilizzare DBCC CHECKCONSTRAINTS per convalidare i vincoli su una tabella FileTable, inclusi i vincoli definiti dal sistema.You can use DBCC CHECKCONSTRAINTS to validate the constraints on a FileTable including system-defined constraints.

Vedere ancheSee Also

Compatibilità di FileTable con altre funzionalità di SQL Server FileTable Compatibility with Other SQL Server Features
DDL FileTable, funzioni, stored Procedure e visteFileTable DDL, Functions, Stored Procedures, and Views