Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
azure SQL Managed Instance
Řešení chyb replikace může být frustrující, aniž byste měli základní znalosti o tom, jak funguje transakční replikace. Prvním krokem při vytváření publikace je vytvoření snímku agentem snímku a jeho uložení do složky snímku. Distribuční agent aplikuje snímek na odběratele.
Tento proces vytvoří publikaci a umístí ji do stavu synchronizace . Synchronizace funguje ve třech fázích:
Transakce probíhají u objektů replikovaných a jsou v transakčním protokolu označeny jako "pro replikaci".
Agent čtenáře protokolů prochází transakční protokol a hledá transakce, které jsou označené jako "pro replikaci". Tyto transakce se pak uloží do distribuční databáze.
Distribuční agent prohledá distribuční databázi pomocí vlákna čtenáře. Poté se tento agent pomocí vlákna zapisovače připojí k odběrateli, aby na něj aplikoval tyto změny.
K chybám může dojít v jakémkoli kroku tohoto procesu. Nalezení těchto chyb může být nejnáročnějším aspektem řešení potíží se synchronizací. Použití služby Replication Monitor naštěstí usnadňuje tento proces.
Poznámka:
Účelem tohoto průvodce odstraňováním potíží je naučit metodiku řešení potíží. Je navržená tak, aby nevyřešil vaši konkrétní chybu, ale poskytovala obecné pokyny k hledání chyb s replikací. K dispozici jsou některé konkrétní příklady, ale rozlišení se může lišit v závislosti na prostředí. Ukázkové chyby jsou založené na tutoriálu: Konfigurace replikace mezi dvěma plně propojenými servery (transakční).
Metodologie řešení potíží
Otázky k kladení
- Kde v procesu synchronizace dochází k selhání replikace?
- U kterého agenta dochází k chybě?
- Kdy se replikace naposledy úspěšně dokončila? Změnilo se od té doby něco?
Kroky, které je potřeba provést
Pomocí monitorování replikace zjistěte, ve kterém okamžiku replikace dochází k chybě (který agent?):
- Pokud v oddílu Publisher to Distributor dochází k chybám, jedná se o problém s agentem čtečky protokolů.
- Pokud v části Distributor do odběratele dochází k chybám, jedná se o problém s distribučním agentem.
Prohlédněte si historii úloh daného agenta ve službě Sledování aktivit úloh a zjistěte podrobnosti o chybě. Pokud historie úloh nezobrazuje dostatek podrobností, můžete pro konkrétního agenta povolit podrobné protokolování .
Pokuste se určit řešení chyby.
Vyhledání chyb pomocí agenta snímků
Agent snímku vygeneruje snímek a zapíše ho do zadané složky snímků.
Zobrazení stavu agenta snímků:
V Průzkumníku objektů rozbalte uzel Místní publikace v části Replikace.
Klikněte pravým tlačítkem na publikaci AdvWorksProductTrans>Zobrazit stav agenta snímku.
Pokud se ve stavu agenta snímků zobrazí chyba, najdete další podrobnosti v historii úloh agenta snímků:
Rozbalte agenta SQL Serveru v Průzkumníku objektů a otevřete monitorování aktivit úloh.
Seřaďte podle kategorie a identifikujte agenta snímků podle kategorie REPL-Snapshot.
Klikněte pravým tlačítkem myši na agenta snímku a pak vyberte Zobrazit historii.
V historii agenta snímků vyberte příslušnou položku protokolu. Obvykle se jedná o řádek nebo dva před položkou, která hlásí chybu. (Červený symbol X označuje chyby.) Zkontrolujte text zprávy v poli pod protokoly:
The replication agent had encountered an exception. Exception Message: Access to path '\\node1\repldata.....' is denied.
Pokud vaše oprávnění Windows nejsou pro složku snímků správně nakonfigurovaná, zobrazí se u agenta snímků chyba "Přístup byl odepřen". Potřebujete ověřit oprávnění ke složce, ve které je váš snímek uložený, a ujistěte se, že účet použitý ke spuštění agenta snímků má oprávnění pro přístup ke sdílené složce.
Vyhledání chyb pomocí agenta Log Reader
Agent Log Reader se připojí k vaší databázi vydavatele a zkontroluje transakční protokol všech transakcí, které jsou označené jako "pro replikaci". Potom tyto transakce přidá do distribuční databáze.
Připojte se k vydavateli v aplikaci SQL Server Management Studio. Rozbalte uzel serveru, klikněte pravým tlačítkem na složku Replikace a pak vyberte Spustit monitorování replikace:
Monitor replikace se otevře
Červený symbol X označuje, že se publikace nesynchronizuje. Rozbalte položku Vydavatelé na levé straně a potom rozbalte příslušný server vydavatele.
Vyberte publikaci AdvWorksProductTrans na levé straně a vyhledejte červenou X na jedné z karet, abyste zjistili, kde je problém. V tomto případě je červený symbol X na kartě Agenti , takže u jednoho z agentů dochází k chybě:
Vyberte kartu Agenti a určete, u kterého agenta dochází k chybě:
Toto zobrazení ukazuje dva agenty, agenta pro snapshot a čtenáře protokolu. Ta, která má chybu, má červené X. V tomto případě jde o agenta pro čtení logů.
Poklikejte na řádek, který hlásí chybu, a otevřete historii agenta pro agenta pro čtení protokolů. Tato historie obsahuje další informace o chybě:
Status: 0, code: 20011, text: 'The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.'. The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'. Status: 0, code: 15517, text: 'Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.'. Status: 0, code: 22037, text: 'The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.'.K chybě obvykle dochází v případě, že vlastník databáze vydavatele není správně nastavený. K tomu může dojít při obnovení databáze. Jak to ověříte:
Rozbalte databáze v Průzkumníku objektů.
Klikněte pravým tlačítkem myši na Vlastnosti AdventureWorks2025>.
Ověřte, že na stránce Soubory existuje vlastník. Pokud je toto pole prázdné, jedná se o pravděpodobnou příčinu vašeho problému.
Pokud je vlastník na stránce Soubory prázdný, otevřete okno Nový dotaz v kontextu
AdventureWorks2025databáze. Spusťte následující kód T-SQL:-- set the owner of the database to 'sa' or a specific user account, without the brackets. EXECUTE sp_changedbowner '<useraccount>'; -- example for sa: exec sp_changedbowner 'sa' -- example for user account: exec sp_changedbowner 'sqlrepro\administrator'Možná budete muset restartovat agenta Log Reader:
Rozbalte uzel agenta SQL Serveru v Průzkumníku objektů a otevřete Monitorování aktivit úloh.
Seřaďte podle kategorie a identifikujte agenta čtenáře protokolů podle kategorie REPL-LogReader .
Klikněte pravým tlačítkem na úlohu agenta Čtenář protokolu a vyberte Spustit úlohu v kroku.
Opětovným otevřením nástroje Replication Monitor ověřte, že se vaše publikace synchronizuje. Pokud ještě není otevřený, můžete ho najít tak, že v Průzkumníku objektů kliknete pravým tlačítkem na Replikaci .
Vyberte publikaci AdvWorksProductTrans , vyberte kartu Agenti a poklikáním otevřete historii agenta čtenáře protokolu. Teď byste měli vidět, že je spuštěný agent Log Reader a replikuje příkazy nebo nemá replikované transakce:
Vyhledání chyb s distribučním agentem
Distribuční agent najde data v distribuční databázi a pak je použije pro odběratele.
Připojte se k vydavateli v aplikaci SQL Server Management Studio. Rozbalte uzel serveru, klikněte pravým tlačítkem na složku Replikace a pak vyberte Spustit monitorování replikace.
V Nástroji Sledování replikace vyberte publikaci AdvWorksProductTrans a vyberte kartu Všechna předplatná . Klikněte pravým tlačítkem na předplatné a vyberte Zobrazit podrobnosti:
Otevře se dialogové okno Historie distributora k odběrateli a objasňuje, jakou chybu agent zaznamenává.
Error messages: Agent 'NODE1\SQL2016-AdventureWorks2022-AdvWorksProductTrans-NODE2\SQL2016-7' is retrying after an error. 89 retries attempted. See agent job history in the Jobs folder for more details.Tato chyba značí, že distribuční agent zkouší to znovu. Další informace najdete v historii úloh distribučního agenta:
Rozbalte SQL Server Agent v >Monitor aktivity úloh.
Seřaďte úlohy podle kategorie.
Identifikujte distribučního agenta podle kategorie REPL-Distribution. Klikněte pravým tlačítkem na agenta a vyberte Zobrazit historii.
Vyberte jednu z chybových položek a zobrazte text chyby v dolní části okna:
Message: Unable to start execution of step 2 (reason: Error authenticating proxy NODE1\repl_distribution, system error: The user name or password is incorrect.)Tato chyba značí, že heslo použitého distribučního agenta je nesprávné. Řešení:
Rozbalte uzel Replikace v Průzkumníku objektů.
Klikněte pravým tlačítkem na > předplatného.
Vyberte trojtečku (...) vedle účtu procesu agenta a upravte heslo.
Znovu zkontrolujte monitorování replikace kliknutím pravým tlačítkem na Replikaci v Průzkumníku objektů. Červený symbol X pod všechna předplatná naznačuje, že distribuční agent stále naráží na chybu.
Otevřete historii distribuce pro předplatitele tak, že kliknete pravým tlačítkem na předplatné v Replication Monitor> a zobrazíte podrobnosti. Chyba je nyní odlišná.
Connecting to Subscriber 'NODE2\SQL2016' Agent message code 20084. The process could not connect to Subscriber 'NODE2\SQL2016'. Number: 18456 Message: Login failed for user 'NODE2\repl_distribution'.Tato chyba značí, že se distribuční agent nemohl připojit k odběrateli, protože přihlášení uživatele NODE2 selhalo\repl_distribution. Pokud chcete provést další šetření, připojte se k odběrateli a otevřete aktuální protokol chyb SQL Serveru v uzlu Správa v Průzkumníku objektů:
Pokud se zobrazí tato chyba, přihlášení u předplatitele chybí. Pokud chcete tuto chybu vyřešit, přečtěte si téma Požadavky na roli zabezpečení pro replikaci.
Po vyřešení chyby přihlášení znovu zkontrolujte monitorování replikace. Pokud byly vyřešeny všechny problémy, měla by se vedle názvu publikace zobrazit zelená šipka a stav Spuštěno ve všech předplatných.
Kliknutím pravým tlačítkem myši na předplatné znovu otevřete historii distributor na odběratele, aby byla ověřena úspěšnost. Pokud agenta distribuce spouštíte poprvé, uvidíte, že snímek byl hromadně zkopírován odběratelem.
Vyhledání chyb pomocí agenta sloučení
Agent slučování může pro replikaci změn potřebovat hodně času. Pokud chcete zjistit, který krok procesu synchronizace při replikaci pomocí slučování trvá nejvíce času, použijte příznak trasování 101 společně s protokolováním agenta slučování. Za tímto účelem použijte následující parametry jako parametry agenta pro sloučení a následně agenta restartujte:
-T 101
-output
-outputverboselevel
Poznámka:
Pokud potřebujete do tabulky <distribution-server>..msmerge_history zapisovat statistiky, použijte příznak trasování 102.
Ukázkový výstup agenta sloučení po dokončení synchronizace replikace sloučení je následující:
**************************************************************
CONNECTION TIMES --> time took to establish the connection to the servers. Publisher (all connections) 156 msec Subscriber (all connections) 32 msec Distributor 93 msec
**************************************************************
UPLOAD COUNTERS --> upload phase (changes from the Sub to the Pub) stats MakeGeneration Time = 343 msec. InsertGenHistory Time = 31 msec. UpdateGenHistory Time = 0 msec. ProxiedMetadata Time = 0 msec.
**************************************************************
DOWNLOAD COUNTERS --> download phase (changes from the Pub to the Sub) stats MakeGeneration Time = 219 msec. InsertGenHistory Time = 0 msec. UpdateGenHistory Time = 0 msec.
**************************************************************
RETENTION-BASED CLEANUP STATISTICS --> sp_mergemetadataretentioncleanup proc stats Publisher: Cleanup Time 281 msec MSmerge_genhistory rows cleaned up 0 MSmerge_contents rows cleaned up 0 MSmerge_tombstone rows cleaned up 0 Subscriber: Cleanup Time 187 msec MSmerge_genhistory rows cleaned up 0 MSmerge_contents rows cleaned up 0 MSmerge_rowtrack rows cleaned up 0 MSmerge_tombstone rows cleaned up 0
**************************************************************
RETRY STATISTICS Retry Time (Upload) 0 msec. Retry Time (Download) 0 msec. Total changes retried 0 Number of Iterations through rows needing retry 0 Total number of changes that failed despite retry 0
**************************************************************
PROXY METADATA QUEUE COUNTERS Queue Full: Number of Waits: 0, Total Wait Time: 0 msec
**************************************************************
Distributor-side History Logging Time = 219 msec. Number of Distributor-side History Messages Logged = 11 Subscriber-side History Logging Time = 295 msec. Number of Subscriber-side History Messages Logged = 11
**************************************************************
2013-05-28 17:24:11.820 OLE DB Subscriber '<SQL Server name>\sql2008r2': DBCC SQLPERF (NETSTATS) 2013-05-28 17:24:11.822 OLE DB Publisher '<SQL Server name>\SQL2008R2': DBCC SQLPERF (NETSTATS) 2013-05-28 17:24:11.824 OLE DB Distributor '<SQL Server name>\SQL2008R2': DBCC SQLPERF (NETSTATS) NETWORK STATISTICS Server Reads Writes Bytes Read Bytes Written Publisher 74 74 19112 37526 Subscriber 73 73 19032 36931 Distributor 75 75 19192 38121
**************************************************************
NETWORK STATUS Network Connection: The computer has one or more LAN cards that are active. Network link speed: Destination Incoming Outgoing Publisher Unreachable Unreachable Subscriber Unreachable Unreachable Distributor Unreachable Unreachable
**************************************************************
Povolení podrobného protokolování u libovolného agenta
Podrobné protokolování můžete použít k zobrazení podrobnějších informací o chybách, ke kterým dochází u jakéhokoli agenta v topologii replikace. Postup je stejný pro každého agenta. Ujistěte se, že ve Sledování aktivity úloh vybíráte správného agenta.
Poznámka:
Agenti mohou být buď na straně vydavatele nebo odběratele, v závislosti na tom, zda se jedná o odebírání nebo zasílání předplatného. Pokud agent není na serveru, který prošetřujete, dostupný, zkontrolujte druhý server.
Rozhodněte, kam chcete podrobné protokolování uložit, a ujistěte se, že složka existuje. V tomto příkladu se používá c:\temp.
Rozbalte uzel agenta SQL Serveru v Průzkumníku objektů a otevřete Monitorování aktivit úloh.
Seřaďte podle kategorie a identifikujte agenta, který zajímá. V tomto příkladu se používá agent Log Reader. Klikněte pravým tlačítkem myši na agenta, který vás zajímá >Vlastnosti.
Vyberte stránku Kroky a zvýrazněte krok Spustit agenta . Vyberte Upravit.
Do pole Příkaz spusťte nový řádek, zadejte následující text a vyberte OK:
-Output C:\Temp\OUTPUTFILE.txt -Outputverboselevel 3Úroveň umístění a podrobností můžete upravit podle svých preferencí.
Při přidávání parametru podrobného výstupu můžou následující chyby způsobit selhání agenta nebo že soubor outfile chybí:
Došlo k problému s formátováním, kdy se pomlčka stala spojovníkem.
Umístění na disku neexistuje nebo účet, na kterém běží agent, nemá oprávnění k zápisu do zadaného umístění.
Mezi posledním parametrem a parametrem chybí mezera
-Output.Různí agenti podporují různé úrovně rozhovoru. Pokud povolíte podrobné protokolování, ale agent se nespustí, zkuste snížit zadanou úroveň podrobností o 1.
Restartujte agenta Log Reader tak, že v kroku kliknete pravým tlačítkem na agenta >Zastavit úlohu. Aktualizujte výběrem ikony Aktualizovat z panelu nástrojů. Klikněte pravým tlačítkem na agenta >Spustit úlohu ve fázi.
Zkontrolujte výstup na disku.
Pokud chcete zakázat podrobné protokolování, postupujte podle předchozích kroků a odstraňte celou řádku
-Output, kterou jste přidali dříve.
Související obsah
Získejte pomoc 
- Návrhy pro SQL: Máte návrhy na vylepšení SQL Serveru?
- Microsoft Q &A (SQL Server)
- DBA Stack Exchange (značka sql-server): Položte dotazy k SQL Serveru
- Stack Overflow (značka sql-server): Odpovědi na otázky týkající se vývoje SQL
- Licenční podmínky a informace pro Microsoft SQL Server
- Možnosti podpory pro firemní uživatele
- Další nápověda a zpětná vazba k SQL Serveru
Přispějte k dokumentaci SQL
Věděli jste, že obsah SQL můžete upravovat sami? Pokud to uděláte, nejen že vám pomůžete vylepšit naši dokumentaci, ale také jste získali kredit jako přispěvatel na stránku.
Další informace naleznete v Upravit dokumentaci Microsoft Learn.