Hai mai pensato che il tuo SQL Server possa funzionare come un file server? Le probabilità sono che tu non l’abbia fatto – nemmeno io fino a quando non ho provato una funzionalità FileTable introdotta per la prima volta in SQL Server 2012. La funzione FileTable è il passo successivo nella tecnologia FILESTREAM che consente di archiviare file e cartelle nelle tabelle speciali ma accedervi utilizzando il tradizionale protocollo SMB di Windows: gli utenti possono creare/leggere/modificare/eliminare file da una condivisione di file generica senza nemmeno essere a conoscenza dei comandi SQL sottostanti. In altre parole, FileTables ci consente di utilizzare le tabelle SQL per l’accesso non transazionale.
A mio parere, uno dei maggiori vantaggi della funzionalità FileTables è la memorizzazione di attributi di file (come Last-WriteTime, Last_AccessTime, ecc.) che consente agli amministratori di controllare le operazioni di accesso ai file utilizzando le colonne corrispondenti nelle tabelle dei file. In questo articolo vorrei mostrarvi come SQL Server 2012-2016 può essere utilizzato per l’archiviazione dei file e quali meccanismi di controllo possono essere sfruttati per i file e le cartelle che risiedono nelle condivisioni di file SQL. Alcuni prerequisiti devono essere soddisfatti prima di creare tabelle di file in un database e andremo oltre tutti i passaggi necessari per preparare le tabelle di file, quindi creare diverse tabelle e vedere come possiamo lavorare con loro.
partiamo dall’attivazione di FILESTREAM per l’istanza di SQL 2012 e la creazione di un nuovo database FILESTREAM:
https://msdn.microsoft.com/en-us/library/gg509097%28v=sql.120%29.aspx
Attivare il FILESTREAM a livello di Windows
- Aprire gestione Configurazione SQL:
- assicurarsi che i seguenti caselle di controllo sono selezionate:
II Abilita FILESTREAM a livello di istanza SQL:
- In SQL Server Management Studio, fare clic su Nuova query per visualizzare l’editor di query.
- Nell’Editor di Query, inserire il seguente codice Transact-SQL:
EXEC sp_configure filestream_access_level, 2
RICONFIGURARE
III Fornire un Filegroup FILESTREAM a Livello del Database
Prima di poter creare Filetable in un database, il database deve avere un filegroup FILESTREAM. Per ulteriori informazioni su questo prerequisito, vedere Creare un database abilitato per FILESTREAM.
Dal momento che ho intenzione di creare un nuovo database creerò prima una cartella per contenere FileTables:
e quindi definire un filegroup Filestream in questo codice:
CREA FILE SERVER DI DATABASE
SU
PRIMARY (NAME = FS,
FILENAME = ‘c:\FILESERVER\FSdat.mdf’),
FILEGROUP FileStreamFS CONTIENE FILESTREAM (NAME = FSgr,
FILENAME = ‘c:\FILESERVER\fs1’)
ACCEDERE (NAME = FSlog, FILENAME = ‘ c:\ FILESERVER \FSlog.ldf’)
VAI
Attenzione! Come dice MS: “Per un filegroup FILESTREAM, FILENAME si riferisce a un percorso. Il percorso fino all’ultima cartella deve esistere e l’ultima cartella non deve esistere.”Nel codice precedente, c:\FILESERVER deve esistere, ma fs1 NON deve al momento di eseguire l’istruzione CREATE DATABASE.
La pagina delle proprietà del database Filegroups ora visualizza il FileStreamFS filestream per il database FILESERVER:
IV Abilita l’accesso non transazionale a livello di database
Una volta creato il database, l’ultimo passo per prepararlo per FileTables consiste nell’abilitare l’accesso non transazionale a livello di database.
FileTables consente alle applicazioni Windows di ottenere un handle di file Windows per i dati FILESTREAM senza richiedere una transazione. Per consentire questo accesso non transazionale ai file memorizzati in SQL Server, è necessario specificare il livello desiderato di accesso non transazionale a livello di database per ciascun database che conterrà le tabelle file. Se eseguiamo il seguente codice –
SELEZIONARE DB_NAME (database_id), non_transacted_access, non_transacted_access_desc
DA sys.database_filestream_options;
VAI
…staremo a vedere che nessun database non transazionale accesso abilitato:
Per abilitare l’accesso non transazionale di file a livello di database (per il FILESERVER di database, in questo caso) uno più opzione deve essere specificata una directory per Filetable: è la directory che ho creato all’inizio dell’articolo – C:\FILESERVER, ma il nome della directory che devono essere digitati senza la lettera di unità e il simbolo “\”:
ALTER DATABASE FILESERVER
IMPOSTARE FILESTREAM ( NON_TRANSACTED_ACCESS = COMPLETO, DIRECTORY_NAME = N’FILESERVER’ )
VAI
“In FileTable gerarchia di cartelle, questo a livello di database di directory diventa il figlio di un nome di condivisione specificato per FILESTREAM a livello di istanza, e il padre del FileTab creati nel database” – significa FILESERVER sarà la sottocartella di MSSQLSERVER condividere come io di non avere cambiato nel passaggio I-2. Per ulteriori informazioni, vedere Lavorare con directory e percorsi in FileTables
L’esecuzione di questo codice mostrerà che l’accesso non transazionale è stato abilitato correttamente:
SELEZIONARE DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
DA sys.database_filestream_options;
VAI
Il seguente codice visualizza il nome della directory per il file SERVER databse:
Seleziona DB_NAME ( database_id), direcory_name
DA sys.database_filestream_options;
VAI
Ecco il “SQL” condivisione di file che gli utenti possono ora utilizzare per la memorizzazione di file e cartelle:
Se avessi rinominato il default MSSQLSERVER condividere in qualcosa di simile SHARE1 nel passaggio I-2 non ci sarebbe stata alcuna indicazione di SQL Server coinvolti – dal punto di vista dell’utente, sarebbe solo una comune condivisione di file.
Tutti i prerequisiti per la creazione di file sono soddisfatti ora e possiamo procedere alla creazione di file.
Lavorare con le tabelle di file SQL Server-parte 2