週末にデータベースミラーリングをセットアップしましたが、トランザクションログをバックアップするジョブを再度有効にするのを忘れていました。私が今朝来たとき、トランザクションログは58GBに膨れ上がっており、ドライブ容量のほとんどを占めていました。
トランザクションログをディスクに手動でバックアップしてデータベースを再度実行しましたが、DBCC SHRINKFILEを実行してもトランザクションログファイルの物理的なサイズが小さくならないようです。
DBCC SHRINKFILE (N'MyDatabaseName_Log', 1000)
を使用してログの使用状況を確認した場合
DBCC SQLPERF(LOGSPACE)
現在のログの22%だけが使用されていることがわかります
データベース名ログサイズ(MB)ログ領域使用率(%)ステータス MyDatabaseName 55440.87 22.38189 0
チェックアウトした場合log_reuse_wait_desc
sys.databsesで、私が見る唯一のレコードはDATABASE_MIRRORING
、つまり、ログファイルの物理サイズが縮小されない理由にミラーが影響していると思いますか?
SELECT log_reuse_wait_desc
FROM sys.databases
WHERE name = N'MyDatabaseName';
また、プリンシパルデータベースミラーリングの状態がSuspendedであることにも気付きました。再開することは、次のエラーですぐに失敗します。
データベース 'MyDatabaseName'のリモートミラーリングパートナーでエラー5149、ステータス1、重大度25が発生しました。データベースミラーリングが一時停止されました。リモートサーバーのエラーを解決してミラーリングを再開するか、ミラーリングを削除してミラーサーバーインスタンスを再確立します。
ミラーサーバーのエラーログにはこのエラーも含まれますが、ログファイルドライブがいっぱいであるというエラーも含まれます。
物理ファイルを拡張しようとしたときに、MODIFY FILEでオペレーティングシステムエラー112(ディスクに十分なスペースがありません。)が発生しました。
そして
F:\ Databaselogs\MyDatabaseName_1.ldf:オペレーティングシステムエラー112(ディスクに十分なスペースがありません。)が発生しました。
プリンシパルサーバーのログファイルドライブには60 GBがあり(他のデータベースはここでホストされています)、ミラーサーバーには45 GBしかありません。
ログファイルをバックアップすると、データベースが再び使用可能になりますが、ディスク上の物理ログファイルのサイズを減らし、ミラーリングを再開したいと考えています。
ミラーリングやバックアップチェーンを犠牲にすることなく、物理トランザクションログファイルのサイズを縮小するにはどうすればよいですか?
SQL Server 2005を実行しています
私が言えることからは、私にはわかりません。
ログファイルの多くはミラーサーバーへのミラーリングを待機していると思いますが、ミラーリングされたトランザクションログもディスク上のすべてのスペースを占めるようになり、ミラーがダウンして再開できなくなります。
この理論は、ミラーリングを削除すると、DBCC SHRINKFILE
コマンドが物理ログファイルを正しく圧縮し、log_reuse_wait_desc
がLOG_BACKUP
の待機に戻るという事実によってさらに裏付けられます。
ミラーサーバーのログファイルを縮小することはできません これはミラーとして機能していて開くことができないため、ミラーを回復できないと思います。
そこで、ミラーを完全に削除し、すべてを再設定します(300GBデータベースでは非常に遅いプロセス)。今回は、ミラーを起動する前にトランザクションログのサイズがかなり小さいことを確認し、ミラーがバックアップされて実行されると、トランザクションログのバックアップが実行されることを確認します。
また、本番サーバーでトランザクションログが大きくなる可能性のあるサイズに制限を設定するので、ミラーがトランザクションログをディスクで利用可能なサイズを超えて大きくすることはありません。
今日、DBで同じ問題に遭遇しました。DBは、何らかの理由で過去3か月間トランザクションログのバックアップを停止し、ログはすべて200GBに増加しました。
状況とまったく同じエラーコードとミラーリングは再開されません。ミラーでログドライブが完全にいっぱいになりました。
幸いにも、ログドライブ上の古いログをいくつか削除することで、領域を解放することができました。その後、ミラーリングを再開することができました。
次に、メンテナンスプランのバックアップに入り、データベースとトランザクションログのバックアップを手動でトリガーしました。バックアップ後でも、トランザクションログファイルは依然として巨大でした。そのため、SQL Studioに繰り返しログファイルを圧縮するように指示し(未使用の領域を解放する)、数時間かけて数回試行した後、ログを管理しやすいサイズに削減しました。
お役に立てれば。