Compatibilità FILESTREAM con altre funzionalità di SQL ServerFILESTREAM Compatibility with Other SQL Server Features

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 ServerSQL Serverindicate di seguito.Because FILESTREAM data is in the file system, this topic provides some considerations, guidelines, and limitations for using FILESTREAM with the following features in SQL ServerSQL Server:

SQL Server Integration Services (SSIS) 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.SQL Server Integration Services (SSIS) handles FILESTREAM data in the data flow like any other BLOB data by using the DT_IMAGE SSIS data type.

È possibile utilizzare la trasformazione Importa colonna per caricare file dal file system e inserirli in una colonna FILESTREAM.You can use the Import Column transformation to load files from the file system into a FILESTREAM column. È inoltre possibile utilizzare la trasformazione Esporta colonna per estrarre i file da una colonna FILESTREAM e inserirli in un'altra posizione nel file system.You can also use the Export Column transformation to extract files from a FILESTREAM column to another location in the file system.

Query distribuite e server collegati Distributed Queries and Linked Servers

È possibile utilizzare i dati FILESTREAM tramite query distribuite e server collegati trattandoli come dati varbinary(max) .You can work with FILESTREAM data through distributed queries and linked servers by treating it as varbinary(max) data. 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.You cannot use the FILESTREAM PathName() function in distributed queries that use a four-part name, even when the name refers to the local server. Tuttavia, è possibile utilizzare PathName() nella query interna di una query pass-through in cui viene utilizzato OPENQUERY().However you can use PathName() in the inner query of a pass-through query that uses OPENQUERY().

Crittografia Encryption

I dati FILESTREAM non vengono crittografati anche se è abilitata la crittografia dei dati trasparenti.FILESTREAM data is not encrypted even when transparent data encryption is enabled.

Snapshot di database Database Snapshots

SQL ServerSQL Server non supporta [snapshot del database](../../relational-databases/databases/database-snapshots-sql-server.md) per i filegroup FILESTREAM.(../../relational-databases/databases/database-snapshots-sql-server.md) for FILESTREAM filegroups. Se un filegroup FILESTREAM è incluso in una clausola CREATE DATABASE ON, l'istruzione non verrà eseguita e verrà restituito un errore.If a FILESTREAM filegroup is included in a CREATE DATABASE ON clause, the statement will fail and an error will be raised.

Se si sta utilizzando FILESTREAM, è possibile creare snapshot del database di filegroup standard (non FILESTREAM).When you are using FILESTREAM, you can create database snapshots of standard (non-FILESTREAM) filegroups. I filegroup FILESTREAM sono contrassegnati come offline per questi snapshot del database.The FILESTREAM filegroups are marked as offline for those database snapshots.

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:A SELECT statement that is executed on a FILESTREAM table in a database snapshot must not include a FILESTREAM column; otherwise, the following error message will be returned:

Could not continue scan with NOLOCK due to data movement.

Replica Replication

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.A varbinary(max) column that has the FILESTREAM attribute enabled at the Publisher can be replicated to a Subscriber with or without the FILESTREAM attribute. Per specificare la modalità di replica della colonna, usare la finestra di dialogo Proprietà articolo - <Articolo> oppure il parametro @schema_option di sp_addarticle o sp_addmergearticle.To specify the way in which the column is replicated, use the Article Properties - <Article> dialog box or the @schema_option parameter of sp_addarticle or 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.Data that is replicated to a varbinary(max) column that does not have the FILESTREAM attribute must not exceed the 2-GB limit for that data type; otherwise, a run-time error is generated. Si consiglia di replicare l'attributo FILESTREAM, a meno che non si stia effettuando la replica dei dati in SQL Server 2005SQL Server 2005.We recommend that you replicate the FILESTREAM attribute, unless you are replicating data to SQL Server 2005SQL Server 2005. La replica di tabelle con colonne FILESTREAM in Sottoscrittori SQL Server 2000SQL Server 2000 non è supportata, indipendentemente dall'opzione di schema specificata.Replicating tables that have FILESTREAM columns to SQL Server 2000SQL Server 2000 Subscribers is not supported, regardless of the schema option that is specified.

Nota

La replica di valori di dati di dimensioni elevate da SQL Server 2017SQL Server 2017 a Sottoscrittori SQL Server 2005SQL Server 2005 è limitata a dati con dimensioni massime pari a 256 MB.Replicating large data values from SQL Server 2017SQL Server 2017 to SQL Server 2005SQL Server 2005 Subscribers is limited to a maximum of 256 MB data values. Per ulteriori informazioni, vedere la pagina Web Specifiche di capacità massima.For more information, see Maximum Capacity Specifications.

Considerazioni sulla replica transazionaleConsiderations for Transactional Replication

Se si utilizzano colonne FILESTREAM in tabelle pubblicate per replica transazionale, considerare quanto riportato di seguito.If you use FILESTREAM columns in tables that are published for transactional replication, note the following considerations:

  • Se in una tabella qualsiasi sono incluse colonne con attributo FILESTREAM, non è possibile usare i valori database snapshot o database snapshot character per la proprietà @sync_method di sp_addpublication.If any tables include columns that have the FILESTREAM attribute, you cannot use values of database snapshot or database snapshot character for the @sync_method property of 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.The max text repl size option specifies the maximum amount of data that can be inserted into a column that is published for replication. Questa opzione può essere utilizzata per controllare le dimensioni dei dati FILESTREAM replicati.This option can be used to control the size of FILESTREAM data that is replicated.

  • 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.If you specify the schema option to replicate the FILESTREAM attribute, but you filter out the uniqueidentifier column that FILESTREAM requires or you specify not to replicate the UNIQUE constraint for the column, replication does not replicate the FILESTREAM attribute. La colonna viene replicata solo come varbinary(max) .The column is replicated only as a varbinary(max) column.

Considerazioni per la replica di tipo mergeConsiderations for Merge Replication

Se si utilizzano colonne FILESTREAM in tabelle pubblicate per replica di tipo merge, considerare quanto riportato di seguito.If you use FILESTREAM columns in tables that are published for merge replication, note the following considerations:

  • Le repliche di tipo merge e FILESTREAM richiedono una colonna di tipo di dati uniqueidentifier per identificare ogni riga in una tabella.Both merge replication and FILESTREAM require a column of data type uniqueidentifier to identify each row in a table. La replica di tipo merge consente di aggiungere automaticamente una colonna se la tabella non ne contiene neanche una.Merge replication automatically adds a column if the table does not have one. 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 ().Merge replication requires that the column have the ROWGUIDCOL property set and a default of NEWID() or NEWSEQUENTIALID(). Oltre a questi requisiti, è necessario che per FILESTREAM vi sia un vincolo UNIQUE definito per la colonna.In addition to these requirements, FILESTREAM requires that a UNIQUE constraint be defined for the column. In base a questi requisiti si verificano le seguenti conseguenze:These requirements have the following consequences:

    • 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.If you add a FILESTREAM column to a table that is already published for merge replication, make sure that the uniqueidentifier column has a UNIQUE constraint. In caso contrario, aggiungere un vincolo denominato alla tabella nel database di pubblicazione.If it does not have a UNIQUE constraint, add a named constraint to the table in the publication database. Per impostazione predefinita questa modifica dello schema verrà pubblicata tramite la replica e applicata a ogni database di sottoscrizione.By default, merge replication will publish this schema change, and it will be applied to each subscription database.

      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.If you add a UNIQUE constraint manually as described and you want to remove merge replication, you must first remove the UNIQUE constraint; otherwise, replication removal will fail.

    • Per impostazione predefinita, la replica di tipo merge consente di utilizzare NEWSEQUENTIALID () perché può fornire migliori prestazioni rispetto a NEWID ().By default, merge replication uses NEWSEQUENTIALID() because it can provide better performance than NEWID(). Se si aggiunge una colonna uniqueidentifier a una tabella che sarà pubblicata per la replica di tipo merge, specificare NEWSEQUENTIALID () come impostazione predefinita.If you add a uniqueidentifier column to a table that will be published for merge replication, specify NEWSEQUENTIALID() as the default.

  • La replica di tipo merge include un'ottimizzazione per la replica di tipi di oggetto di grandi dimensioni.Merge replication includes an optimization for replicating large object types. Questa ottimizzazione è controllata dal parametro @stream_blob_columns di sp_addmergearticle.This optimization is controlled by the @stream_blob_columns parameter of sp_addmergearticle. Se si imposta l'opzione dello schema per replicare l'attributo FILESTREAM, il valore del parametro @stream_blob_columns è impostato su true.If you set the schema option to replicate the FILESTREAM attribute, the @stream_blob_columns parameter value is set to true. L'override di questa ottimizzazione può essere eseguito utilizzando sp_changemergearticle.This optimization can be overridden by using sp_changemergearticle. Questa stored procedure consente di impostare @stream_blob_columns su false.This stored procedure enables you to set @stream_blob_columns to 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.If you add a FILESTREAM column to a table that is already published for merge replication, we recommend that you set the option to true by using 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.Enabling the schema option for FILESTREAM after an article is created can cause replication to fail if the data in a FILESTREAM column exceeds 2 GB and there is a conflict during replication. 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.If you expect this situation to arise, it is recommended that you drop and re-create the table article with the appropriate FILESTREAM schema option enabled at creation time.

  • La replica di tipo merge può sincronizzare i dati FILESTREAM su una connessione HTTPS utilizzando Sincronizzazione Web.Merge replication can synchronize FILESTREAM data over an HTTPS connection by using Web Synchronization. Questi dati non possono superare il limite di 50 MB per la sincronizzazione Web; in caso contrario, viene generato un errore di runtime.This data cannot exceed the 50 MB limit for Web Synchronization; otherwise, a run-time error is generated.

Log shipping Log Shipping

Illog shipping supporta FILESTREAM.Log shipping supports FILESTREAM. Sia i server primari che secondari devono eseguire SQL Server 2008SQL Server 2008o una versione più recente e avere FILESTREAM abilitato.Both the primary and secondary servers must be running SQL Server 2008SQL Server 2008, or a later version, and have FILESTREAM enabled.

Mirroring del database Database Mirroring

Il mirroring del database non supporta FILESTREAM.Database mirroring does not support FILESTREAM. Non è possibile creare un filegroup FILESTREAM nel server principale,A FILESTREAM filegroup cannot be created on the principal server. né configurare il mirroring per un database in cui sono contenuti filegroup FILESTREAM.Database mirroring cannot be configured for a database that contains FILESTREAM filegroups.

Indicizzazione full-text Full-Text Indexing

L'indicizzazione full-text viene eseguita per una colonna FILESTREAM nello stesso modo in cui avviene per una colonna varbinary(max) .Full-text indexing works with a FILESTREAM column in the same way that it does with a varbinary(max) column. La tabella FILESTREAM deve avere una colonna che contiene l'estensione del nome file per ogni BLOB FILESTREAM.The FILESTREAM table must have a column that contains the file name extension for each FILESTREAM BLOB. Per altre informazioni, vedere Esecuzione della query con ricerca Full-Text, Configurazione e gestione di filtri per la ricerca e sys.fulltext_document_types (Transact-SQL).For more information, see Query with Full-Text Search, Configure and Manage Filters for Search, and sys.fulltext_document_types (Transact-SQL).

Il motore full-text consente di indicizzare il contenuto dei BLOB FILESTREAM.The full-text engine indexes the contents of the FILESTREAM BLOBs. L'indicizzazione di file di immagini, ad esempio, potrebbe non essere utile.Indexing files such as images might not be useful. Un BLOB FILESTREAM viene reindicizzato quando viene aggiornato.When a FILESTREAM BLOB is updated it is reindexed.

Clustering di failover Failover Clustering

Per il clustering di failover, i filegroup FILESTREAM devono essere inseriti su un disco condiviso.For failover clustering, FILESTREAM filegroups must be put on a shared disk. FILESTREAM deve essere abilitato su ogni nodo nel cluster che ospiterà l'istanza FILESTREAM.FILESTREAM must be enabled on each node in the cluster that will host the FILESTREAM instance. Per altre informazioni, vedere Configurazione di FILESTREAM in un cluster di failover.For more information, see Set Up FILESTREAM on a Failover Cluster.

SQL Server Express SQL Server Express

SQL Server ExpressSQL Server Express supporta FILESTREAM. supports FILESTREAM. Il limite delle dimensioni di 10 GB non include il contenitore dei dati FILESTREAM.The 10-GB database size limit does not include the FILESTREAM data container.

Database indipendenti Contained Databases

La funzionalità FILESTREAM richiede alcuni interventi di configurazione all'esterno del database.The FILESTREAM feature requires some configuration outside of the database. Pertanto un database in cui si utilizza FILESTREAM o FileTable non è completamente indipendente.Therefore a database that uses FILESTREAM or FileTable is not fully contained.

È possibile impostare l'indipendenza del database su PARTIAL se si desidera utilizzare alcune funzionalità dei database indipendenti, ad esempio gli utenti indipendenti.You can set database containment to PARTIAL if you want to use certain features of contained databases, such as contained users. 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.In this case, however, you must be aware that some of the database settings are not contained in the database and are not automatically moved when the database moves.

Vedere ancheSee Also

Dati BLOB (Binary Large Object) (SQL Server)Binary Large Object (Blob) Data (SQL Server)