Condividi tramite


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

In questo argomento viene descritto come specificare un sistema di risoluzione dell'articolo di merge in SQL Server 2012 tramite SQL Server Management Studio o Transact-SQL.

Contenuto dell'argomento

  • Prima di iniziare:

    Indicazioni

  • Per specificare un sistema di risoluzione dell'articolo di merge, utilizzando

    SQL Server Management Studio

    Transact-SQL

Prima di iniziare

Indicazioni

  • 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

Icona freccia utilizzata con il collegamento Torna all'inizio[Top]

Utilizzo di SQL Server Management Studio

In seguito alla registrazione del sistema di risoluzione dei conflitti, specificare che è necessario che un articolo utilizzi 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 ulteriori informazioni sull'utilizzo della procedura guidata e sull'accesso a questa finestra di dialogo, vedere Creazione di una pubblicazione e Visualizzazione e modifica delle 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à articolo e 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. Fare clic su OK.

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

Icona freccia utilizzata con il collegamento Torna all'inizio[Top]

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 del 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 personalizzato desiderato non è già registrato, eseguire sp_registercustomresolver (Transact-SQL) nel server 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 sistemi di risoluzione personalizzati Microsoft sono disponibili nella directory C:\Programmi\Microsoft SQL Server\110\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 al passaggio 3.

    [!NOTA]

    Il percorso di installazione predefinito del file eseguibile dell'agente di merge è C:\Programmi\Microsoft SQL Server\110\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 notare il 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_addmergearticle (Transact-SQL). Specificare il nome del sistema di risoluzione ottenuto al passaggio 2 per @article_resolver ed eventuale input obbligatorio per il sistema di risoluzione personalizzato utilizzando il parametro @resolver_info. Per sistemi di risoluzione personalizzati basati su stored procedure, @resolver_info corrisponde al nome della stored procedure. Per ulteriori informazioni sull'input obbligatorio per i sistemi di risoluzione dei conflitti forniti da Microsoft, vedere Sistemi di risoluzione dei conflitti basati su Microsoft COM.

Per 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 notare il 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 al passaggio 2 per @value.

  4. Per modificare eventuale input obbligatorio 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 ulteriori informazioni sull'input obbligatorio, 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 notare il nome del sistema di risoluzione personalizzato da rimuovere nel campo value del set di risultati.

  2. Eseguire sp_unregistercustomresolver (Transact-SQL) nel server di distribuzione. Specificare il nome completo del sistema di risoluzione personalizzato ottenuto al 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

Icona freccia utilizzata con il collegamento Torna all'inizio[Top]

Vedere anche

Concetti

Rilevamento e risoluzione avanzati dei conflitti nella replica di tipo merge

Implementazione di un gestore della logica di business per un articolo di merge