Impostazione di un sistema di risoluzione dei conflitti dell'articolo di merge

Si applica a:SQL Server

Questo argomento descrive come specificare un sistema di risoluzione dei conflitti in SQL Server usando SQL Server Management Studio o Transact-SQL.

Consigli

  • La replica di tipo merge consente i tipi di sistemi di risoluzione dei conflitti dell'articolo indicati di seguito:

  • Per utilizzare un sistema di risoluzione dei conflitti diverso da quello predefinito, è necessario copiare il sistema desiderato nel computer in cui è in esecuzione l'agente di merge e registrarlo. Se si utilizza un gestore della logica di business, è necessario eseguire la registrazione anche nel server di pubblicazione. L'agente di merge viene eseguito nei sistemi seguenti:

    • Server di distribuzione per una sottoscrizione push

    • Sottoscrittore per una sottoscrizione pull

    • Server Microsoft Internet Information Services (IIS) per una sottoscrizione pull che utilizza la sincronizzazione Web

Utilizzo di SQL Server Management Studio

In seguito alla registrazione del sistema di risoluzione dei conflitti, specificare che è necessario che un articolo usi il sistema nella scheda Sistema di risoluzione della finestra di dialogo Proprietà articolo - <Articolo>, disponibile nella Creazione guidata nuova pubblicazione e nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione>. Per altre informazioni sull'uso della creazione guidata e l'accesso alla finestra di dialogo, vedere Creare una pubblicazione e Visualizzare e modificare le proprietà della pubblicazione.

Per specificare un sistema di risoluzione dei conflitti

  1. Selezionare una tabella nella pagina Articoli della Creazione guidata nuova pubblicazione o nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione>.

  2. Fare clic su Proprietà articoloe quindi su Imposta proprietà dell'articolo di tabella evidenziato.

  3. Nella pagina Proprietà articolo - <Articolo> fare clic sulla scheda Sistema di risoluzione.

  4. Selezionare Usa un sistema di risoluzione personalizzato (registrato nel server di distribuzione)e quindi fare clic sul sistema di risoluzione nell'elenco.

  5. Se il sistema di risoluzione dei conflitti richiede un input, ad esempio un nome di colonna, specificarlo nella casella di testo Immettere le informazioni necessarie per il sistema di risoluzione .

  6. Seleziona OK.

  7. Ripetere questa procedura per ogni articolo che richiede un sistema di risoluzione dei conflitti.

Utilizzo di Transact-SQL

Per registrare un sistema di risoluzione dei conflitti personalizzato

  1. Se si intende registrare un sistema di risoluzione dei conflitti personalizzato, creare uno dei tipi seguenti:

  2. Per determinare se il sistema di risoluzione desiderato è già registrato, eseguire sp_enumcustomresolvers (Transact-SQL) in qualsiasi database nel server di pubblicazione. Verrà visualizzata una descrizione del sistema di risoluzione personalizzato, nonché l'identificatore di classe (CLSID) di ogni sistema di risoluzione basato su COM registrato nel server di distribuzione oppure informazioni sull'assembly gestito per ogni gestore della logica di business registrato nel server di distribuzione.

  3. Se il sistema di risoluzione desiderato non è già registrato, eseguire sp_registercustomresolver (Transact-SQL) nel database di distribuzione. Specificare un nome per il sistema di risoluzione per @article_resolver. Nel caso di un gestore della logica di business, si tratta del nome descrittivo dell'assembly. Per i sistemi di risoluzione basati su COM, specificare il CLSID della DLL per @resolver_clsid, mentre per un gestore della logica di business specificare il valore true per @is_dotnet_assembly, il nome dell'assembly per @dotnet_assembly_name e il nome completo della classe che sostituisce BusinessLogicModule per @dotnet_class_name.

    Nota

    Se un assembly del gestore della logica di business non viene distribuito nella stessa directory del file eseguibile dell'agente di merge, è necessario specificare il percorso completo indicando il nome dell'assembly per @dotnet_assembly_name nella stessa directory dell'applicazione che avvia in modo sincrono l'agente di merge o nella Global Assembly Cache (GAC).

  4. Se il sistema di risoluzione è basato su COM:

    • Copiare la DLL del sistema di risoluzione personalizzato nel server di distribuzione per le sottoscrizioni push o nel Sottoscrittore per le sottoscrizioni pull.

      Nota

      I resolver personalizzati Microsoft sono disponibili nella directory C:\Programmi\Microsoft SQL Server\nnn\COM.

    • Utilizzare regsvr32.exe per registrare la DLL del sistema di risoluzione personalizzato con il sistema operativo. Ad esempio, eseguire il seguente comando dal prompt dei comandi per registrare il sistema di risoluzione dei conflitti aggiuntivi SQL Server:

      regsvr32 ssradd.dll  
      
  5. Se il sistema di risoluzione è un gestore della logica di business, distribuire l'assembly nella stessa cartella del file eseguibile dell'agente di merge (replmerg.exe), nella stessa cartella di un'applicazione che richiama l'agente di merge o nella cartella specificata per il parametro @dotnet_assembly_name nel passaggio 3.

    Nota

    Il percorso di installazione predefinito del file eseguibile agente di merge è C:\Programmi\Microsoft SQL Server\nnn\COM.

Specificare un sistema di risoluzione personalizzato durante la definizione di un articolo di merge

  1. Se si intende utilizzare un sistema di risoluzione dei conflitti personalizzato, crearlo e registrarlo utilizzando la procedura sopra riportata.

  2. Nel server di pubblicazione eseguire sp_enumcustomresolvers (Transact-SQL) e prendere nota del nome del sistema di risoluzione personalizzato desiderato nel campo valore del set di risultati.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergearticle (Transact-SQL). Specificare il nome del sistema di risoluzione ottenuto nel passaggio 2 per article_resolver ed eventuale input obbligatorio per il sistema di risoluzione personalizzato usando il parametro @resolver_info. Per sistemi di risoluzione personalizzati basati su stored procedure, @resolver_info corrisponde al nome della stored procedure. Per altre informazioni sull'input richiesto per i sistemi di risoluzione dei conflitti forniti da Microsoft, vedere Sistemi di risoluzione dei conflitti basati su Microsoft COM.

Specificare o modificare un sistema di risoluzione personalizzato per un articolo di merge esistente

  1. Per determinare se per un articolo è stato definito un sistema di risoluzione personalizzato oppure per ottenere il nome del sistema di risoluzione, eseguire sp_helpmergearticle (Transact-SQL). Se per l'articolo è stato definito un sistema di risoluzione personalizzato, il relativo nome verrà visualizzato nel campo article_resolver . Eventuale input fornito al sistema di risoluzione verrà visualizzato nel campo resolver_info del set di risultati.

  2. Nel server di pubblicazione eseguire sp_enumcustomresolvers (Transact-SQL) e prendere nota del nome del sistema di risoluzione personalizzato desiderato nel campo value del set di risultati.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_changemergearticle (Transact-SQL). Specificare il valore article_resolver, incluso il percorso completo dei gestori della logica di business, per @property, nonché il nome del sistema di risoluzione personalizzato desiderato ottenuto nel passaggio 2 per @value.

  4. Per modificare l'eventuale input richiesto per il sistema di risoluzione personalizzato, eseguire nuovamente sp_changemergearticle (Transact-SQL). Specificare il valore resolver_info per @property ed eventuale input obbligatorio per il sistema di risoluzione personalizzato per @value. Per sistemi di risoluzione personalizzati basati su stored procedure, @resolver_info corrisponde al nome della stored procedure. Per altre informazioni sull'input richiesto, vedere Sistemi di risoluzione dei conflitti basati su Microsoft COM.

Annullare la registrazione di un sistema di risoluzione dei conflitti personalizzato

  1. Nel server di pubblicazione eseguire sp_enumcustomresolvers (Transact-SQL) e prendere nota del nome del sistema di risoluzione personalizzato da rimuovere nel campo value del set di risultati.

  2. Eseguire sp_unregistercustomresolver (Transact-SQL) nel database di distribuzione. Specificare il nome completo del sistema di risoluzione personalizzato ottenuto nel passaggio 1 per @article_resolver.

Esempi (Transact-SQL)

In questo esempio viene creato un nuovo articolo e viene impostato l'utilizzo del sistema di risoluzione dei conflitti medi SQL Server per calcolare la media della colonna UnitPrice in caso di conflitti.

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = 'AdvWorksSalesOrdersMerge';
SET @article = 'Products';

EXEC sp_addmergearticle 
    @publication = @publication, 
    @article = @article, 
    @source_object = @article, 
    @article_resolver = 'Microsoft SQL Server Averaging Conflict Resolver', 
    @resolver_info = 'UnitPrice';
GO

In questo esempio un articolo viene impostato in modo da utilizzare il sistema di risoluzione dei conflitti aggiuntivi SQL Server per calcolare la somma della colonna UnitsOnOrder in caso di conflitti.

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = 'AdvWorksSalesOrdersMerge';
SET @article = 'Products';

EXEC sp_changemergearticle 
    @publication = @publication, 
    @article = @article, 
    @property='article_resolver', 
    @value='Microsoft SQL Server Additive Conflict Resolver';

EXEC sp_changemergearticle 
    @publication = @publication, 
    @article = @article, 
    @property='resolver_info', 
    @value='UnitsOnOrder';
GO

Vedi anche

Advanced Merge Replication Conflict Detection and Resolution
Implementare un gestore della logica di business per un articolo di merge