Abilitazione dei prerequisiti per la tabella FileTableEnable the Prerequisites for FileTable

Viene descritto come abilitare i prerequisiti per la creazione e l'utilizzo di tabelle FileTable.Describes how to enable the prerequisites for creating and using FileTables.

Abilitazione dei prerequisiti per la tabella FileTable Enabling the Prerequisites for FileTable

Per abilitare i prerequisiti per la creazione e l'utilizzo di tabelle FileTable, abilitare gli elementi seguenti:To enable the prerequisites for creating and using FileTables, enable the following items:

Abilitazione di FILESTREAM a livello di istanza Enabling FILESTREAM at the Instance Level

Le tabelle FileTable estendono le funzionalità della caratteristica FILESTREAM di SQL ServerSQL Server.FileTables extend the capabilities of the FILESTREAM feature of SQL ServerSQL Server. È pertanto necessario abilitare FILESTREAM per l'accesso I/O ai file a livello di Windows e nell'istanza di SQL ServerSQL Server prima di poter creare e usare le tabelle FileTable.Therefore you have to enable FILESTREAM for file I/O access at the Windows level and on the instance of SQL ServerSQL Server before you can create and use FileTables.

Procedura: Abilitazione di FILESTREAM a livello di istanza How To: Enable FILESTREAM at the Instance Level

Per informazioni su come abilitare FILESTREAM, vedere Abilitare e configurare FILESTREAM.For information about how to enable FILESTREAM, see Enable and Configure FILESTREAM.

Quando si chiama sp_configure per abilitare FILESTREAM a livello di istanza, è necessario impostare l'opzione filestream_access_level su 2.When you call sp_configure to enable FILESTREAM at the instance level, you have to set the filestream_access_level option to 2. Per altre informazioni, vedere Opzione di configurazione del server filestream access level.For more information, see filestream access level Server Configuration Option.

Procedura: Abilitazione di FILESTREAM attraverso il firewall How To: Allow FILESTREAM through the Firewall

Per informazioni sull'abilitazione di FILESTREAM attraverso il firewall, vedere Configure a Firewall for FILESTREAM Access.For information about how to allow FILESTREAM through the firewall, see Configure a Firewall for FILESTREAM Access.

Fornitura di un filegroup FILESTREAM a livello di database Providing a FILESTREAM Filegroup at the Database Level

Per poter creare FileTable in un database, è necessario che il database disponga di un filegroup FILESTREAM.Before you can create FileTables in a database, the database must have a FILESTREAM filegroup. Per altre informazioni su questo prerequisito, vedere Creare un database abilitato per FILESTREAM.For more information about this prerequisite, see Create a FILESTREAM-Enabled Database.

Abilitazione dell'accesso non transazionale a livello di database Enabling Non-Transactional Access at the Database Level

Le tabelle FileTable consentono alle applicazioni di Windows di ottenere un handle di file Windows per i dati FILESTREAM senza che sia necessaria una transazione.FileTables let Windows applications obtain a Windows file handle to FILESTREAM data without requiring a transaction. Per consentire questo accesso non transazionale ai file archiviati in SQL ServerSQL Server, è necessario specificare il livello desiderato di accesso non transazionale a livello di database per ogni database che conterrà le tabelle FileTable.To allow this non-transactional access to files stored in SQL ServerSQL Server, you have to specify the desired level of non-transactional access at the database level for each database that will contain FileTables.

Procedura: Verifica dell'abilitazione dell'accesso non transazionale nei database How To: Check Whether Non-Transactional Access Is Enabled on Databases

Eseguire una query sulla vista del catalogo sys.database_filestream_options (Transact-SQL) e verificare le colonne non_transacted_access e non_transacted_access_desc.Query the catalog view sys.database_filestream_options (Transact-SQL) and check the non_transacted_access and non_transacted_access_desc columns.

SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc  
    FROM sys.database_filestream_options;  
GO  

Procedura: Abilitazione dell'accesso non transazionale a livello di database How To: Enable Non-Transactional Access at the Database Level

I livelli disponibili di accesso non transazionale sono FULL, READ_ONLY e OFF.The available levels of non-transactional access are FULL, READ_ONLY, and OFF.

Specificare il livello di accesso non transazionale tramite Transact-SQLSpecify the level of non-transactional access by using Transact-SQL

  • Quando si modifica un database esistente, chiamare l'istruzione ALTER DATABASE (Transact-SQL) con l'opzione FILESTREAM NON_TRANSACTED_ACCESS.When you alter an existing database, call the ALTER DATABASE (Transact-SQL) statement with the NON_TRANSACTED_ACCESS FILESTREAM option.

    ALTER DATABASE database_name  
        SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' )  
    

    Specificare il livello di accesso non transazionale tramite SQL Server Management StudioSpecify the level of non-transactional access by using SQL Server Management Studio
    È possibile specificare il livello di accesso non transazionale nel campo Accesso FILESTREAM non transazionale della pagina Opzioni della finestra di dialogo Proprietà database .You can specify the level of non-transactional access in the FILESTREAM Non-transacted Access field of the Options page of the Database Properties dialog box. Per altre informazioni su questa finestra di dialogo, vedere Proprietà del database (pagina Opzioni).For more information about this dialog box, see Database Properties (Options Page).

Specifica di una directory per tabelle FileTable a livello di database Specifying a Directory for FileTables at the Database Level

Quando si abilita l'accesso non transazionale ai file a livello di database, è anche possibile specificare simultaneamente un nome di directory usando l'opzione DIRECTORY_NAME .When you enable non-transactional access to files at the database level, you can optionally provide a directory name at the same time by using the DIRECTORY_NAME option. Se non si specifica un nome di directory quando si abilita l'accesso non transazionale, è necessario specificarlo in seguito prima di poter creare le tabelle FileTable nel database.If you do not provide a directory name when you enable non-transactional access, then you have to provide it later before you can create FileTables in the database.

Nella gerarchia di cartelle FileTable questa directory a livello di database diventa l'elemento figlio del nome di condivisione specificato per FILESTREAM a livello di istanza e l'elemento padre delle tabelle FileTable create nel database.In the FileTable folder hierarchy, this database-level directory becomes the child of the share name specified for FILESTREAM at the instance level, and the parent of the FileTables created in the database. Per altre informazioni, vedere Work with Directories and Paths in FileTables.For more information, see Work with Directories and Paths in FileTables.

Procedura: Specifica di una directory per tabelle FileTable a livello di database How To: Specify a Directory for FileTables at the Database Level

Il nome specificato deve essere univoco in tutta l'istanza per le directory a livello di database.The name that you specify must be unique across the instance for database-level directories.

Specificare una directory per tabelle FileTable tramite Transact-SQLSpecify a directory for FileTables by using Transact-SQL

  • Quando si modifica un database esistente, chiamare l'istruzione ALTER DATABASE (Transact-SQL) con l'opzione FILESTREAM DIRECTORY_NAME.When you alter an existing database, call the ALTER DATABASE (Transact-SQL) statement with the DIRECTORY_NAME FILESTREAM option. Quando si usano queste opzioni per modificare il nome di directory, è necessario bloccare il database in modo esclusivo, senza handle di file aperti.When you use these options to change the directory name, the database must be exclusively locked, with no open file handles.

    ALTER DATABASE database_name  
        SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );  
    GO  
    
  • Quando si collega un database, chiamare l'istruzione CREATE DATABASE (SQL Server Transact-SQL) con l'opzione FOR ATTACH e con l'opzione FILESTREAM DIRECTORY_NAME.When you attach a database, call the CREATE DATABASE (SQL Server Transact-SQL) statement with the FOR ATTACH option and with the DIRECTORY_NAME FILESTREAM option.

    CREATE DATABASE database_name  
        FOR ATTACH WITH FILESTREAM ( DIRECTORY_NAME = N'directory_name' );  
    GO  
    
  • Quando si ripristina un database, chiamare l'istruzione RESTORE (Transact-SQL) con l'opzione FILESTREAM DIRECTORY_NAME.When you restore a database, call the RESTORE (Transact-SQL) statement with the DIRECTORY_NAME FILESTREAM option.

    RESTORE DATABASE database_name  
        WITH FILESTREAM ( DIRECTORY_NAME = N'directory_name' );  
    GO  
    

    Specificare una directory per tabelle FileTable tramite SQL Server Management StudioSpecify a directory for FileTables by using SQL Server Management Studio
    È possibile specificare un nome di directory nel campo Nome di directory FILESTREAM della pagina Opzioni della finestra di dialogo Proprietà database .You can specify a directory name in the FILESTREAM Directory Name field of the Options page of the Database Properties dialog box. Per altre informazioni su questa finestra di dialogo, vedere Proprietà del database (pagina Opzioni).For more information about this dialog box, see Database Properties (Options Page).

Procedura: Visualizzazione dei nomi di directory esistenti per l'istanza How to: View Existing Directory Names for the Instance

Per visualizzare l'elenco di nomi di directory esistenti per l'istanza, eseguire una query sulla vista del catalogo sys.database_filestream_options (Transact-SQL) e verificare la colonna filestream_database_directory_name.To view the list of existing directory names for the instance, query the catalog view sys.database_filestream_options (Transact-SQL) and check the filestream_database_directory_name column.

SELECT DB_NAME ( database_id ), directory_name  
    FROM sys.database_filestream_options;  
GO  

Requisiti e restrizioni per la directory a livello di database Requirements and Restrictions for the Database-Level Directory

  • L'impostazione di DIRECTORY_NAME è facoltativa quando si chiama CREATE DATABASE o ALTER DATABASE.Setting the DIRECTORY_NAME is optional when you call CREATE DATABASE or ALTER DATABASE. Se non si specifica un valore per DIRECTORY_NAME, il nome di directory rimane Null.If you do not specify a value for DIRECTORY_NAME, then the directory name remains null. Non è tuttavia possibile creare tabelle FileTable nel database se prima non si specifica un valore per DIRECTORY_NAME a livello di database.However you cannot create FileTables in the database until you specify a value for DIRECTORY_NAME at the database level.

  • Il nome di directory specificato deve essere conforme ai requisiti del file system relativi ai nomi di directory validi.The directory name that you provide must comply with the requirements of the file system for a valid directory name.

  • Quando il database contiene tabelle FileTable, non è possibile reimpostare DIRECTORY_NAME su un valore Null.When the database contains FileTables, you cannot set the DIRECTORY_NAME back to a null value.

  • Quando si collega o ripristina un database, l'operazione non riesce se il nuovo database include un valore per DIRECTORY_NAME già presente nell'istanza di destinazione.When you attach or restore a database, the operation fails if the new database has a value for DIRECTORY_NAME that already exists in the target instance. Specificare un valore univoco per DIRECTORY_NAME quando si chiama CREATE DATABASE FOR ATTACH o RESTORE DATABASE.Specify a unique value for DIRECTORY_NAME when you call CREATE DATABASE FOR ATTACH or RESTORE DATABASE.

  • Quando si aggiorna un database esistente a SQL Server 2017SQL Server 2017, il valore di DIRECTORY_NAME è Null.When you upgrade an existing database to SQL Server 2017SQL Server 2017, the value of DIRECTORY_NAME is null.

  • Quando si abilita o disabilita l'accesso non transazionale a livello di database, l'operazione non verifica se è stato specificato il nome di directory o se questo è univoco.When you enable or disable non-transactional access at the database level, the operation does not check whether the directory name has been specified or whether it is unique.

  • Quando si elimina un database abilitato per tabelle FileTable, vengono rimosse la directory a livello di database e tutte le strutture di directory di tutte le tabelle FileTable in essa contenute.When you drop a database that was enabled for FileTables, the database-level directory and all the directory stuctures of all the FileTables under it are removed.