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_desc
in 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