Sdílet prostřednictvím


Pokročilá sloučená replikace – Detekce konfliktů a jejich řešení

platí pro:SQL Server

Když dojde k připojení a synchronizaci vydavatele a odběratele, agent sloučení zjistí, jestli dojde ke konfliktům. Pokud jsou zjištěny konflikty, agent sloučení používá řešitel konfliktů (který je určen při přidání článku do publikace) ke zjištění, která data jsou akceptována a rozšířena na jiné weby.

Slučovací replikace nabízí řadu metod pro detekci a řešení konfliktů. Pro většinu aplikací je výchozí metoda vhodná:

  • Pokud dojde ke konfliktu mezi vydavatelem a odběratelem, změna vydavatele se zachová a změna odběratele se zahodí.
  • Pokud dojde ke konfliktu mezi dvěma odběrateli, kteří používají předplatná klienta (výchozí typ pro vyžádaná předplatná), změna od prvního odběratele k synchronizaci s Vydavatelem se zachová a změna od druhého odběratele se zahodí. Informace o zadávání předplatných klienta a serveru naleznete v tématu Určení typu sloučení předplatného a priority řešení konfliktů (SQL Server Management Studio).
  • Pokud dojde ke konfliktu mezi dvěma odběrateli, kteří používají předplatná serveru (výchozí typ nabízených předplatných), změna od odběratele s nejvyšší hodnotou priority se zachová a změna od druhého odběratele se zahodí. Pokud jsou hodnoty priority stejné, změna z prvního odběratele na synchronizaci s Vydavatelem se zachová.

Poznámka:

I když se odběratel synchronizuje s vydavatelem, obvykle dochází ke konfliktům mezi aktualizacemi, které jsou provedeny u různých odběratelů, místo aktualizací u odběratele a vydavatele.

Chování detekce konfliktů a řešení závisí na následujících možnostech, které jsou popsány v tomto tématu:

  • Určujete sledování na úrovni sloupců, sledování na úrovni řádků nebo logické sledování na úrovni záznamů.

  • Bez ohledu na to, jestli zadáte výchozí mechanismus řešení na základě priority, nebo uvedete resolvér článků. Nástroj pro řešení článků může být:

    • Obslužná rutina obchodní logiky napsaná ve spravovaném kódu
    • Vlastní resolver založený na COM.
    • Překladač založený na modelu COM poskytnutý Microsoftem.

    Pokud se použije výchozí mechanismus řešení, chování je dále určeno typem použitého předplatného: klientem nebo serverem.

Detekce konfliktů

To, jestli se změna dat kvalifikuje jako konflikt nebo ne, závisí na typu sledování konfliktů, který jste pro článek nastavili:

  • Pokud vyberete sledování konfliktů na úrovni sloupce, považuje se za konflikt, pokud se změny ve stejném sloupci na stejném řádku provádějí na více než jednom uzlu replikace.
  • Pokud vyberete sledování na úrovni řádků, považuje se za konflikt, pokud se změny u všech sloupců ve stejném řádku provádějí na více než jednom uzlu replikace (sloupce ovlivněné v odpovídajících řádcích nemusí být stejné).
  • Pokud vyberete sledování na úrovni logického záznamu, považuje se za konflikt, pokud se změny pro každý řádek ve stejném logickém záznamu provádějí na více než jednom uzlu replikace (sloupce ovlivněné v odpovídajících řádcích nemusí být stejné).

Další informace naleznete v tématu Detekce a řešení konfliktů v logických záznamech.

Pokud chcete určit úroveň sledování konfliktů a řešení pro článek, viz Nastavení vlastností replikace sloučení.

Řešení konfliktů

Po zjištění konfliktu spustí agent sloučení vybraný řešitel konfliktů a použije ho k určení vítěze konfliktu. Vítězný řádek se použije u vydavatele a odběratele a data ze ztrátového řádku se zapíšou do konfliktní tabulky. Konflikty se vyřeší okamžitě po spuštění překladače, pokud se nerozhodnete konflikty vyřešit interaktivně.

Řešení konfliktů při slučování replikací

platí pro:SQL Server

Když dojde k připojení a synchronizaci vydavatele a odběratele, agent sloučení zjistí, jestli dojde ke konfliktům. Pokud se zjistí konflikty, agent sloučení použije nástroj pro řešení konfliktů k určení, která data budou přijata a šířena do jiných míst.

Poznámka:

I když se odběratel synchronizuje s vydavatelem, obvykle dochází ke konfliktům mezi aktualizacemi provedenými u různých odběratelů, nikoli aktualizacemi provedenými u odběratele a vydavatele.

Slučovací replikace nabízí řadu metod pro detekci a řešení konfliktů. Pro většinu aplikací je výchozí metoda vhodná:

  • Pokud dojde ke konfliktu mezi vydavatelem a odběratelem, změna vydavatele se zachová a změna odběratele se zahodí.

  • Pokud dojde ke konfliktu mezi dvěma odběrateli, kteří používají předplatná klienta (výchozí typ pro vyžádaná předplatná), změna od prvního odběratele k synchronizaci s Vydavatelem se zachová a změna od druhého odběratele se zahodí. Informace o zadávání předplatných klienta a serveru naleznete v tématu Určení typu sloučení předplatného a priority řešení konfliktů (SQL Server Management Studio).

  • Pokud dojde ke konfliktu mezi dvěma odběrateli, kteří používají předplatná serveru (výchozí typ nabízených předplatných), změna od odběratele s nejvyšší hodnotou priority se zachová a změna od druhého odběratele se zahodí. Pokud jsou hodnoty priority stejné, změna z prvního odběratele na synchronizaci s Vydavatelem se zachová.

Další informace o detekci konfliktů a řešení pro slučovací replikaci najdete v tématu Rozšířené zjišťování konfliktů při slučování a řešení konfliktů.

Typy resolverů

Při slučovací replikaci probíhá řešení konfliktů na úrovni článku. U publikací, které se skládají z několika článků, můžete mít různé řešitele konfliktů obsluhující různé články nebo stejný konfliktní řešitel, který slouží jednomu článku, několika článkům nebo všem článkům, které obsahují publikaci.

Pokud plánujete použít výchozí řešení konfliktů na základě priority, nemusíte nastavovat vlastnost řešiče publikace. Pokud chcete místo výchozího překladače použít překladač článků, musíte nastavit vlastnost překladače pro článek, který ho bude používat výběrem dostupného překladače v Publisheru. Všechny konkrétní informace, které je třeba předat řešiči, lze také zadat ve vlastnosti informace o řešiči.

Slučovací replikace nabízí čtyři typy řešení konfliktů:

  • Výchozí řešení konfliktů na základě priority

    Výchozí mechanismus řešení se chová odlišně v závislosti na tom, jestli jde o předplatné klienta nebo serverové předplatné. Prioritní hodnoty přiřadíte jednotlivým subscriberům, kteří používají serverová předplatná; změny provedené v uzlu s nejvyšší prioritou převládnou všechny konflikty. U klientských předplatných vyhraje první změna zapsaná do Publisheru konflikt.

    Po vytvoření předplatného se nedá změnit z jednoho typu na jiný.

  • Obslužný procesor obchodní logiky

    Architektura obsluhy obchodní logiky vám umožňuje napsat sestavení spravovaného kódu, které je voláno během procesu synchronizace sloučení. Sestavení obsahuje obchodní logiku, která může během synchronizace reagovat na konflikty a řadu dalších podmínek. Další informace naleznete v tématu Spuštění obchodní logiky během synchronizace sloučení.

  • Vlastní řešitel založený na COM

    Slučovací replikace poskytuje API pro zápis řešitelů jako objektů COM v jazycích, jako je Microsoft Visual C++ nebo Microsoft Visual Basic. Další informace najdete v tématu COM-Based vlastních překladačů.

  • Řešitel založený na modelu COM poskytovaný společností Microsoft

    Microsoft SQL Server obsahuje několik překladačů založených na modelu COM. Další informace naleznete v tématu Microsoft COM-Based Resolvers.

Informace o tom, jak vybrat odpovídající typ překladače, naleznete v tématu Volba překladače.

Poznámka:

Někteří řešitelé článků jsou navrženi tak, aby zpracovávali konflikty pouze pro určité operace. Rezolver může například zpracovávat aktualizace, ale ne vkládání ani mazání. Výchozí řešení konfliktů na základě priority zpracovává všechny konflikty, které řešitele článku nezpracovává.

Pokud chcete zadat typ sloučeného předplatného a prioritu řešení konfliktů, podívejte se na následující odkaz.

Interaktivní řešitel

Replikace poskytuje uživatelské rozhraní interaktivního řešitele, které lze použít ve spojení s výchozím řešitelem konfliktů na základě priority nebo řešitelem článku. Při synchronizaci na vyžádání prostřednictvím Správce synchronizace systému Microsoft Windows interaktivní řešitel zobrazuje konfliktní data během provozu a umožňuje vám vybrat způsob, jak konflikty vyřešit. Další informace o povolení interaktivního řešení a spuštění interaktivního překladače najdete v tématu Řešení interaktivních konfliktů.

Zobrazení konfliktů

Nejjednodušší způsob, jak zobrazit konflikty, je použít Prohlížeč konfliktů replikace, který je k dispozici z aplikace SQL Server Management Studio (SQL Server také poskytuje uložené procedury, které umožňují dotazovat konfliktní tabulky.) Prohlížeč konfliktů a interaktivní překladač jsou podobné nástroje, ale interaktivní překladač umožňuje vyřešit konflikty při synchronizaci, zatímco prohlížeč konfliktů je navržen pro zobrazení konfliktů po jejich vyřešení. Pokud jsou metadata konfliktů stále dostupná v systémových tabulkách (ve výchozím nastavení se uchovávají metadata konfliktů po dobu 14 dnů), můžete přepsat výsledky řešení konfliktů v Prohlížeči konfliktů, ale pokud je potřeba přímý zásah pravidelně, zvažte použití interaktivního překladače.

Poznámka:

Konflikty, které zahrnují logické záznamy, se nezobrazují v Prohlížeči konfliktů. Pokud chcete zobrazit informace o těchto konfliktech, použijte uložené procedury replikace. Další informace naleznete v tématu Zobrazení informací o konfliktech pro sloučené publikace (Replikace Transact-SQL programování).

Prohlížeč konfliktů zobrazí informace ze tří systémových tabulek:

  • Replikace vytvoří konfliktní tabulku pro každou tabulku ve slučovacím článku s názvem ve tvaru MSmerge_conflict_<PublicationName>_<ArticleName>.

    Konfliktní tabulky mají stejnou strukturu jako tabulky, na kterých jsou založeny. Řádek v jedné z těchto tabulek se skládá z prohrávající verze konfliktního řádku (vítězná verze řádku je ve skutečné uživatelské tabulce).

  • Tabulka MSmerge_conflicts_info poskytuje informace o jednotlivých konfliktech, včetně typu konfliktu.

  • Tabulka sysmergearticles identifikuje, které uživatelské tabulky mají konfliktní tabulky, a poskytuje informace o konfliktních tabulkách.

Ve výchozím nastavení se ukládají konfliktní informace:

  • U vydavatele a odběratele, pokud je úroveň kompatibility publikace 90RTM nebo vyšší.

  • V Publisheru, pokud je úroveň kompatibility publikace nižší než 80RTM.

  • Pokud předplatitelé používají SQL Server Compact, v Publisheru. Konfliktní data nelze uložit na předplatitele SQL Serveru Compact.

Pro zobrazení konfliktů