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:
A livello di istanza:
A livello di database:
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 chiamaCREATE DATABASE
oALTER DATABASE
. Se non si specifica un valore perDIRECTORY_NAME
, il nome di directory rimane Null. Non è tuttavia possibile creare tabelle FileTable nel database se prima non si specifica un valore perDIRECTORY_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 perDIRECTORY_NAME
quando si chiamaCREATE DATABASE FOR ATTACH
oRESTORE 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.