SQL Server 2008r2データベースを継承しました。データファイルは1,000 MBの初期サイズで作成されましたが、トランザクションログの初期サイズは28,016 MBです。バックアップは実行されていません。
私はリカバリのニーズに合わせて完全バックアップとトランザクションバックアップを実装しました。その結果、トランザクションファイルは常に99.9%まで空になり、使用される30または40 MBを超えることはありません。ログをより適切なサイズ(200 mb程度)に縮小できるように、初期サイズを小さくしたいと思います。
200 MBの初期サイズでログファイルを再定義する方法を誰かが知っていますか?
200 MBの初期サイズでログファイルを再定義する方法を誰かが知っていますか?
ALTER DATABASE [YOUR_DB_NAME] ... MODIFY FILE ... SIZE
を使用する必要があります
ALTER DATABASE [your_db_name]
SET RECOVERY SIMPLE;
CHECKPOINT;
-- shrink the log file to 200MB
DBCC SHRINKFILE (your_db_name_log,200);
--- define the initial size to 200MB as well.. CHANGE it as per your needs!
ALTER DATABASE [your_db_name]
MODIFY FILE (NAME=your_db_name_LOGICAL_log,SIZE=200MB,MAXSIZE=UNLIMITED,FILEGROWTH=100MB);
--Optional if you want the database in full recovery mode
--for point in time recovery going forward
ALTER DATABASE [your_db_name]
SET RECOVERY FULL;
--- Take full backup to establish log chain
-- take log backups to help truncate the log file and keep it manageable
提案:
まず最初に注意してください 初期サイズ は実際には意味していません。はい、できますが、SSMS GUIを使用しないようにしてください。
ALTER DATABASE [db_name]
SET RECOVERY SIMPLE;
sp_helpdb db_name --get logical log file name
CHECKPOINT;
DBCC SHRINKFILE (db_name_log,0);
ALTER DATABASE [db_name]
MODIFY FILE (name=db_name_log,SIZE=240MB,MAXSIZE=UNLIMITED,FILEGROWTH=500MB);--dummy values change accordingly
ALTER DATABASE [db_name]
SET RECOVERY FULL;
この記事 を読み、与えられたクエリを使用して、自動拡張サイズの適切な値を計算できます。適切な初期サイズはスペースを事前に割り当て、あまり良いイベントではない頻繁な自動拡張を回避します
ブレント、
あなたのアプローチは、データベースがどの回復モードにあるかに依存します。
これは、SQL Serverのバージョンの MSDN DBCC SHRINKFILE リファレンスです。
シンプルリカバリモードのデータベースの場合は、
DBCC SHRINKFILE (N'<logical_file_name_of_the_log>'<Size In MB>)
必要なのはこれだけです。初期サイズは、ファイルを縮小したサイズにリセットされるはずです。
完全復旧モードのデータベースの場合、バックアップとしてマークされていないトランザクションがある場合、縮小コマンドはファイルを縮小しないため、2つのオプションがあります。
1つ目は、トランザクションログのバックアップを行うことです。これにより、バックアップされたすべてのアイテムが再利用可能としてマークされます。その後、shrinkコマンドを実行できます。
2つ目は、リカバリモードをSIMPLEに変更してから、shrinkコマンドを実行し、完了したら、リカバリモードをFULLに戻します。 (このアプローチでは、最新の完全バックアップと差分のみにリカバリできます)。これを行う方法の詳細は、提供されているMSDNリンクで確認できます。
どちらのオプションも、ファイルの初期サイズを、縮小したサイズにリセットします。
ログファイルが縮小したら、定期的にトランザクションログのバックアップをセットアップして、ログファイルが再び大きくならないようにする必要があります。
すべてのリカバリモードとトランザクションログの圧縮オプションでは、データベースのユーザーがファイルの圧縮中にエラーが発生する可能性があります。 SQL Serverは、要求の処理が多すぎる場合にもコマンドを失敗させる可能性があります。可能な場合は、いくつかのダウンタイムをスケジュールし、コマンドを使用してデータベースをシングルユーザーモードにします
use <database>
Go
alter database <database> set single_user with rollback immediate
Go
DBCC SHRINKFILE (N'<logical_file_name_of_the_log>'<Size In MB>)
Go
alter database <database> set multi_user with rollback immediate
Go
これにより、他のステートメントでブロックされずに縮小できます。