Wie verkleinere ich die physische Transaktionsprotokolldatei, wenn es sich um den Principal in einem Spiegel handelt?


8

Wir haben die Datenbankspiegelung über das Wochenende eingerichtet und vergessen, den Job, der die Transaktionsprotokolle sichert, wieder zu aktivieren. Als ich heute Morgen ankam, war das Transaktionsprotokoll auf 58 GB angewachsen und nahm den größten Teil des Laufwerksplatzes ein.

Ich habe eine manuelle Sicherung des Transaktionsprotokolls auf der Festplatte durchgeführt, um die Datenbank wieder zum Laufen zu bringen. Die Ausführung von DBCC SHRINKFILE scheint jedoch die physische Größe der Transaktionsprotokolldatei nicht zu verringern.

DBCC SHRINKFILE (N'MyDatabaseName_Log', 1000)

Wenn ich die Protokollnutzung mit überprüfe

DBCC SQLPERF(LOGSPACE)

Ich kann sehen, dass nur 22% des aktuellen Protokolls verwendet werden

Datenbankname Protokollgröße (MB) Verwendeter Protokollspeicherplatz (%) Status
MyDatabaseName 55440.87 22.38189 0

Wenn ich log_reuse_wait_descin sys.databses auschecke, sehe ich nur einen Datensatz. Ich vermute also DATABASE_MIRRORING, dass der Spiegel eine Rolle spielt, warum die physische Größe der Protokolldatei nicht kleiner wird.

SELECT log_reuse_wait_desc
FROM sys.databases
WHERE name = N'MyDatabaseName';

Ich habe auch festgestellt, dass mein Hauptdatenbank-Spiegelungsstatus angehalten ist und der Versuch, ihn fortzusetzen, sofort mit dem folgenden Fehler fehlschlägt:

Der Remote-Spiegelungspartner für die Datenbank 'MyDatabaseName' hat den Fehler 5149, Status 1, Schweregrad 25 festgestellt. Die Datenbankspiegelung wurde angehalten. Beheben Sie den Fehler auf dem Remoteserver und setzen Sie die Spiegelung fort, oder entfernen Sie die Spiegelung und stellen Sie die Spiegelserverinstanz wieder her.

Die Fehlerprotokolle auf dem Spiegelserver enthalten diesen Fehler ebenfalls, aber auch Fehler, dass das Protokolldateilaufwerk voll ist

MODIFY FILE hat beim Versuch, die physische Datei zu erweitern, den Betriebssystemfehler 112 festgestellt (auf der Festplatte ist nicht genügend Speicherplatz vorhanden.).

und

F: \ Databaselogs \ MyDatabaseName_1.ldf: Betriebssystemfehler 112 (Auf der Festplatte ist nicht genügend Speicherplatz vorhanden.) Ist aufgetreten.

Der Hauptserver verfügt über 60 GB auf dem Protokolldateilaufwerk (hier werden andere Datenbanken gehostet), während der gespiegelte Server nur über 45 GB verfügt.

Durch das Sichern der Protokolldatei wurde die Datenbank wieder verwendbar. Ich möchte jedoch auch die Größe der physischen Protokolldatei auf der Festplatte verringern und die Spiegelung wieder aufnehmen.

Wie kann ich die Größe meiner physischen Transaktionsprotokolldatei verkleinern, ohne die Spiegelung oder die Sicherungskette zu beeinträchtigen?

Ich verwende SQL Server 2005


Was hat der sekundäre Server im SQL Server-Fehlerprotokoll? Es sollten einige Fehlerprotokollmeldungen angezeigt werden, die angeben, was passiert ist, um die Spiegelungssitzung anzuhalten.
Thomas Stringer

@ThomasStringer Ich wollte gerade meine eigene Antwort auf diese Frage posten ... Ich denke, meine Antwort ist, dass ich es nicht kann, zumindest nicht ohne den Spiegel zu deaktivieren und ihn wieder einzurichten. Der für Protokolldateien reservierte Speicherplatz auf dem gespiegelten Server ist geringer als der Speicherplatz auf dem Hauptserver (der Principal hostet andere Datenbanken), und ich kann die Größe des gespiegelten Transaktionsprotokolls nicht reduzieren. Ich habe meine Frage auch mit den Fehlermeldungen vom gespiegelten Server aktualisiert
Rachel

Antworten:


2

Nach allem, was ich sagen kann, kann ich nicht.

Ich glaube, ein Großteil der Protokolldatei wartet darauf, auf den Spiegelserver gespiegelt zu werden, aber der Spiegel ist inaktiv und kann nicht fortgesetzt werden, da das gespiegelte Transaktionsprotokoll ebenfalls so groß geworden ist, dass es den gesamten Speicherplatz auf der Festplatte einnimmt.

Diese Theorie wird weiter durch die Tatsache gestützt, dass der DBCC SHRINKFILEBefehl nach dem Entfernen der Spiegelung die physische Protokolldatei korrekt verkleinert und log_reuse_wait_descwieder darauf wartetLOG_BACKUP

Ich kann die Protokolldatei auf dem gespiegelten Server nicht verkleinern, da sie als Spiegel fungiert und nicht geöffnet werden kann. Daher denke ich, dass der Spiegel nicht wiederherstellbar ist.

Also werde ich den Spiegel komplett löschen und alles neu einrichten (sehr langsamer Prozess mit einer 300 GB Datenbank). Und dieses Mal werde ich sicherstellen, dass die Größe des Transaktionsprotokolls relativ klein ist, bevor der Spiegel gestartet wird, und dass die Transaktionsprotokollsicherungen ausgeführt werden, sobald der Spiegel wieder aktiv ist.

Ich werde auch ein Limit festlegen, wie groß das Transaktionsprotokoll auf dem Produktionsserver werden kann, damit der Spiegel niemals versucht, sein Transaktionsprotokoll über die auf der Festplatte verfügbare Größe hinaus zu vergrößern.


1
Eine andere Möglichkeit besteht darin, eine Diff-Sicherung zu erstellen und diese im Spiegel wiederherzustellen. Es funktioniert möglicherweise nicht, aber es ist einen Versuch wert, wenn Sie oder jemand anderes erneut darauf stößt.
Cfradenburg

@cfradenburg Ja, ich habe versucht, dies zu tun, aber es hat in meinem Fall nicht funktioniert, da meine Backups über das Wochenende zeitlich festgelegt wurden und der Speicherplatz auf dem Spiegel voll war. Es lohnt sich auf jeden Fall, es zu versuchen, bevor Sie sich entscheiden, den Spiegel vollständig zu löschen und von vorne zu beginnen.
Rachel

1

Wir sind heute auf dasselbe Problem mit unseren DBs gestoßen, die aus irgendeinem Grund die Sicherung der Transaktionsprotokolle in den letzten 3 Monaten eingestellt und die Protokolle auf 200 GB erhöht hatten.

Genau die gleichen Fehlercodes wie in Ihrer Situation und die Spiegelung werden nicht fortgesetzt. Das Protokolllaufwerk war auf dem Spiegel vollständig gefüllt.

Glücklicherweise konnte ich Speicherplatz freigeben, indem ich ein paar verirrte alte Protokolle auf dem Protokolllaufwerk löschte. Danach konnte die Spiegelung fortgesetzt werden.

Ging dann in den Wartungsplan Sicherungen und löste die Datenbank- und Transaktionsprotokollsicherungen manuell aus. Auch nach der Sicherung waren die Transaktionsprotokolldateien noch riesig. Daher musste ich SQL Studio wiederholt anweisen, die Protokolldateien zu verkleinern (nicht genutzten Speicherplatz freizugeben), und nach einigen Versuchen über ein paar Stunden wurden sie auf eine überschaubare Größe reduziert.

Hoffe das hilft.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.