Spiegelprotokoll auf der Primärseite leer, auf dem Spiegel jedoch in Ordnung

8

Wir haben Dutzende von Hauptservern und entsprechenden Spiegeln, die meisten funktionieren einwandfrei, aber einer von ihnen verhält sich seltsam. Insbesondere gibt der sp_dbmmonitorresultsProzess alle Spalten für eine bestimmte Prinzipdatenbank als NULL zurück, während sp_dbmmonitorresultsauf dem Spiegel gültige Informationen zurückgegeben werden:

Verlauf auf dem Principle Server

Verlauf auf dem Spiegelserver

Jetzt habe ich eine ungefähre Vorstellung davon, was die Ursache war; Wenn die Prinzipal- und Spiegelserver eingerichtet wurden, waren die regionalen Einstellungen auf der Primärseite falsch (die Zeit war korrekt, es wurde jedoch eine + 4-Region verwendet (Amerika usw.)), und die Zeitregion wurde nach der Einrichtung der Spiegelung (Schule) auf GMT +0 korrigiert Junge Fehler, den ich kenne, aber c'est la vie!)

Bearbeiten: 19.12.2012

Heute habe ich die Spiegelung entfernt, die Kopien auf dem Spiegel gelöscht und die Spiegelung neu eingerichtet, dies hat das Problem jedoch nicht gelöst! Ich werde ein Kopfgeld auf diese Frage werfen, um zu versuchen, dem auf den Grund zu gehen.

Um zu bestätigen, wenn ich EXEC sp_dbmmonitorresults @database_name = 'ProScript'manuell auf jedem Server ausgeführt werde, wird für die meisten Werte auf dem primären Server NULL zurückgegeben, auf dem Spiegel jedoch einwandfrei, wie gezeigt:

Wenn auf der Grundschule lief:

Geben Sie hier die Bildbeschreibung ein Zoom: Klicken Sie hier, um die Vollversion zu erhalten

Als ich auf den Spiegel lief:

Geben Sie hier die Bildbeschreibung ein Zoom: Klicken Sie hier, um die Vollversion zu erhalten

Wie Sie sehen können, sind die Zeiten aktuell und die Datenbank ist synchronisiert, aber die log_generation_rate, unsent_log, send_rate usw. sind alle NULL auf der primären?

Auf beiden Servern wird der Montior-Job jede Minute exec sys.sp_dbmmonitorupdateals Jobschritt usw. ausgeführt.

Wenn man sich die Quelle von sys.sp_dbmmonitorupdate ansieht, werden diese Werte abgerufen sys.dm_os_performance_counters- wenn ich also Folgendes auf dem Spiegel ausführe:

SELECT  counter_name ,
        cntr_value
FROM    sys.dm_os_performance_counters
WHERE   instance_name = 'ProScript'
        AND counter_name IN ( N'Log Send Queue KB', N'Log Bytes Sent/sec', N'Redo Queue KB', N'Redo Bytes/sec', N'Transaction Delay', N'Log Bytes Flushed/sec', N'Transactions/sec' )

Ich bekomme gute Ergebnisse:

Geben Sie hier die Bildbeschreibung ein

Wenn ich jedoch dasselbe SQL auf der Primärseite ausführe, gibt es keine Zeilen!

Dies würde darauf sys.dm_os_performance_countershinweisen, dass die Tabelle nicht für die Spiegelung gefüllt wird? Was würde das verursachen ???

HeavenCore
quelle

Antworten:

5

Nun, es hat Monate gedauert, aber ich habe endlich das Problem gefunden!

Die sys.dm_os_performance_counters wurden auf dem Primärserver überhaupt nicht ausgefüllt.

Es stellte sich heraus, dass die Zähler nicht installiert waren. Ich konnte dies manuell wie folgt tun:

C:\Windows\system32>lodctr "D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSS
QLSERVER\MSSQL\Binn\perf-MSSQLSERVERsqlctr.ini"

Neustart von SQL und Boom, die Tabelle wird jetzt gefüllt - einschließlich meiner Spiegelungsstatistiken.

HeavenCore
quelle
Es muss Spaß gemacht haben, das aufzuspüren.
Zane
0

Haben Sie versucht, den Überwachungsjob für die Datenbankspiegelung auf der Hauptinstanz zu entfernen und neu zu erstellen?

Dies beinhaltet nicht das erneute Initialisieren der Datenbankspiegelungssitzung, sondern nur das Löschen und Neuerstellen des Jobs unter Verwendung derselben gespeicherten Prozeduren, die von SSMS zum Verwalten des Datenbankspiegelungsmonitors verwendet werden.

Hier sind die Links zu den Books Online-Einträgen:

Und ein kurzes Beispielskript:

    -- you'll need to be connected to the instance as a member
    -- of the sysadmin fixed server role, of course.

    -- delete the database mirroring monitoring job

    exec msdb.dbo.sp_dbmmonitordropmonitoring;
    go

    -- rebuild the database mirroring monitoring job
    -- the procedure accepts an optional parameter
    -- specifying the number of minutes between updates.
    -- the default is 1 minute.

    exec msdb.dbo.sp_dbmmonitoraddmonitoring;
    go
kozloski
quelle
Hallo Koz, das war eines der ersten Dinge, die ich ausprobiert habe. Ich fürchte, ich habe es jetzt noch einmal versucht, keine Änderung. Ich beiße einfach in die Kugel und entferne die Spiegelung und füge sie wieder hinzu.
HeavenCore