Megosztás:


Hibaelhárító: Hibák keresése az SQL Server tranzakciós replikációjával kapcsolatban

A következőkre vonatkozik:SQL ServerAzure SQL Managed Instance

A replikációs hibák hibaelhárítása frusztráló lehet anélkül, hogy alapvető ismereteket kellene tudnia a tranzakciós replikáció működéséről. A kiadvány létrehozásának első lépése, hogy a Pillanatkép-ügynök létrehozza a pillanatképet, és menti azt a pillanatkép mappába. Ezután a terjesztési ügynök alkalmazza a pillanatképet az előfizetőre.

Ez a folyamat létrehozza a kiadványt, és szinkronizálási állapotba helyezi. A szinkronizálás három fázisban működik:

  1. A tranzakciók replikált objektumokon történnek, és a tranzakciónaplóban "replikációra" vannak jelölve.

  2. A Naplóolvasó ügynök megvizsgálja a tranzakciónaplót, és megkeresi a "replikációra" megjelölt tranzakciókat. A rendszer ezután menti ezeket a tranzakciókat a terjesztési adatbázisba.

  3. A terjesztési ügynök az olvasószál használatával megvizsgálja a terjesztési adatbázist. Ezután az írószál használatával ez az ügynök csatlakozik az előfizetőhöz, hogy alkalmazza ezeket a módosításokat az előfizetőre.

A folyamat bármely lépésében hibák léphetnek fel. Ezeknek a hibáknak a megkeresése a szinkronizálási problémák elhárításának legnagyobb kihívást jelentheti. Szerencsére a Replikációfigyelő használata megkönnyíti ezt a folyamatot.

Megjegyzés:

Ennek a hibaelhárítási útmutatónak a célja a hibaelhárítási módszertan elsajátítása. Nem az adott hiba megoldására szolgál, hanem általános útmutatást nyújt a replikációval kapcsolatos hibák megtalálásához. Néhány konkrét példát is megadunk, de a megoldásuk a környezettől függően változhat. A példahibák az „két teljesen csatlakoztatott kiszolgáló közötti replikáció konfigurálása (tranzakció-alapú)” oktatóanyagon alapulnak.

Hibaelhárítási módszertan

Felteendő kérdések

  1. A szinkronizálási folyamat mely pontjánál sikertelen a replikáció?
  2. Melyik ügynök tapasztal hibát?
  3. Mikor működött utoljára sikeresen a replikáció? Azóta változott valami?

Teendők

  1. A Replikációfigyelővel azonosíthatja, hogy a replikáció melyik ponton találkozik a hibával (melyik ügynökkel?):

    • Ha a Publisher–Forgalmazó szakaszban hibák történnek, a hiba a Naplóolvasó ügynökkel kapcsolatos.
    • Ha a Terjesztő–Előfizető szakaszban hibák jelentkeznek, a probléma a terjesztési ügynökkel kapcsolatos.
  2. A hiba részleteinek azonosításához tekintse át az ügynök feladatelőzményeit a Feladattevékenység-figyelőben. Ha a feladatelőzmények nem mutatnak elég adatot, engedélyezheti az adott ügynök részletes naplózását .

  3. Próbálja meg meghatározni a hiba megoldását.

Hibák keresése a Pillanatkép-ügynökkel

A Pillanatkép-ügynök létrehozza a pillanatképet, és a megadott pillanatképmappába írja.

  1. A Pillanatkép-ügynök állapotának megtekintése:

    1. Az Object Explorerben bontsa ki a Helyi közzététel csomópontot a Replikáció területen.

    2. Kattintson a jobb gombbal a kiadványa AdvWorksProductTrans>Pillanatkép-ügynök állapotának megtekintése lehetőségére.

    A Pillanatképügynök állapotának megtekintése parancs képernyőképe a helyi menüben.

  2. Ha hiba jelenik meg a Pillanatkép-ügynök állapotában, további részleteket a Pillanatkép-ügynök feladatelőzményeiben talál:

    1. Bontsa ki az SQL Server-ügynököt az Object Explorerben, és nyissa meg a Feladattevékenység-figyelőt.

    2. Rendezze kategória szerint, és azonosítsa a pillanatkép-ügynököt a REPL-Snapshot kategóriában.

    3. Kattintson a jobb gombbal a Pillanatkép-ügynökre, majd válassza a Nézetelőzmények lehetőséget.

    Képernyőkép a Pillanatkép-ügynök előzményeinek megnyitására szolgáló kijelölésekről.

  3. A Pillanatkép-ügynök előzményei között válassza ki a megfelelő naplóbejegyzést. Ez általában egy vagy két sor a hibát jelző bejegyzés előtt . (A piros X hibát jelez.) Tekintse át az üzenet szövegét a naplók alatti mezőben:

    Képernyőkép a Pillanatkép-ügynök megtagadott hozzáféréssel kapcsolatos hibájáról.

    The replication agent had encountered an exception.
    Exception Message: Access to path '\\node1\repldata.....' is denied.
    

Ha a Windows-engedélyek nincsenek megfelelően konfigurálva a pillanatképmappához, a Pillanatkép-ügynök "Hozzáférés megtagadva" hibaüzenet jelenik meg. Ellenőriznie kell a pillanatképet tároló mappára vonatkozó engedélyeket, és győződjön meg arról, hogy a Pillanatkép-ügynök futtatásához használt fiók rendelkezik a megosztáshoz való hozzáféréshez szükséges engedélyekkel.

Hibák keresése a Naplóolvasó ügynökkel

A Naplóolvasó ügynök csatlakozik a közzétevő adatbázisához, és megvizsgálja a tranzakciónaplót a "replikációra" megjelölt tranzakciók esetében. Ezután hozzáadja ezeket a tranzakciókat a terjesztési adatbázishoz.

  1. Csatlakozzon a közzétevőhöz az SQL Server Management Studióban. Bontsa ki a kiszolgálócsomópontot, kattintson a jobb gombbal a Replikáció mappára , majd válassza a Replikációfigyelő indítása parancsot:

    Képernyőkép a helyi menü

    Megnyílik a Replikációfigyelő:

    A Replikációfigyelő képernyőképe.

  2. A piros X azt jelzi, hogy a kiadvány nem szinkronizálódik. Bontsa ki a saját közzétevőket a bal oldalon, majd bontsa ki a megfelelő közzétevő kiszolgálót.

  3. Válassza ki a bal oldalon az AdvWorksProductTrans kiadványt, majd keresse meg a piros X-et az egyik lapon a probléma helyének azonosításához. Ebben az esetben a piros X az Ügynökök lapon található, ezért az egyik ügynök hibát tapasztal:

    Képernyőkép a Red X-ről a Replikációfigyelő

  4. Válassza az Ügynökök lapot annak azonosításához, hogy melyik ügynökhöz tartozik a hiba:

    Képernyőkép a Red X-ről a replikációfigyelő sikertelen naplóolvasó ügynökén.

  5. Ez a nézet két ügynököt jelenít meg, a Pillanatkép-ügynököt és a Naplóolvasó ügynököt. Az, amelyik hibával találkozik, piros X-szel van ellátva. Ebben az esetben ez a Log Reader Agent.

    Kattintson duplán arra a sorra, amelyben a hiba jelentése van, hogy megnyissa a Naplóolvasó Ügynök előzményeit. Ez az előzmények további információt nyújtanak a hibáról:

    Képernyőkép a Naplóolvasó ügynök hibaadatairól.

    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'.'.
    
  6. A hiba általában akkor fordul elő, ha a közzétevő adatbázis tulajdonosa nincs megfelelően beállítva. Ez az adatbázis visszaállításakor fordulhat elő. Ellenőrzés:

    1. Nyissa ki az Adatbázisok elemet az Objektum-kutatóban.

    2. Kattintson a jobb gombbal az AdventureWorks2025>tulajdonságai elemre.

    3. Ellenőrizze, hogy létezik-e tulajdonos a Fájlok lapon. Ha ez a mező üres, ez a probléma valószínű oka.

    Képernyőkép az adatbázis tulajdonságainak Fájlok lapjáról egy üres

  7. Ha a tulajdonos üres a Fájlok lapon, nyisson meg egy Új lekérdezés ablakot az AdventureWorks2025 adatbázis környezetében. Futtassa a következő T-SQL-kódot:

    -- 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'
    
  8. Előfordulhat, hogy újra kell indítania a Naplóolvasó ügynököt:

    1. Bontsa ki az SQL Server-ügynök csomópontot az Object Explorerben, és nyissa meg a Feladattevékenység-figyelőt.

    2. Rendezés kategória szerint, és a Naplóolvasó ügynök azonosítása a REPL-LogReader kategória szerint.

    3. Kattintson a jobb egérgombbal a Naplóolvasó ügynök munkára, és válassza a Feladat indítása lépésként lehetőséget.

    A Naplóolvasó-ügynök újraindításához kijelölt elemek képernyőképe.

  9. Ellenőrizze, hogy a kiadvány szinkronizálva van-e a Replikációfigyelő ismételt megnyitásával. Ha még nincs megnyitva, megtalálhatja a Replikációt az Object Explorerben a jobb gombbal kattintva.

  10. Válassza ki az AdvWorksProductTrans kiadványt, válassza az Ügynökök lapot, majd kattintson duplán a Naplóolvasó ügynökre az ügynök előzményeinek megnyitásához. Most már látnia kell, hogy a Naplóolvasó ügynök fut, és vagy parancsokat replikál, vagy "nincs replikált tranzakció":

    Képernyőkép a replikált tranzakciók nélkül futó Naplóolvasó ügynökről.

Hibák keresése a terjesztési ügynökkel

A terjesztési ügynök megkeresi az adatokat a terjesztési adatbázisban, majd alkalmazza azokat az előfizetőre.

  1. Csatlakozzon a közzétevőhöz az SQL Server Management Studióban. Bontsa ki a kiszolgálócsomópontot, kattintson a jobb gombbal a Replikáció mappára , majd válassza a Replikációfigyelő indítása parancsot.

  2. A Replikációfigyelőben válassza az AdvWorksProductTrans kiadványt, majd a Minden előfizetés lapot. Kattintson a jobb gombbal az előfizetésre, és válassza a Részletek megtekintése lehetőséget:

    Képernyőkép a helyi menü

  3. Megnyílik a Terjesztő előfizetői előzményekhez párbeszédpanel, amely tisztázza, hogy az ügynök milyen hibába ütközik.

    Képernyőkép a terjesztési ügynök hibaadatairól.

    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.
    
  4. A hiba azt jelzi, hogy a terjesztési ügynök újra próbálkozik. További információkért tekintse meg a terjesztési ügynök feladatelőzményeit:

    1. Bontsa ki az SQL Server-ügynököt az Object Explorer >feladattevékenység-figyelőjében.

    2. A feladatok rendezése kategória szerint.

    3. Azonosítsa a terjesztési ügynököt a REPL-Distribution kategória alapján. Kattintson a jobb gombbal az ügynökre, és válassza a Nézetelőzmények lehetőséget.

    Képernyőkép a terjesztési ügynök előzményeinek megtekintésére szolgáló kijelölésekről.

  5. Válasszon ki egy hibabejegyzést, és tekintse meg a hibaszöveget az ablak alján:

    Képernyőkép a terjesztési ügynök helytelen jelszavát jelző hibaüzenet szövegéről.

    Message:
    Unable to start execution of step 2 (reason: Error authenticating proxy NODE1\repl_distribution, system error: The user name or password is incorrect.)
    
  6. Ez a hiba azt jelzi, hogy a terjesztési ügynök által használt jelszó helytelen. A probléma megoldása:

    1. Bontsa ki a replikációs csomópontot az Object Explorerben.

    2. Kattintson a jobb gombbal az előfizetés >tulajdonságaira.

    3. Válassza ki a ügynökfolyamat-fiók melletti kivonatjelet (...), és módosítsa a jelszót.

    Képernyőkép a terjesztési ügynök jelszavának módosítására szolgáló kijelölésekről.

  7. Ellenőrizze újra a Replikációfigyelőt, ha a jobb gombbal a Replikáció elemre kattint az Object Explorerben. A Minden előfizetés alatt lévő piros X azt jelzi, hogy a terjesztési ügynök továbbra is hibát tapasztal.

    Nyissa meg a Terjesztési előzményeket, ha a jobb gombbal az előfizetésre kattint a Replikációfigyelő>nézet részletei között. Itt a hiba most már más:

    Képernyőkép arról a hibáról, amely azt jelzi, hogy a terjesztési ügynök nem tud csatlakozni.

    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'.
    
  8. Ez a hiba azt jelzi, hogy a terjesztési ügynök nem tudott csatlakozni az előfizetőhöz, mert a NODE2 felhasználói\repl_distribution nem sikerült a bejelentkezés. A további vizsgálathoz csatlakozzon az előfizetőhöz, és nyissa meg az aktuális SQL Server hibanaplót az Object Explorer Felügyeleti csomópontja alatt:

    Képernyőkép az előfizető bejelentkezési hibáját jelző hibáról.

    Ha ezt a hibát látja, a bejelentkezés hiányzik az előfizetőn. A hiba elhárításához tekintse meg a replikáció biztonsági szerepköreinek követelményeit.

  9. A bejelentkezési hiba megoldása után ellenőrizze újra a Replikációfigyelőt. Ha az összes problémát megoldották, a Kiadvány neve mellett egy zöld nyíl jelenik meg, és az Összes előfizetés alatt a Futó állapot látható.

    A sikeres működés ellenőrzéséhez kattintson a jobb gombbal az előfizetésre, hogy újra megnyissa a Distributor To Subscriber előzményeket. Ha először futtatja a Terjesztési Ügynököt, látni fogja, hogy a pillanatképet tömegesen átmásolták az előfizető rendszerére.

    Képernyőkép a terjesztési ügynökről a

Hibák keresése a Merge Agent segítségével

Az egyesítési ügynök sok időt vehet igénybe a módosítások replikálásához. Annak megállapításához, hogy az egyesítési replikáció szinkronizálási folyamatának melyik lépése a legtöbb időt vesz igénybe, használja a 101-es nyomkövetési jelzőt és az egyesítési ügynök naplózását. Ehhez használja a következő paramétereket az egyesítési ügynök paramétereihez, majd indítsa újra az ügynököt:

-T 101
-output
-outputverboselevel

Megjegyzés:

Ha statisztikákat kell írnia a <distribution-server>..msmerge_history táblába, használja a 102-es nyomkövetési zászlót.

Az egyesítési ügynök mintakimenete az egyesítési replikáció szinkronizálásának befejezése után a következő:

**************************************************************
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
**************************************************************

Részletes naplózás engedélyezése bármelyik ügynöknél

Részletes naplózással részletesebb információkat kaphat a replikációs topológia bármely ügynökével kapcsolatos hibákról. A lépések minden ügynök esetében megegyeznek. Csak győződjön meg arról, hogy a feladattevékenység-figyelőben a megfelelő ügynököt választja ki.

Megjegyzés:

Az ügynökök lehetnek a közzétevő vagy az előfizető oldalán, attól függően, hogy lekéréses vagy leküldéses előfizetésről van-e szó. Ha az ügynök nem érhető el a vizsgált kiszolgálón, ellenőrizze a másik kiszolgálót.

  1. Döntse el, hogy hová szeretné menteni a részletes naplózást, és győződjön meg arról, hogy a mappa létezik. Ez a példa a c:\temp függvényt használja.

  2. Bontsa ki az SQL Server-ügynök csomópontot az Object Explorerben, és nyissa meg a Feladattevékenység-figyelőt.

    Képernyőkép a Feladattevékenység megtekintése parancsról a Feladattevékenység-figyelő helyi menüjében.

  3. Rendezés kategória szerint, és a fontos ügynök azonosítása. Ez a példa a Naplóolvasó ügynököt használja. Kattintson a jobb gombbal a kívánt ügynökre, majd >.

    Képernyőkép az ügynök tulajdonságainak megnyitásához szükséges kiválasztásokról.

  4. Válassza a Lépések lapot, majd jelölje ki az Ügynök futtatása lépést. Válassza a Szerkesztés lehetőséget.

    Képernyőkép arról, hogyan lehet szerkeszteni az 'Ügynök futtatása' lépés kijelöléseit.

  5. A Parancsmezőben kezdjen el egy új sort, írja be a következő szöveget, és válassza az OK gombot:

    -Output C:\Temp\OUTPUTFILE.txt -Outputverboselevel 3
    

    A hely és a részletességi szint a beállításoknak megfelelően módosítható.

    Képernyőkép a feladatlépés tulajdonságainak Verbose kimenetéről.

    Ha részletes kimeneti paramétert ad hozzá, az alábbi problémák miatt az ügynök meghibásodhat, vagy hiányzik a fájlkimeneti fájl:

    • Van egy formázási probléma, amely miatt a kötőjel kötőjel lett.

    • A hely nem létezik a lemezen, vagy az ügynököt futtató fiók nem rendelkezik engedéllyel a megadott helyre való íráshoz.

    • Hiányzik egy szóköz az utolsó paraméter és a -Output paraméter között.

    • Az ügynökök különböző szintű bőbeszédűséget támogatnak. Ha engedélyezi a részletes naplózást, de az ügynök nem indul el, próbálja meg 1-rel csökkenteni a megadott részletességi szintet.

  6. Indítsa újra a Naplóolvasó ügynököt, kattintson jobb gombbal az ügynök >'Feladat leállítása lépésnél' opciójára. Frissítés az eszköztár Frissítés ikonjának kiválasztásával. Kattintson a jobb gombbal az ügynök >feladatának indítására az adott lépésnél.

  7. Tekintse át a lemez kimenetét.

    Képernyőkép a Kimeneti szövegfájlról.

  8. A részletes naplózás letiltásához kövesse az előző lépéseket a korábban hozzáadott teljes -Output sor eltávolításához.

Segítség kérése

Közreműködés az SQL dokumentációjában

Tudta, hogy saját maga szerkesztheti az SQL-tartalmakat? Ha így tesz, nem csak a dokumentáció fejlesztésében segít, hanem az oldal közreműködőjeként is jóváírást kap.

További információ: Microsoft Learn-dokumentáció szerkesztése.