SQL Server - ログファイルの保存場所を変更する方法

ログファイルの保存場所を変更したい

SQL Server のトランザクションログファイル等のサイズが大きくなってディスク領域を圧迫し、保存場所を後から変更したいような時はないでしょうか。

この記事では、既存のデータベースのトランザクションログファイル(ldf ファイル)を他の場所に移す方法をご紹介します。

今回はログファイルの保存場所を変更しますが、全く同じ方法で、データファイル(mdf・ndf ファイル)も移動可能です。

トランザクションログファイルの保存場所を変更する方法

今回は Test データベースのログファイルの場所を、違うドライブのフォルダーに変更します。


1. まずは次のクエリーを実行して、ターゲットとなるデータベースの、ログファイルの論理名と現在の保存場所を確認します。

SELECT	name, 
	physical_name,
	type_desc
FROM	sys.master_files
WHERE	database_id = DB_ID(N'Test');	

ログファイルの保存場所を変更する方法 1

Test データベースのログファイルの論理名(logical_name) は Test_log ですね。


2. 次に以下のクエリーで Test データベースをオフラインにします。

ALTER DATABASE Test SET OFFLINE;

ログファイルの保存場所を変更する方法 2

* クエリーの実行に時間がかかって終わらない場合は、利用状況モニターなどで、そのデータベースに対してアクティブなプロセスを確認して強制終了させてください。

ログファイルの保存場所を変更する方法 10

ログファイルの保存場所を変更する方法 11


3. ログファイルを新しい保存先に移動します。

ログファイルの保存場所を変更する方法 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


4. 次に以下のクエリーで Test データベースをオンラインに戻します。

ALTER DATABASE Test SET ONLINE;

ログファイルの保存場所を変更する方法 6


このスクリプトを実行した時に次のようなエラーが出ることがあるかもしれません。

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 ステートメントが失敗しました。

ログファイルの保存場所を変更する方法 5

これは、SQL Server のサービスアカウントがログファイルにアクセスする権限がない為です。

SQL Server のサービスアカウントを SQL Server 構成マネージャー等で確認して、アクセス権限を追加してください。

ログファイルの保存場所を変更する方法 7

ログファイルの保存場所を変更する方法 8


これで、ログファイルの保存場所を変更完了です。

試しに No.1 のクエリーをもう一度実行してみると、保存場所が変更されていますね!

ログファイルの保存場所を変更する方法 9

© 2010-2024 SQL Server 入門