Utilizzo di 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

  • Snapshot di database

  • Replica

  • Log shipping

  • Mirroring del database

  • Full-text

  • Clustering di failover

  • SQL Server Express

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 considerandoli come dati varbinary(max). Non è possibile utilizzare la funzione FILESTREAM PathName() nelle query distribuite in cui viene utilizzato un nome composto da quattro parti, anche quando il nome fa riferimento al server locale. È tuttavia possibile utilizzare PathName() nella query interna di una query pass-through che utilizza OPENQUERY().

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 attivato 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. Per ulteriori informazioni sull'impostazione delle opzioni di schema, vedere Procedura: Impostazione delle opzioni dello schema (SQL Server Management Studio) e Procedura: Impostazione delle opzioni dello schema (programmazione Transact-SQL della replica). 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. Si consiglia di replicare l'attributo FILESTREAM, a meno che non si stia effettuando la replica dei 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. Per ulteriori informazioni sulla replica dei dati in versioni precedenti di SQL Server, vedere Utilizzo di più versioni di SQL Server in una topologia di replica.

Nota

La replica di valori di dati di dimensioni elevate da SQL Server 2008 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 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. Per ulteriori informazioni, vedere Opzione max text repl size.

  • 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. Per ulteriori informazioni sulle modifiche dello schema, vedere Modifiche allo schema nei database di pubblicazione.

      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'attivazione 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 attivata 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

Il log shipping supporta FILESTREAM. Sia i server primari che secondari devono eseguire SQL Server 2008 o una versione più recente e avere FILESTREAM attivato.

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 di query su colonne di tipo varbinary(max) e xml (ricerca full-text), Filtri di ricerca full-text,Processo di indicizzazione e query full-text 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 attivato su ogni nodo nel cluster che ospiterà l'istanza FILESTREAM. Per ulteriori informazioni, vedere Procedura: Configurazione di FILESTREAM in un cluster di failover.

SQL Server Express

SQL Server Express supporta FILESTREAM. Il limite delle dimensioni di 4 GB non include il contenitore dei dati FILESTREAM.