Condividi tramite


Compatibilità FILESTREAM con altre funzionalità di SQL Server

Poiché i dati FILESTREAM si trovano nel file system, in questo argomento vengono fornite alcune considerazioni, linee guida e limitazioni per l'uso di FILESTREAM con le funzionalità seguenti in SQL Server:

SQL Server Integration Services (SSIS)

SQL Server Integration Services (SSIS) gestisce i dati FILESTREAM nel flusso di dati come tutti gli altri dati BLOB usando il tipo di dati SSIS DT_IMAGE.

È possibile usare la trasformazione Importa colonna per caricare i file dal file system in una colonna FILESTREAM. È anche possibile utilizzare la trasformazione Esporta Colonna per estrarre file da una colonna FILESTREAM verso un altro percorso nel file system.

Query distribuite e server collegati

È possibile usare i dati FILESTREAM tramite query distribuite e server collegati trattandoli come varbinary(max) dati. Non è possibile utilizzare la funzione FILESTREAM PathName() nelle query distribuite che usano un nome in quattro parti, anche quando il nome fa riferimento al server locale. Tuttavia, è possibile usare PathName() nella query interna di una query pass-through che usa OPENQUERY().

Crittografia

I dati FILESTREAM non vengono crittografati anche quando è abilitata la crittografia dei dati trasparente.

Istantanea del database

SQL Server non supporta gli snapshot del database per i filegroup FILESTREAM. Se un filegroup FILESTREAM è incluso in una clausola CREATE DATABASE ON, l'istruzione avrà esito negativo e verrà generato un errore.

Quando si usa FILESTREAM, è possibile creare snapshot di database di filegroup standard (non FILESTREAM). I filegroup FILESTREAM sono contrassegnati come offline per tali 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 messaggio di errore seguente:

Could not continue scan with NOLOCK due to data movement.

Duplicazione

Una varbinary(max) colonna con l'attributo FILESTREAM abilitato presso l'editore può essere replicata a un sottoscrittore con o senza l'attributo FILESTREAM. Per specificare la modalità di replica della colonna, utilizzare la finestra di dialogo Proprietà articolo - <Articolo> o il @schema_option parametro di sp_addarticle o sp_addmergearticle. I dati replicati in una varbinary(max) colonna che non dispone dell'attributo FILESTREAM non devono superare il limite di 2 GB per tale tipo di dati. In caso contrario, viene generato un errore di run-time. Si consiglia di replicare l'attributo FILESTREAM, a meno che l'operazione di replica dei dati verso i Sottoscrittori di SQL Server 2000 non sia supportata, a prescindere dall'opzione dello schema specificata.

Annotazioni

La replica di valori di dati di grandi dimensioni dai Sottoscrittori di SQL Server 2014 a SQL Server 2005 (9.x) è limitata a un massimo di 256 MB di dati. Per altre informazioni, vedere Specifiche di capacità massima.

Considerazioni sulla replica transazionale

Se si usano colonne FILESTREAM nelle tabelle pubblicate per la replica transazionale, tenere presenti le considerazioni seguenti:

  • Se una tabella include colonne con l'attributo FILESTREAM, non è possibile utilizzare valori di snapshot del database o carattere snapshot del database per la @sync_method proprietà 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 usata per controllare le dimensioni dei dati FILESTREAM replicati.

  • Se si specifica l'opzione dello schema per replicare l'attributo FILESTREAM, ma si filtra la uniqueidentifier colonna richiesta da FILESTREAM oppure si specifica di non replicare il vincolo UNIQUE per la colonna, la replica non replica l'attributo FILESTREAM. La colonna viene replicata solo come varbinary(max) colonna.

Considerazioni sulla replica di tipo merge

Se si usano colonne FILESTREAM nelle tabelle pubblicate per la replica di tipo merge, tenere presenti le considerazioni seguenti:

  • Sia la replica di tipo merge che FILESTREAM richiedono una colonna di tipo dati uniqueidentifier per identificare ogni riga in una tabella. La replica di tipo merge aggiunge automaticamente una colonna se la tabella non ne ha una. La replica di tipo merge richiede che la colonna abbia la proprietà ROWGUIDCOL impostata e che il valore predefinito sia NEWID() o NEWSEQUENTIALID(). Oltre a questi requisiti, FILESTREAM richiede che venga definito un vincolo UNIQUE per la colonna. Questi requisiti hanno le conseguenze seguenti:

    • Se si aggiunge una colonna FILESTREAM a una tabella già pubblicata per la replica di tipo merge, assicurarsi che la colonna uniqueidentifier abbia un vincolo univoco. Se non dispone di un vincolo UNIQUE, aggiungere un vincolo denominato alla tabella nel database di pubblicazione. Per impostazione predefinita, la replica di tipo merge pubblicherà questa modifica dello schema e verrà applicata a ogni database di sottoscrizione.

      Se si aggiunge manualmente un vincolo UNIQUE come descritto e si vuole rimuovere la replica di tipo merge, è prima necessario rimuovere il vincolo UNIQUE; in caso contrario, la rimozione della replica avrà esito negativo.

    • Per impostazione predefinita, la replica di tipo merge usa NEWSEQUENTIALID() perché può offrire prestazioni migliori rispetto a NEWID(). Se si aggiunge una uniqueidentifier colonna a una tabella che verrà pubblicata per la replica di tipo merge, specificare NEWSEQUENTIALID() come valore predefinito.

  • La replica di tipo merge include un'ottimizzazione per la replica di tipi di oggetti di grandi dimensioni. Questa ottimizzazione è controllata dal @stream_blob_columns parametro di sp_addmergearticle. Se si imposta l'opzione dello schema per replicare l'attributo FILESTREAM, il valore del @stream_blob_columns parametro viene impostato su true. Questa ottimizzazione può essere annullata tramite sp_changemergearticle. Questa stored procedure consente di impostare @stream_blob_columns su false. Se si aggiunge una colonna FILESTREAM a una tabella già pubblicata per la replica di tipo merge, è consigliabile impostare l'opzione su true usando sp_changemergearticle.

  • L'abilitazione dell'opzione dello schema per FILESTREAM dopo la creazione di un articolo può causare l'esito negativo della replica se i dati in una colonna FILESTREAM superano 2 GB e si verifica un conflitto durante la replica. Se si prevede che si verifichi questa situazione, è consigliabile eliminare e ricreare l'articolo della tabella con l'opzione di schema FILESTREAM appropriata abilitata al momento della creazione.

  • La replica di tipo merge può sincronizzare i dati FILESTREAM tramite una connessione HTTPS usando la sincronizzazione Web. Questi dati non possono superare il limite di 50 MB per la sincronizzazione Web; in caso contrario, viene generato un errore di run-time.

Trasferimento dei Log

Il log shipping è compatibile con FILESTREAM. Sia i server primari che i server secondari devono eseguire SQL Server 2008 o versione successiva e avere FILESTREAM abilitato.

Mirroring del database

Il mirroring del database non supporta FILESTREAM. Impossibile creare un filegroup FILESTREAM nel server principale. Non è possibile configurare il mirroring del database per un database che contiene filegroup FILESTREAM.

Indicizzazione del testo completo

L'indicizzazione full-text funziona con una colonna FILESTREAM nello stesso modo in cui funziona con una varbinary(max) colonna. La tabella FILESTREAM deve avere una colonna contenente l'estensione del nome file per ogni BLOB FILESTREAM. Per altre informazioni, vedere Eseguire query con ricerca Full-Text, configurare e gestire filtri per la ricerca e sys.fulltext_document_types (Transact-SQL).

Il motore full-text indicizza il contenuto dei BLOB FILESTREAM. L'indicizzazione di file come immagini potrebbe non essere utile. Quando un BLOB FILESTREAM viene aggiornato, viene reindicizzato.

Failover Clustering

Per il clustering di failover, i filegroup FILESTREAM devono essere inseriti su un disco condiviso. FILESTREAM deve essere abilitato in ogni nodo del cluster che ospiterà l'istanza FILESTREAM. Per altre informazioni, vedere Configurare FILESTREAM in un cluster di failover.

SQL Server Express

SQL Server Express supporta FILESTREAM. Il limite di dimensioni del database da 10 GB non include il contenitore di dati FILESTREAM.

Database indipendenti

La funzionalità FILESTREAM richiede una configurazione esterna al database. Pertanto, un database che utilizza FILESTREAM o FileTable non è completamente contenuto.

È possibile impostare il contenimento del database su PARTIAL se si desidera utilizzare determinate funzionalità di database indipendenti, ad esempio utenti indipendenti. In questo caso, tuttavia, è necessario tenere presente che alcune impostazioni del database non sono contenute nel database e non vengono spostate automaticamente quando il database viene spostato.

Vedere anche

Dati BLOB (Binary Large Object) (SQL Server)