Frage

Daten von einem anderen System in eine SQL Server 2005-Datenbank in Echtzeit repliziert wird (während des Tages, ist es Hunderte von Transaktionen / Sekunde) mit Goldengate. Ich möchte in der Lage sein zu sagen, ob es vor kurzem eine Transaktion gewesen, die mir sagen, wenn die Replikation zur Zeit geschieht. Selbst in den off-Stunden, kann ich eine Transaktion alle paar Minuten erwarten, obwohl ich nicht, welche der 400 Tabellen wissen, wird sie in gehen.

Hier ist mein aktueller Prozess:

  1. IUP-Trigger auf beliebtesten replizierten Tabelle
  2. Updates Datum in „Sync-Benachrichtigung“ Tabelle jedes Mal, wenn es eine Aktivität auf der Tabelle
  3. SQL-Agent-Auftrag ausgeführt wird alle paar Minuten und vergleicht dieses Datum mit GETDATE (). Wenn es schon zu lange, es E-Mails mich.

Das funktioniert in den meisten Fällen, aber ich bekomme Fehlalarme, wenn es in anderen Tabellen-Aktivität ist, aber nicht die, die überwacht, die über Nacht geschehen kann.

Alle anderen Vorschläge kurz Hinzufügen dieser gleichen Trigger für jede Tabelle in der Datenbank? Wenn ich die Trigger fügen, wie ich verhindern Deadlocks und Streit über die „Sync Meldung“ Tabelle? Da ich kümmern sich nicht um das letzte Datum hoher Konkurrenzperioden während genau zu sein, ist es eine Möglichkeit, SQL versuchen müssen, können das Datum zu aktualisieren, aber es einfach überspringen, wenn ein anderer Prozess es gesperrt hat?

Die einzige „Anwendungsebene“ Wahl, die ich habe, ist auf den Goldengate-Monitor telnet und für die Replikat Verzögerung fragen, Bildschirm dann die Ergebnisse kratzen. Ich bin offen für das, aber ich möchte etwas SQL-Seite tun, wenn es machbar ist.

War es hilfreich?

Lösung

Ist das für einen automatisierten Job oder etwas, das Sie immer mal aussehen sollen und dann? Wenn letzteres, dann könnten Sie ein Transaktionsprotokoll Prüfung Werkzeug (Redgate Log Rescue, Apex SQLLog, wahrscheinlich noch andere) verwendet werden.

Eine weitere Möglichkeit für Sie ist auf sysindexes aussehen (SQL Server 2000: dbo.sysindex; 2005: sys.sysindexes). Die Spalte rowmodctr (Zitat MSDN) „Zählt die Gesamtzahl der eingefügten, gelöschten oder aktualisierten Zeilen seit dem letzten Mal Statistiken für die Tabelle aktualisiert wurden“ . Es kann nicht alles zurückgeben müssen Sie wissen aber, vorausgesetzt, Sie haben Indizes bekam abdeckt, würde es einen Hinweis darauf geben, wie viele und wo die Änderungen dort gewesen, wenn in regelmäßigen Abständen abgetastet.

Andere Tipps

Sie können SELECT * FROM ::fn_dblog(@startLSN, NULL) prüfen und sehen, ob LOP_MODIFY_ROW Betrieb seit der letzten Prüfung (seit dem letzten LSN Sie überprüft) aufgetreten ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top