Compatibilità FILESTREAM con altre funzionalità di SQL Server
Poiché i dati FILESTREAM sono nel file system, in questo argomento vengono fornite alcune considerazioni, linee guida e limitazioni per l'utilizzo di FILESTREAM con le funzionalità di SQL Server indicate di seguito.
SQL Server Integration Services (SSIS)
Query distribuite e server collegati
Crittografia
Snapshot di database
Replica
Log shipping
Mirroring del database
Indicizzazione full-text
Clustering di failover
SQL Server Express
Database indipendenti
SQL Server Integration Services (SSIS)
In SQL Server Integration Services (SSIS) i dati FILESTREAM vengono gestiti nel flusso di dati in modo analogo agli altri dati BLOB, utilizzando il tipo di dati SSIS DT_IMAGE.
È possibile utilizzare la trasformazione Importa colonna per caricare file dal file system e inserirli in una colonna FILESTREAM. È inoltre possibile utilizzare la trasformazione Esporta colonna per estrarre i file da una colonna FILESTREAM e inserirli in un'altra posizione nel file system.
Query distribuite e server collegati
È possibile utilizzare i dati FILESTREAM tramite query distribuite e server collegati trattandoli come dati varbinary(max). Non è possibile utilizzare la funzione FILESTREAM PathName() in query distribuite in cui viene utilizzato un nome in quattro parti, anche quando il nome si riferisce al server locale. Tuttavia, è possibile utilizzare PathName() nella query interna di una query pass-through in cui viene utilizzato OPENQUERY().
Crittografia
I dati FILESTREAM non vengono crittografati anche se è abilitata la crittografia dei dati trasparenti.
Snapshot di database
SQL Server non supporta snapshot del database per i filegroup FILESTREAM. Se un filegroup FILESTREAM è incluso in una clausola CREATE DATABASE ON, l'istruzione non verrà eseguita e verrà restituito un errore.
Se si sta utilizzando FILESTREAM, è possibile creare snapshot del database di filegroup standard (non FILESTREAM). I filegroup FILESTREAM sono contrassegnati come offline per questi snapshot del database.
Un'istruzione SELECT eseguita in una tabella FILESTREAM in uno snapshot del database non deve includere una colonna FILESTREAM. In caso contrario, verrà restituito il seguente messaggio di errore:
Could not continue scan with NOLOCK due to data movement.
Replica
Una colonna varbinary(max) che ha l'attributo FILESTREAM abilitato sul server di pubblicazione può essere replicata in un sottoscrittore con o senza l'attributo FILESTREAM. Per specificare la modalità di replica della colonna, utilizzare la finestra di dialogo Proprietà articolo - <Articolo> oppure il parametro @schema\_option di sp_addarticle o sp_addmergearticle. I dati replicati in una colonna varbinary(max) che non dispone dell'attributo FILESTREAM non devono superare il limite di 2 GB per quel tipo di dati; in caso contrario, viene generato un errore di runtime. È consigliabile eseguire la replica dell'attributo FILESTREAM a meno che non si replichino dati in SQL Server 2005. La replica di tabelle con colonne FILESTREAM in sottoscrittori SQL Server 2000 non è supportata indipendentemente dall'opzione di schema specificata.
[!NOTA]
La replica di valori di dati di dimensioni elevate da SQL Server 2012 a Sottoscrittori SQL Server 2005 è limitata a dati con dimensioni massime pari a 256 MB. Per ulteriori informazioni, vedere la pagina Web Specifiche di capacità massima.
Considerazioni sulla replica transazionale
Se si utilizzano colonne FILESTREAM in tabelle pubblicate per replica transazionale, considerare quanto riportato di seguito.
Se in una tabella qualsiasi sono incluse colonne con attributo FILESTREAM, non è possibile utilizzare valori di database snapshot o database snapshot character per la proprietà @sync\_method di sp_addpublication.
L'opzione max text repl size consente di specificare la quantità massima di dati che è possibile inserire in una colonna pubblicata per la replica. Questa opzione può essere utilizzata per controllare le dimensioni dei dati FILESTREAM replicati.
Se si specifica l'opzione dello schema per replicare l'attributo FILESTREAM, ma si esclude la colonna uniqueidentifier richiesta da FILESTREAM o si specifica di non replicare il vincolo UNIQUE per la colonna, la replica dell'attributo FILESTREAM non viene effettuata. La colonna viene replicata solo come varbinary(max).
Considerazioni per la replica di tipo merge
Se si utilizzano colonne FILESTREAM in tabelle pubblicate per replica di tipo merge, considerare quanto riportato di seguito.
Le repliche di tipo merge e FILESTREAM richiedono una colonna di tipo di dati uniqueidentifier per identificare ogni riga in una tabella. La replica di tipo merge consente di aggiungere automaticamente una colonna se la tabella non ne contiene neanche una. La replica di tipo merge richiede l'impostazione della proprietà ROWGUIDCOL per la colonna e che vi sia un'impostazione predefinita di NEWID () o NEWSEQUENTIALID (). Oltre a questi requisiti, è necessario che per FILESTREAM vi sia un vincolo UNIQUE definito per la colonna. In base a questi requisiti si verificano le seguenti conseguenze:
Se si aggiunge una colonna FILESTREAM a una tabella che è già pubblicata per la replica di tipo merge, verificare che la colonna uniqueidentifier abbia un vincolo UNIQUE. In caso contrario, aggiungere un vincolo denominato alla tabella nel database di pubblicazione. Per impostazione predefinita questa modifica dello schema verrà pubblicata tramite la replica e applicata a ogni database di sottoscrizione.
Se si aggiunge manualmente un vincolo UNIQUE come descritto e si desidera rimuovere una replica di tipo merge, è necessario prima rimuovere il vincolo UNIQUE; in caso contrario, la rimozione della replica non verrà effettuata.
Per impostazione predefinita, la replica di tipo merge consente di utilizzare NEWSEQUENTIALID () perché può fornire migliori prestazioni rispetto a NEWID (). Se si aggiunge una colonna uniqueidentifier a una tabella che sarà pubblicata per la replica di tipo merge, specificare NEWSEQUENTIALID () come impostazione predefinita.
La replica di tipo merge include un'ottimizzazione per la replica di tipi di oggetto di grandi dimensioni. Questa ottimizzazione è controllata dal parametro @stream\_blob\_columns di sp_addmergearticle. Se si imposta l'opzione dello schema per replicare l'attributo FILESTREAM, il valore del parametro @stream\_blob\_columns è impostato su true. L'override di questa ottimizzazione può essere eseguito utilizzando sp_changemergearticle. Questa stored procedure consente di impostare @stream\_blob\_columns su false. Se si aggiunge una colonna FILESTREAM a una tabella che è già pubblicata per la replica di tipo merge, si consiglia di impostare l'opzione su true utilizzando sp_changemergearticle.
L'abilitazione dell'opzione dello schema per FILESTREAM dopo la creazione di un articolo potrebbe non consentire la replica se i dati in una colonna FILESTREAM superano 2 GB e si verifica un conflitto durante tale operazione. Se le probabilità che ciò si verifichi sono alte, è consigliabile rimuovere e creare di nuovo l'articolo della tabella con l'opzione dello schema FILESTREAM appropriata abilitata al momento della creazione.
La replica di tipo merge può sincronizzare i dati FILESTREAM su una connessione HTTPS utilizzando Sincronizzazione Web. Questi dati non possono superare il limite di 50 MB per la sincronizzazione Web; in caso contrario, viene generato un errore di runtime.
Log shipping
Illog shipping supporta FILESTREAM. Sia i server primari che secondari devono eseguire SQL Server 2008 o una versione più recente e avere FILESTREAM abilitato.
Mirroring del database
Il mirroring del database non supporta FILESTREAM. Non è possibile creare un filegroup FILESTREAM sul server principale né configurare il mirroring per un database in cui sono contenuti filegroup FILESTREAM.
Indicizzazione full-text
L'indicizzazione full-text viene eseguita per una colonna FILESTREAM nello stesso modo in cui avviene per una colonna varbinary(max). La tabella FILESTREAM deve avere una colonna che contiene l'estensione del nome file per ogni BLOB FILESTREAM. Per ulteriori informazioni, vedere Esecuzione della query con ricerca Full-Text, Configurazione e gestione di filtri per la ricerca e sys.fulltext_document_types (Transact-SQL).
Il motore full-text consente di indicizzare il contenuto dei BLOB FILESTREAM. L'indicizzazione di file di immagini, ad esempio, potrebbe non essere utile. Un BLOB FILESTREAM viene reindicizzato quando viene aggiornato.
Clustering di failover
Per il clustering di failover, i filegroup FILESTREAM devono essere inseriti su un disco condiviso. FILESTREAM deve essere abilitato su ogni nodo nel cluster che ospiterà l'istanza FILESTREAM. Per ulteriori informazioni, vedere Configurazione di FILESTREAM in un cluster di failover.
SQL Server Express
SQL Server Express supporta FILESTREAM. Il limite delle dimensioni di 10 GB non include il contenitore dei dati FILESTREAM.
Database indipendenti
La funzionalità FILESTREAM richiede alcuni interventi di configurazione all'esterno del database. Pertanto un database che utilizza FILESTREAM o FileTable non è completamente indipendente.
È possibile impostare l'indipendenza del database su PARTIAL se si desidera utilizzare alcune funzionalità dei database indipendenti, ad esempio gli utenti indipendenti. In tal caso, tuttavia, è necessario tenere presente che alcune impostazioni del database non sono contenute nel database e non vengono spostate automaticamente quando viene spostato il database.