ファイル管理は完全にオンラインで行うことができます。回復目的でログ情報を保持する必要性に応じて、2つのパスがあります。
ポイントインタイムリカバリは不要
- データベースを
SIMPLE
リカバリに変換します。チェックポイントを実行して、トランザクションをディスクに書き込みます。
- ログを平坦化します。
- ログのサイズを適切なサイズに変更します。
また、ログの管理を改善するために、固定の増加量と無制限の増加を設定することをお勧めします。固定の増加量はそれが依存する量であることに注意してください。ログがどれほどの増加を期待できるかに応じて、最初は1〜2 GBを使用することをお勧めします。理想的には、ログはあまり大きくならないので、これによる影響はそれほど大きくないはずです。ログが定期的に増加している場合は、サイズを再確認する必要がある場合があります。
使用して達成:
ALTER DATABASE [foo]
SET RECOVERY SIMPLE;
CHECKPOINT;
DBCC SHRINKFILE (foo_log,0);
ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);
--Optional if you want the database in full recovery mode
--for point in time recovery going forward
ALTER DATABASE [foo]
SET RECOVERY FULL;
ポイントインタイムリカバリが必要
最大の問題は、現在アクティブなVLFセグメントを超えてログファイルを圧縮できないことです。これを確認するにDBCC LOGINFO
は、データベースコンテキストで使用できます。Status = 2のセグメントはすべてアクティブです。アクティブなセグメントをクリアするには、そのセグメントで現在アクティブなトランザクションがないときにトランザクションログのバックアップを実行する必要があります。あなたのステップは:
- トランザクションログのバックアップを実行します。
- ファイルを縮小します。(理想的にはフラット化しますが、データベースがアクティブな場合、これは困難です)。
- ログが適切なサイズ、理想的には可能な限り小さくなるまで、手順1と2を繰り返します。
- ログのサイズを適切なサイズに変更します。
使用して達成:
BACKUP LOG [foo] TO DISK='<Location of t-log backup>';
DBCC SHRINKFILE (foo_log,0);
--Repeat the above until your log file is small "enough"
ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);
ここで何が起こっているのかを理解するための追加のリソース: