Considerazioni per la replica di tipo merge
È necessario valutare alcuni aspetti per la replica di tipo merge:
L'aggiunta di una colonna uniqueidentifier alle tabelle pubblicate.
Le colonne di tipo timestamp.
I tipi di dati LOB (Large Object).
L'inserimento bulk dei dati nelle tabelle pubblicate.
Il livello di compatibilità della pubblicazione. Per ulteriori informazioni, vedere la sezione relativa al livello di compatibilità per le pubblicazioni di tipo merge in Utilizzo di più versioni di SQL Server in una topologia di replica.
Aggiunta della colonna uniqueidentifier
Nella replica di tipo merge viene utilizzata una colonna per gli identificatori univoci globali (GUID) per identificare ogni riga durante il processo di replica di tipo merge. Se in una tabella pubblicata non è inclusa una colonna uniqueidentifier con la proprietà ROWGUIDCOL e un indice univoco, ne viene automaticamente aggiunta una. Verificare che le istruzioni SELECT e INSERT che fanno riferimento alle tabelle pubblicate utilizzino gli elenchi di colonne. Se una tabella non è più pubblicata e vi è stata aggiunta una colonna durante la replica, tale colonna viene rimossa; se invece la colonna era già presente, non viene rimossa.
Colonne di tipo timestamp
La replica di tipo merge supporta le colonne di tipo timestamp. La colonna timestamp viene replicata ma non i valori letterali timestamp. Tali valorivengono rigenerati al momento dell'applicazione dello snapshot nel Sottoscrittore. Dato che i valori timestamp vengono rigenerati nel Sottoscrittore, le colonne di tipo timestamp vengono filtrate quando viene eseguita la convalida degli articoli.
Tipi di dati LOB (Large Object)
Se una tabella pubblicata include LOB, è consigliabile specificare un valore TRUE per il parametro @stream_blob_columns di sp_addmergearticle (Transact-SQL). Se non si specifica TRUE, l'intero LOB deve essere creato nella memoria del server di pubblicazione e può richiedere l'intera memoria RAM se le dimensioni del LOB sono elevate.
Importante |
---|
Questa ottimizzazione della memoria può avere effetti negativi sulle prestazioni dell'agente di merge durante la sincronizzazione. È consigliabile utilizzare questa opzione solo se vengono replicate colonne contenenti più megabyte di dati. |
Gli aggiornamenti alle colonne text, ntext e image vengono replicati solo se la colonna è stata aggiornata in modo esplicito tramite un'istruzione UPDATE. L'aggiornamento determina l'attivazione di un trigger che aggiorna i metadati, garantendo che la transazione venga distribuita agli altri Sottoscrittori. Se si utilizzano solo le operazioni WRITETEXT e UPDATETEXT, le modifiche non vengono distribuite agli altri siti. Se l'applicazione utilizza le operazioni WRITETEXT e UPDATETEXT per aggiornare le colonne di tipo text o ntext, aggiungere un'istruzione UPDATE fittizia dopo le operazioni WRITETEXT o UPDATETEXT all'interno della stessa transazione in modo da attivare il trigger e assicurare che le modifiche vengano distribuite agli altri siti. Per ulteriori informazioni su questi tipi di dati, vedere ntext, text e image (Transact-SQL).
[!NOTA]
È consigliabile utilizzare i tipi di dati varchar(max), nvarchar(max), varbinary(max) al posto dei tipi di dati text, ntext e image, rispettivamente.
Inserimento bulk dei dati nelle tabelle pubblicate
La replica di tipo merge rileva le modifiche nelle tabelle pubblicate mediante trigger e tabelle di sistema. Se si esegue un inserimento bulk dei dati mediante l'utilità bcp o il comando BULK INSERT, i trigger non vengono attivati per impostazione predefinita. In tal caso, gli inserimenti non vengono rilevati e distribuiti agli altri nodi. Per garantire che le modifiche vengano rilevate, è consigliabile utilizzare uno degli approcci seguenti per l'esecuzione degli inserimenti bulk:
Utilizzare l'opzione FIRE_TRIGGERS per l'utilità bcp o il comando BULK INSERT. Questa opzione garantisce che i trigger vengano attivati in modo analogo a una normale operazione di inserimento. Per ulteriori informazioni, vedere Utilità bcp e BULK INSERT (Transact-SQL).
Eseguire la stored procedure sp_addtabletocontents dopo l'inserimento bulk. Questa procedura consente di inserire riferimenti nelle tabelle di sistema per tutte le righe di una tabella di origine non ancora incluse. Per ulteriori informazioni, vedere sp_addtabletocontents (Transact-SQL).
Vedere anche