Condividi tramite


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

Questo argomento descrive come specificare un resolver di articolo di tipo merge in SQL Server 2014 usando SQL Server Management Studio o Transact-SQL.

Contenuto dell'articolo

Prima di iniziare

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 usa la sincronizzazione Web

Uso di SQL Server Management Studio

Dopo la registrazione del resolver, specificare che un articolo deve usare il resolver nella scheda Resolver 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. Nella pagina Articoli della Creazione guidata nuova pubblicazione o nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione> selezionare una tabella.

  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 Resolver .

  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. Fare clic su OK.

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

Uso 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 resolver desiderato è già registrato, eseguire sp_enumcustomresolvers (Transact-SQL) nel server di pubblicazione in qualsiasi database. 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 resolver personalizzato desiderato non è già registrato, eseguire sp_registercustomresolver (Transact-SQL) nel server di distribuzione. Specificare un nome per il resolver per @article_resolver; per un gestore della logica di business, questo è il nome descrittivo dell'assembly. Per i resolver basati su COM, specificare CLSID della DLL per @resolver_clsid e per un gestore della logica di business, specificare un valore di trueper @is_dotnet_assembly, il nome dell'assembly per @dotnet_assembly_name e il nome completo della classe che esegue BusinessLogicModule l'override per @dotnet_class_name.

    Nota

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

  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\120\COM.

    • Utilizzare regsvr32.exe per registrare la DLL del sistema di risoluzione personalizzato con il sistema operativo. Ad esempio, l'esecuzione del comando seguente dal prompt dei comandi registra l'SQL Server Sistema di risoluzione dei conflitti additivi:

      regsvr32 ssradd.dll  
      
  5. Se il resolver è un gestore della logica di business, distribuire l'assembly nella stessa cartella dell'eseguibile 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 dell'eseguibile agente di merge è C:\Programmi\Microsoft SQL Server\120\COM.

Per 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 resolver 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 resolver dal passaggio 2 per @article_resolver e qualsiasi input necessario per il resolver personalizzato usando il parametro @resolver_info . Per i resolver personalizzati basati su stored procedure, @resolver_info è il nome della stored procedure. Per altre informazioni sull'input richiesto per i resolver forniti da Microsoft, vedere Microsoft COM-Based Resolver.

Per specificare o modificare un sistema di risoluzione personalizzato per un articolo di merge esistente

  1. Per determinare se è stato definito un resolver personalizzato per un articolo o per ottenere il nome del resolver, 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 resolver personalizzato desiderato nel campo valore del set di risultati.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_changemergearticle (Transact-SQL). Specificare un valore di article_resolver, incluso il percorso completo per i gestori della logica di business, per @property e il nome del resolver personalizzato desiderato dal passaggio 2 per @value.

  4. Per modificare qualsiasi input necessario per il resolver personalizzato, eseguire di nuovo sp_changemergearticle (Transact-SQL). Specificare un valore di resolver_info per @property e qualsiasi input necessario per il resolver personalizzato per @value. Per i resolver personalizzati basati su stored procedure, @resolver_info è il nome della stored procedure. Per altre informazioni sull'input richiesto, vedere Sistemi di risoluzione dei conflitti basati su Microsoft COM.

Per 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 resolver personalizzato da rimuovere nel campo valore del set di risultati.

  2. Eseguire sp_unregistercustomresolver (Transact-SQL) nel server di distribuzione. Specificare il nome completo del resolver personalizzato dal passaggio 1 per @article_resolver.

Esempi (Transact-SQL)

In questo esempio viene creato un nuovo articolo e viene specificato che il SQL Server risoluzione dei conflitti di averaging viene usato per calcolare la media della colonna UnitPrice quando si verificano 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 viene modificato un articolo per specificare l'uso del sistema di risoluzione dei conflitti additivi SQL Server per calcolare la somma della colonna UnitsOnOrder quando si verificano 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

Vedere anche

Rilevamento e risoluzione avanzati dei conflitti nella replica di tipo merge
Implementare un gestore della logica di business per un articolo di merge