SQL Server - ログファイルの保存場所を変更する方法
ログファイルの保存場所を変更したい
SQL Server のトランザクションログファイル等のサイズが大きくなってディスク領域を圧迫し、保存場所を後から変更したいような時はないでしょうか。
この記事では、既存のデータベースのトランザクションログファイル(ldf ファイル)を他の場所に移す方法をご紹介します。
トランザクションログファイルの保存場所を変更する方法
今回は Test データベースのログファイルの場所を、違うドライブのフォルダーに変更します。
1. まずは次のクエリーを実行して、ターゲットとなるデータベースの、ログファイルの論理名と現在の保存場所を確認します。
SELECT name, physical_name, type_desc FROM sys.master_files WHERE database_id = DB_ID(N'Test');
Test データベースのログファイルの論理名(logical_name) は Test_log ですね。
2. 次に以下のクエリーで Test データベースをオフラインにします。
ALTER DATABASE Test SET OFFLINE;
* クエリーの実行に時間がかかって終わらない場合は、利用状況モニターなどで、そのデータベースに対してアクティブなプロセスを確認して強制終了させてください。
3. ログファイルを新しい保存先に移動します。
- 移動元: C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER2017\MSSQL\DATA\
- 移動先: D:\MSSQL\DATA\
4. 次のスクリプトを実行して、Test データベースのログファイルの保存場所を更新します。
NAME には No.1 で調べたログファイルの論理名を、FILENAME にはログファイルの移動先のパスとログファイル名を指定してください。
ALTER DATABASE Test MODIFY FILE (NAME = Test_log, FILENAME = 'D:\MSSQL\DATA\Test_log.ldf');
4. 次に以下のクエリーで Test データベースをオンラインに戻します。
ALTER DATABASE Test SET ONLINE;
このスクリプトを実行した時に次のようなエラーが出ることがあるかもしれません。
Msg 5120, Level 16, State 101, Line 1
物理ファイル "D:\MSSQL\DATA\Test_log.ldf" を開けません。
オペレーティング システム エラー 5: "5(Access is denied.)"。
ファイル アクティブ化エラー。物理ファイル名 "D:\MSSQL\DATA\Test_log.ldf" が正しくない可能性があります。
Msg 5181, Level 16, State 5, Line 1
データベース "Test" を再起動できませんでした。以前の状態に戻しています。
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE ステートメントが失敗しました。
これは、SQL Server のサービスアカウントがログファイルにアクセスする権限がない為です。
SQL Server のサービスアカウントを SQL Server 構成マネージャー等で確認して、アクセス権限を追加してください。
これで、ログファイルの保存場所を変更完了です。
試しに No.1 のクエリーをもう一度実行してみると、保存場所が変更されていますね!