Abilitazione dei prerequisiti per la tabella FileTable
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:
A livello di istanza:
A livello di database:
Abilitazione di FILESTREAM a livello di istanza
Le tabelle FileTable estendono le funzionalità della funzionalità FILESTREAM di SQL Server. È quindi necessario abilitare FILESTREAM per l'accesso di I/O file a livello di Windows e nell'istanza di SQL Server prima di poter creare e usare Tabelle FileTable.
Procedura: Abilitazione di 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 Opzione di configurazione del server filestream access level.
Procedura: Abilitazione di FILESTREAM attraverso il firewall
Per informazioni sull'abilitazione di FILESTREAM attraverso il firewall, vedere Configure a Firewall for FILESTREAM Access.
Fornitura di 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.
Abilitazione dell'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 l'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à tabelle FileTable.
Procedura: Verifica dell'abilitazione dell'accesso non transazionale nei database
Eseguire query sulla visualizzazione 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
Procedura: Abilitazione dell'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 NON_TRANSACTED_ACCESS FILESTREAM.
```sql
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 NON_TRANSACTED_ACCESS FILESTREAM.
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).
Specifica di 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.
Procedura: Specifica di 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 DIRECTORY_NAME FILESTREAM.
```sql
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 DIRECTORY_NAME FILESTREAM. 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 DIRECTORY_NAME FILESTREAM.
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 DIRECTORY_NAME FILESTREAM.
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).
Procedura: Visualizzazione dei nomi di directory esistenti per l'istanza
Per visualizzare l'elenco dei nomi di directory esistenti per l'istanza, eseguire una query sulla vista del catalogo sys.database_filestream_options (Transact-SQL) e controllare 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 a SQL Server 2014, 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.