Abilitare i prerequisiti per la tabella FileTable

Si applica a:SQL Server

Viene descritto come abilitare i prerequisiti per la creazione e l'utilizzo di tabelle FileTable.

Abilitazione dei prerequisiti per la tabella FileTable

Per abilitare i prerequisiti per la creazione e l'utilizzo di tabelle FileTable, abilitare gli elementi seguenti:

Abilitazione di FILESTREAM a livello di istanza

Le tabelle FileTable estendono le funzionalità della caratteristica FILESTREAM di SQL Server. È necessario abilitare FILESTREAM per l'accesso I/O ai file a livello di Windows e nell'istanza di SQL Server prima di poter creare e usare le tabelle FileTable.

Abilitare FILESTREAM a livello di istanza

Per informazioni su come abilitare FILESTREAM, vedere Abilitare e configurare FILESTREAM.

Quando si chiama sp_configure per abilitare FILESTREAM a livello di istanza, è necessario impostare l'opzione filestream_access_level su 2. Per altre informazioni, vedere FILESTREAM access level (opzione di configurazione del server).

Abilitare FILESTREAM attraverso il firewall

Per informazioni sull'abilitazione di FILESTREAM attraverso il firewall, vedere Configure a Firewall for FILESTREAM Access.

Fornire un filegroup FILESTREAM a livello di database

Per poter creare FileTable in un database, è necessario che il database disponga di un filegroup FILESTREAM. Per altre informazioni su questo prerequisito, vedere Creare un database abilitato per FILESTREAM.

Abilitare l'accesso non transazionale a livello di database

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. Per consentire questo accesso non transazionale ai file archiviati in SQL Server, è necessario specificare il livello desiderato di accesso non transazionale a livello di database per ogni database che conterrà le tabelle FileTable.

Verificare l'abilitazione dell'accesso non transazionale nei database

Eseguire una query sulla vistadel catalogo sys.database_filestream_options (Transact-SQL) e controllare le colonne non_transacted_access e non_transacted_access_desc.

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

Abilitare l'accesso non transazionale a livello di database

I livelli disponibili di accesso non transazionale sono FULL, READ_ONLY e OFF.

Specificare il livello di accesso non transazionale tramite Transact-SQL

Quando si crea un nuovo database, chiamare l'istruzione CREATE DATABASE (SQL Server Transact-SQL) con l'opzione FILESTREAM NON_TRANSACTED_ACCESS.

CREATE DATABASE database_name
  WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );

Quando si modifica un database esistente, chiamare l'istruzione ALTER DATABASE (Transact-SQL) con l'opzione FILESTREAM NON_TRANSACTED_ACCESS.

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 Studio

È possibile specificare il livello di accesso non transazionale nel campo Accesso FILESTREAM non transazionale della pagina Opzioni della finestra di dialogo Proprietà database. Per altre informazioni su questa finestra di dialogo, vedere Proprietà del database (pagina Opzioni).

Specificare una directory per tabelle FileTable a livello di database

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

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. Per altre informazioni, vedere Work with Directories and Paths in FileTables.

Specificare una directory per tabelle FileTable a livello di database

Il nome specificato deve essere univoco in tutta l'istanza per le directory a livello di database.

Specificare una directory per tabelle FileTable tramite Transact-SQL

Quando si crea un nuovo database, chiamare l'istruzione CREATE DATABASE (SQL Server Transact-SQL) con l'opzione FILESTREAM DIRECTORY_NAME.

CREATE DATABASE database_name
  WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );
GO

Quando si modifica un database esistente, chiamare l'istruzione ALTER DATABASE (Transact-SQL) con l'opzione FILESTREAM DIRECTORY_NAME. Quando si usano queste opzioni per modificare il nome di directory, è necessario bloccare il database in modo esclusivo, senza handle di file aperti.

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.

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.

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

Specificare una directory per tabelle FileTable tramite 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. Per altre informazioni su questa finestra di dialogo, vedere Proprietà del database (pagina Opzioni).

Visualizzare i nomi di directory esistenti per l'istanza

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.

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

Requisiti e restrizioni per la directory a livello di database

  • L'impostazione di DIRECTORY_NAME è facoltativa quando si chiama CREATE DATABASE o ALTER DATABASE. Se non si specifica un valore per DIRECTORY_NAME, il nome di directory rimane Null. Non è tuttavia possibile creare tabelle FileTable nel database se prima non si specifica un valore per DIRECTORY_NAME a livello di database.

  • Il nome di directory specificato deve essere conforme ai requisiti del file system relativi ai nomi di directory validi.

  • Quando il database contiene tabelle FileTable, non è possibile reimpostare DIRECTORY_NAME su un valore Null.

  • 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. Specificare un valore univoco per DIRECTORY_NAME quando si chiama CREATE DATABASE FOR ATTACH o RESTORE DATABASE.

  • Quando si aggiorna un database esistente, il valore di DIRECTORY_NAME è 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.

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