これは、プリンシパルデータベースのログファイルを圧縮できなかった理由についての 前の質問 に対するフォローアップの質問です。
簡単に言うと、データベースミラーリングをセットアップしましたが、トランザクションログをバックアップしたジョブが再び実行されていることを忘れて、トランザクションログがほぼ60GBに増えました。
ミラーリングがセットアップされたため、このサイズの増加はミラーリングされたサーバーに複製され、最終的にすべてのディスク領域を占有し、ミラーデータベースを使用できなくなりました。
この質問 ミラーデータベースのトランザクションログのメンテナンスについて、ミラーのログをバックアップすることはできませんが、具体的に コメント で大きくなりすぎた場合の縮小方法について質問された場合ミラーデータベース上のログファイル、 コメント
これを行う1つの方法は、ミラー化されたデータベースにフェールオーバーし、そこで縮小することです。これを非本番環境で徹底的にテストして、期待どおりの動作が期待できることを確認してください。
これは、ミラー上のログファイルを圧縮する他の方法が存在する可能性があることを示唆しているようであり、この方法は必ずしも運用サーバーで安全に実行できるとは限りません。
データベースミラー上のトランザクションログファイルを安全に縮小する方法はありますか?
DBCC SHRINKFILE
コマンドは、プリンシパルからミラーリングされたデータベースにミラーリングされます。ここにいくつかの証拠があります。
プリンシパルにサンプルデータベースを作成します。
create database MirroredDb;
go
NORECOVERY
を使用して、バックアップから同じデータベースを作成します。
restore database MirroredDb
from disk = '\\backupdir\MirroredDb.bak'
with norecovery;
go
どちらの方法を選択しても、ミラーリングセッションをセットアップします。
プリンシパルデータベースで、データベースファイルのサイズを確認します。
use MirroredDb;
go
select
name,
size
from sys.database_files;
結果セットは次のようになります。
name size
MirroredDb 392
MirroredDb_log 104
ミラーデータベースでスナップショットを作成し、同じ情報を確認します。
create database MirroredDbss
on
(
name = 'MirroredDb',
filename = 'c:\sqlserver\MirroedDb.ss'
)as snapshot of MirroredDb;
use MirroredDbss;
go
select
name,
size
from sys.database_files;
結果セットは次のようになります。
name size
MirroredDb 392
MirroredDb_log 104
次に、トランザクションログファイルをプリンシパルデータベースで拡張します(1 GBにしました)。
alter database MirroredDb
modify file
(
name = MirroredDb_log,
size = 1GB
);
go
プリンシパルデータベースのトランザクションログのサイズを見ると、調整されたサイズがわかります。
use MirroredDb;
go
select
name,
size
from sys.database_files;
結果セットは次のようになります。
name size
MirroredDb 392
MirroredDb_log 131072
ミラーリングされたデータベースに別のスナップショットを作成し、そこでトランザクションログファイルのサイズを確認します。
create database MirroredDbss2
on
(
name = 'MirroredDb',
filename = 'c:\sqlserver\MirroedDb2.ss'
)as snapshot of MirroredDb;
use MirroredDbss2;
go
select
name,
size
from sys.database_files;
結果セットは次のようになります。
name size
MirroredDb 392
MirroredDb_log 131072
DBCC SHRINKFILE
プリンシパル:
use MirroredDb;
go
dbcc shrinkfile('MirroredDb_log', 0);
go
select
name,
size
from sys.database_files;
私の結果セットは次のとおりです:
name size
MirroredDb 392
MirroredDb_log 104
ミラーリングされたデータベースに3番目の最後のスナップショットを作成し、サイズを確認します。
create database MirroredDbss3
on
(
name = 'MirroredDb',
filename = 'c:\sqlserver\MirroedDb3.ss'
)as snapshot of MirroredDb;
use MirroredDbss3;
go
select
name,
size
from sys.database_files;
そして、私は次の結果セットを取得します:
name size
MirroredDb 392
MirroredDb_log 104
ご覧のとおり、DBCC SHRINKFILE
コマンドは、実際にはミラーデータベースにミラーリングされています。