sql >> Databáze >  >> RDS >> Sqlserver

Odstraňování problémů s replikací serveru SQL

V předchozím článku Nastavení a konfigurace replikace serveru SQL jsme podrobně probrali koncept replikace serveru SQL, jeho součásti, typy a jak krok za krokem nakonfigurovat transakční replikaci SQL. Důrazně doporučujeme projít si předchozí článek a porozumět konceptu replikace a jejím součástem před čtením tohoto článku. V tomto článku se podíváme, jak řešit problémy se stávajícím serverem SQL Server Replication.

Přehled odstraňování problémů

Hlavním cílem replikace SQL Server je zachování synchronizace dat ve vydavateli a odběrateli. Ve šťastném scénáři, pokud je transakce provedena a potvrzena v publikační databázi, bude zkopírována do distribuční databáze, poté synchronizována a aplikována na všechny odběratele připojené k danému vydavateli. Pokud se v kterémkoli kroku tohoto procesu vyskytne problém, změny vydavatele nebudou na straně odběratele k dispozici. V tomto případě musíme tento problém vyřešit a opravit co nejdříve, než skončíme s ukončeným serverem replikace SQL, který by měl být znovu synchronizován od nuly, nebo v databázi se souborem protokolu transakcí dojde volné místo, čímž dojde k pozastavení všech databázových transakcí. .

Identifikace, ve kterém kroku selhává synchronizace replikace, a přiřazení indikativní chybové zprávy, která vede k vyřešení problému, je nejnáročnější částí procesu odstraňování problémů s replikací SQL Server. Také kontrola času poslední synchronizace a změn provedených v tomto čase nebo po něm, které mohou způsobit toto selhání, může také pomoci při odstraňování selhání synchronizace replikace.

Pochopení role agenta SQL Server Replication pomůže při identifikaci, ve kterém kroku synchronizace selže. Připomeňme, že existují tři replikační agenti, kteří jsou běžní pro většinu typů replikace SQL Server. Agent snímku je zodpovědný za vytvoření počátečního snímku synchronizace. Agent čtečky protokolů je zodpovědný za načtení změn ze souboru protokolu transakcí databáze a jeho zkopírování do distribuční databáze a nakonec do Distribuce agent, který je zodpovědný za synchronizaci změn s odběrateli.

V tomto článku využijeme výhod Monitoru replikace a Monitor aktivity úlohy Windows při sledování stavu replikace SQL Server a získávání informací o jakékoli chybě selhání synchronizace.

Scénáře odstraňování problémů

Nejlepším a přímým způsobem, jak porozumět tomu, jak řešit problémy s replikací serveru SQL, je poskytnout praktické scénáře a ukázat, jak tento konkrétní problém vyřešit. Začněme diskutovat o scénářích jeden po druhém.

Problém se službou SQL Server Agent

Služba SQL Server Agent hraje zásadní roli v procesu synchronizace SQL Server Replication. To je způsobeno skutečností, že každý replikační agent poběží pod úlohou agenta SQL.

Jako proaktivní správce databáze musíte denně kontrolovat stav replikačního místa SQL. Chcete-li zkontrolovat stav replikačního místa, klikněte pravým tlačítkem myši na Publikaci v uzlu Replikace -> Místní publikace a zvolte Spustit monitor replikace. možnost, jak je uvedeno níže:

V okně Monitor replikace můžete vidět varovnou zprávu, která ukazuje, že platnost replikace brzy vyprší nebo již vypršela, aniž byste viděli žádnou orientační chybovou zprávu, jak je uvedeno níže:

Pokud nám okno Replication Monitor neposkytuje žádné užitečné informace o tom, proč brzy vyprší platnost replikačního webu, dalším krokem je zkontrolovat Job Activity Monitor pod uzlem SQL Server Agent. Když navštívíte uzel SQL Server Agent, přímo uvidíte, že služba SQL Server Agent Service není spuštěna (z červeného kroužku vedle). Pokud služba SQL Server Agent Service neběží, znamená to, že všechny úlohy vytvořené v této instanci nefungují, včetně úloh replikačního agenta. V důsledku toho nefunguje celkový web replikace.

K vyřešení tohoto problému musíme spustit službu SQL Server Agent z SQL Server Management Studio přímo nebo pomocí SQL Server Configuration Manager (doporučeno), jak je uvedeno níže:

Po spuštění služby SQL Server Agent znovu zkontrolujte Sledování replikace a ujistěte se, že stav odběratele je Spuštěno. a všechny čekající transakce jsou úspěšně synchronizovány s předplatitelem. Tyto kroky můžete zkontrolovat jeden po druhém tak, že zkontrolujete, že jsou záznamy zkopírovány ze sekce Vydavatel k Distributorovi:

Poté byla úspěšně synchronizována od distributora k předplatiteli, jak je uvedeno níže:

A nakonec se ujistěte, že na poslední kartě není žádná nedistribuovaná transakce, jak je znázorněno níže:

Poté se musíme ujistit, že úlohy replikačních agentů fungují bez problémů. Úlohy SQL Agent lze zkontrolovat rozbalením uzlu SQL Server Agent v Průzkumníku objektů SSMS a zobrazením monitoru aktivity úlohy a poté zkontrolovat, zda je spuštěn agent Log Reader Agent a Distributor, přičemž je třeba vzít v úvahu, že agent Snapshot Agent bude fungovat pouze během proces vytváření snímku, jak je znázorněno níže:

Můžete si také prohlédnout historii úloh replikačních agentů a zkontrolovat předchozí příčinu selhání tak, že na danou úlohu kliknete pravým tlačítkem a zvolíte Zobrazit historii možnost, jak je uvedeno níže:

Kde můžete najít orientační chybovou zprávu, která vám v budoucnu pomůže tento problém vyřešit, jak je uvedeno níže:

Abychom předešli předchozímu problému, režim spouštění služby SQL Server Agent by se měl změnit z Manual na Automatic, tímto způsobem zajistíte, že se služba spustí automaticky po restartu hostitelského serveru.

Problém s oprávněním agenta snímku

Předpokládejme, že při kontrole stavu replikace serveru SQL pomocí nástroje Sledování replikace jste si všimli, že došlo k selhání replikace podle znaku X uvnitř červeného kruhu. A Monitor replikace ukazuje, že chyba je způsobena jedním z replikačních agentů, podle znaku X uvnitř červeného kruhu v horní části karty Agenti.

Abychom identifikovali toto selhání replikace, měli bychom procházet kartu Agenti a zkontrolovat, který agent selhává. Na stránce Agenti uvidíte, že selhává agent snímku. Dvakrát klikněte na agenta snímku a prohlédněte si níže uvedenou chybovou zprávu:

Agent replikace nezaprotokoloval zprávu o průběhu po dobu 10 minut. To může znamenat nereagující agent nebo vysokou aktivitu systému. Ověřte, že se záznamy replikují do cíle a že připojení k předplatiteli, vydavateli a distributorovi jsou stále aktivní.

Tato chybová zpráva je bohužel obecná a ukazuje pouze to, že agent snímku nefunguje bez uvedení důvodu, a to následovně:

Pak musíme hledat užitečné informace na jiném místě, což je práce Snapshot Agent. V okně Job Activity Monitor pod uzlem SQL Server Agent můžete vidět, že úloha Snapshot Agent selhala. A z té historie úloh můžete vidět, že to nedávno selhalo kvůli problému s ověřováním proxy. Jinými slovy, přihlašovací údaje k účtu, pod kterým běží Snapshot Agent, nejsou správné, jak je znázorněno níže:

Chcete-li vyřešit problém s pověřením Snapshot Agent, klikněte pravým tlačítkem myši na Publikaci v uzlu Replikace -> Místní publikace a vyberte Vlastnosti volba. V okně Vlastnosti publikace procházejte Zabezpečení agenta stránku a znovu vložte přihlašovací údaje k účtu, pod kterým bude Snapshot Agent běžet.

Po obnovení přihlašovacích údajů účtu Snapshot Agent znovu spusťte úlohu Snapshot Agent z okna Job Activity Monitor a ujistěte se, že úloha funguje správně, jak je uvedeno níže:

Také zkontrolujte, zda agent snímku nyní funguje správně a chybová zpráva se již nezobrazuje pod monitorem replikace, jak je znázorněno níže:

Problém s oprávněním ke složce snímků

Předpokládejme, že při pokusu o synchronizaci vydavatele a předplatitele pomocí počátečního snímku nebo opětovné synchronizaci místa replikace snímku pomocí nového snímku se proces vytváření snímku nezdařil s chybovou zprávou přístupu níže:

Tato chybová zpráva ukazuje, že účet, pod kterým je spuštěn Snapshot Agent, nemá oprávnění pro přístup ke složce snímků zadané v chybové zprávě.

Abychom tento problém vyřešili, musíme zkontrolovat účet, pod kterým je spuštěn Snapshot Agent, na stránce Zabezpečení agenta v okně Vlastnosti publikace, jak je znázorněno níže:

Poté procházejte složku snímku uvedenou v chybové zprávě a ujistěte se, že tento účet snímku má minimální oprávnění ke čtení a zápisu do této složky, poté znovu spusťte agenta snímku a zkontrolujte, zda je problém nyní vyřešen a snímek synchronizace je úspěšně vytvořen, protože níže:

Problém s oprávněním odběratele

Předpokládejme, že při kontrole stavu serveru replikace SQL Server pomocí nástroje Replication Monitor zjistíte, že došlo k selhání odběratele, jak je znázorněno níže:

Pokud kliknete na ikonu chyby, uvidíte, že došlo k chybě při pokusu o synchronizaci transakcí od distributora k předplatiteli. A z chybové zprávy je jasné, že distributor se nemůže připojit k instanci SQL Server předplatitele kvůli problému s oprávněním, jak je uvedeno níže:

Abychom tento problém vyřešili, musíme zkontrolovat a obnovit přihlašovací údaje používané k připojení k instanci odběratele. Chcete-li zkontrolovat přihlašovací údaje, klepněte pravým tlačítkem myši na Předplatné pod uzlem Replikace -> Místní publikace -> název aktuální publikace a vyberte možnost Vlastnosti. Z Připojení předplatitele pole v okně Vlastnosti odběratele obnovte přihlašovací údaje pro účet, který bude použit pro připojení k instanci odběratele, jak je znázorněno níže:

Poté znovu zkontrolujte stav replikace z Monitoru replikace a uvidíte, že problém s připojením předplatitele již není k dispozici a replikační lokalita běží normálně, jak je uvedeno níže:

Odběratel není dosažitelný

Dalším problémem selhání replikace SQL Server, se kterým se můžete setkat na straně odběratele, je to, že se distributor nemůže připojit k odběrateli, což ukazuje na stránce distributora k odběrateli, že není schopen otevřít spojení s odběratelem kvůli „síti Související… ” chyba připojení, zobrazená v okně Monitor replikace níže:

Tato chybová zpráva označuje, že došlo k problému s připojením mezi instancí distributora a instancí odběratele. Prvním a přímým způsobem, jak zkontrolovat tento problém s připojením, je ujistit se, že instance SQL Server odběratele je online. To lze zkontrolovat z SQL Server Configuration Manager na straně předplatitele. V naší situaci vidíme, že služba SQL Server na straně předplatitele je zastavena. Chcete-li tento problém vyřešit, spusťte službu SQL Server Service a zkontrolujte v Monitoru replikace, zda je replikační lokalita znovu synchronizována, jak je znázorněno níže. Pokročilejší problém s připojením SQL naleznete v dokumentu MS o řešení potíží s připojením:

Problém s oprávněním k databázi odběratelů

Předpokládejme, že kontrolujete stav synchronizace SQL Server Replication pomocí nástroje Replication Monitor a při pokusu o replikaci změn z distributora na odběratele bylo zjištěno, že replikace selhává. Kliknutím na chybu odběratele uvidíte, že Distributor je schopen kontaktovat předplatitele a připojit se k němu, ale nemůže se připojit k databázi předplatného kvůli nedostatku oprávnění, jak je znázorněno níže:

Chcete-li tento problém vyřešit, připojte se k odběrateli a ujistěte se, že účet, který se používá k připojení k databázi odběratele, je členem pevné role databáze db_Owner, jak je uvedeno níže:

Poté znovu zkontrolujte Sledování replikace a ujistěte se, že distributor je schopen získat databázi předplatného a replikovat změny, jak je uvedeno níže:

Problém s rozdílem v datech

Předpokládejme, že jeden z vývojových týmů databáze tvrdí, že některé změny provedené v tabulce Shift na vydavateli (SQL1) se neodrážejí v denních sestavách, které běží na instanci Subscriber (SQL2), a poskytl snímek níže. což ukazuje, že změny nejsou replikovány:

Prvním krokem při kontrole problému se synchronizací replikace je otevření Monitoru replikace a zjištění, ve kterém kroku selhává. Z monitoru replikace můžete vidět, že agent Log Reader Agent selhává, protože změny nejsou replikovány od distributora k odběrateli, ale od tohoto agenta není vrácena žádná jasná zpráva, jak je znázorněno níže:

Protože nemůžeme najít smysluplnou chybovou zprávu z Replication Monitor, zkontrolujeme historii úlohy Log Reader Agent pomocí Job Activity Monitor, který ukazuje, že přihlašovací údaje pro účet, pod kterým běží Log Reader Agent, jsou nesprávné. , jak je uvedeno níže:

Chcete-li vyřešit problém s přihlašovacími údaji agenta Log Reader, přejděte na stránku Zabezpečení agenta v okně Vlastnosti publikace a obnovte přihlašovací údaje agenta Log Reader na platné, jak je uvedeno níže:

Když znovu zkontrolujete Monitor replikace, uvidíte, že změny byly úspěšně replikovány a že data jsou aktualizována novými změnami směn, jak je znázorněno níže:

Řádek nebyl nalezen u odběratele

Podívejme se na problém z druhé strany. Řekněme, že došlo ke změně v tabulce směn, jak je uvedeno níže:

Tato změna však není replikována na odběratele a celkový server replikace serveru SQL se nezdařil. Z monitoru replikace můžete vidět, že selhává při pokusu o změnu z distributora na odběratele a selhalo kvůli skutečnosti, že není schopen aktualizovat tento konkrétní záznam s ID rovným 3, protože tento záznam není k dispozici v tabulce databáze předplatitelů, jak je uvedeno níže:

Při kontrole tohoto záznamu na straně předplatitele (SQL2) uvidíte, že záznam není dostupný, jak je uvedeno níže:

Abychom tento problém vyřešili, musíme tento záznam znovu vložit do tabulky databáze předplatitelů a nechat distributora, aby se jej pokusil znovu aktualizovat, čímž se vyřeší problém se selháním synchronizace replikace, jak je uvedeno níže:

SQL Server nám poskytuje možnost nechat replikační web pokračovat v práci, i když je nalezen problém s nekonzistencí dat, kde můžete tento problém s nekonzistencí později opravit ručně. Chcete-li to provést, klikněte v Monitoru replikace pravým tlačítkem myši na předplatitele a vyberte možnost Profil agenta možnost, jak je uvedeno níže:

V zobrazeném okně můžete aktualizovat profil agenta Log Reader Agent a umožnit mu pokračovat v replikaci změn dat v případě problému s nekonzistencí dat, jak je znázorněno níže:

Problém s neinicializovaným předplatným

Pokud je replikační místo ponecháno bez monitorování po dlouhou dobu a došlo k selhání bez jakékoli opravy po dobu delší než tři dny, platnost replikačního místa vyprší a předplatné bude označeno jako neinicializované a čeká na opětovnou inicializaci pomocí nového snímku. . Stejnému scénáři lze čelit při vytváření nového předplatného bez jeho inicializace, jak je znázorněno níže:

Abychom tento problém vyřešili, měli bychom toto předplatné znovu inicializovat tak, že klikneme pravým tlačítkem myši na předplatné pod uzlem Replikace -> Místní publikace a rozbalíme publikaci, poté vybereme možnost Znovu inicializovat a označíme toto předplatné pro inicializaci a připravíme jej na příjem nového snímek, jak je znázorněno níže:

Pokud po opětovné inicializaci zůstane stav Subscription Neinicializován, zkontrolujte úlohu Snapshot Agent pomocí okna Job Activity Monitor a zjistěte, proč selhává. V historii úlohy Snapshot Agent uvidíte, že úloha selhala kvůli problému určujícímu vlastníka této úlohy agenta, jak je znázorněno níže:

Chcete-li tento problém vyřešit, otevřete úlohu Snapshot Agent a změňte vlastníka úlohy na SA nebo jakéhokoli platného administrátora a úloha se úspěšně spustí, jak je uvedeno níže:

Nyní uvidíte, že se stav předplatného změnil na Spuštěno, což znamená, že čeká na počáteční snímek, aby se mohl spustit proces synchronizace, jak je znázorněno níže:

Chcete-li vygenerovat nový snímek, klikněte pravým tlačítkem myši na publikaci v části Replikace-> Místní publikace a vyberte možnost Zobrazit stav agenta snímku možnost.

V otevřeném okně klikněte na tlačítko Start pro zahájení procesu vytváření snímku. Po úspěšném vytvoření snímku obsahujícího všechny články vydavatele otevřete znovu Monitor replikace a zkontrolujte stav předplatného, ​​kde uvidíte, že snímek je použit pro předplatitele a synchronizován s vydavatelem, jak je znázorněno níže:

Problém s vlastníkem databáze vydavatele

Předpokládejme také, že při kontrole stavu serveru replikace SQL Server pomocí nástroje Sledování replikace došlo k selhání replikačního místa a selhání bylo zjištěno u agenta Log Reader. Při kontrole chybové zprávy vrácené tímto agentem bylo zjištěno, že došlo k problému s určením aktuálního vlastníka databáze publikací, jak je znázorněno níže:

Abychom tento problém vyřešili, musíme aktualizovat aktuálního vlastníka databáze publikací tím, že jej nahradíme platným uživatelem databáze pomocí SP_changedbowner systémovou uloženou proceduru nebo jednoduše z okna vlastností databáze. Poté znovu spusťte úlohu Log Reader Agent pomocí okna Job Activity Monitor a poté pomocí nástroje Replication Monitor ověřte, zda problém s agentem již není k dispozici, jak je znázorněno níže:

Závěr

V tomto článku jsme ukázali různé problémy, se kterými se můžete setkat při používání funkce SQL Server Replication ke kopírování dat mezi různými weby, a jak tyto problémy vyřešit.

Důrazně se doporučuje udržovat SQL Server Engine aktuální, s nejnovějšími SP a CU, takže všechny chyby související s funkcemi SQL Server Replication budou opraveny automaticky. A konečně, jako proaktivní správce databáze SQL Server sledujte svůj replikační web, abyste od začátku opravili jakýkoli problém, než se zvětší a bude obtížnější jej opravit.


  1. Bývalý výkonný ředitel Capgemini, Sunitha Ray, se připojil k ScaleGrid DBaaS, aby rozšířil podnikový prodej

  2. SQL Server Azure / 2022 Database Ledger Tables z Linuxu.

  3. Python SQL – Jak používat databáze SQLite, MySQL a PostgreSQL s Pythonem

  4. Vraťte výsledky dotazu jako seznam oddělený čárkami v Oracle