システム データベースの移動
このトピックでは、SQL Serverでシステム データベースを移動する方法について説明します。 システム データベースの移動は、次の状況で便利な場合があります。
障害復旧。 たとえば、ハードウェア障害により、データベースが問題のあるモードになっている場合や、シャットダウンされた場合など。
計画に従った再配置。
スケジュールされたディスク メンテナンスとしての再配置。
次の手順は、SQL Serverの同じインスタンス内でデータベース ファイルを移動する場合に適用されます。 データベースをSQL Serverの別のインスタンスまたは別のサーバーに移動するには、バックアップ操作と復元操作、デタッチ操作、アタッチ操作を使用します。
このトピックの手順では、データベース ファイルの論理名が必要です。 論理名を取得するには、 sys.master_files カタログ ビューで name 列に対するクエリを実行します。
重要
システム データベースを移動した後に master データベースを再構築すると、すべてのシステム データベースがそれぞれ既定の場所にインストールされるため、システム データベースを再度移動する必要があります。
このトピックの内容
計画に従った再配置とスケジュールされたディスク メンテナンスの手順
計画に従った再配置やスケジュールされたメンテナンス操作の中でシステム データベースのデータ ファイルやログ ファイルを移動するには、次の手順を実行します。 この手順は、master データベースと Resource データベース以外のすべてのシステム データベースに適用されます。
移動対象のそれぞれのファイルに対して、次のステートメントを実行します。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
メンテナンスを行うため、 SQL Server のインスタンスを停止するか、システムをシャットダウンします。 詳細については、「 データベース エンジン、SQL Server エージェント、SQL Server Browser サービスの開始、停止、一時停止、再開、および再起動 」を参照してください。
ファイルを新しい場所に移動します。
SQL Server のインスタンスまたはサーバーを再起動します。 詳細については、「 データベース エンジン、SQL Server エージェント、SQL Server Browser サービスの開始、停止、一時停止、再開、および再起動 」を参照してください。
次のクエリを実行して、ファイルが変更されたことを確認します。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
msdb データベースが移動され、SQL Serverのインスタンスがデータベース メール用に構成されている場合は、次の追加手順を実行します。
次のクエリを実行して、msdb データベースに対して Service Broker が有効になっていることを確認します。
SELECT is_broker_enabled FROM sys.databases WHERE name = N'msdb';
Service Broker の有効化の詳細については、「 ALTER DATABASE (Transact-SQL)」を参照してください。
テスト メールを送信して、データベース メールが動作していることを確認します。
障害復旧の手順
ハードウェア障害が原因でファイルを移動する必要がある場合、次の手順に従って別の場所にファイルを再配置します。 この手順は、master データベースと Resource データベース以外のすべてのシステム データベースに適用されます。
重要
データベースを起動できないとき、つまり、データベースが問題のあるモードか復旧できない状態にある場合、ファイルを移動できるのは、sysadmin 固定ロールのメンバーだけです。
SQL Server のインスタンスが起動していたら停止します。
コマンド プロンプトで次のいずれかのコマンドを入力し、 SQL Server のインスタンスを master のみを復旧するモードで開始します。 これらのコマンドで指定されるパラメーターでは、大文字と小文字が区別されます。 パラメーターが次のように指定されていない場合、コマンドは失敗します。
既定 (MSSQLSERVER) のインスタンスの場合は、次のコマンドを実行します。
NET START MSSQLSERVER /f /T3608
名前付きインスタンスの場合は、次のコマンドを実行します。
NET START MSSQL$instancename /f /T3608
詳細については、「 データベース エンジン、SQL Server エージェント、SQL Server Browser サービスの開始、停止、一時停止、再開、および再起動 」を参照してください。
移動対象の各ファイルに対して、 sqlcmd コマンドか SQL Server Management Studio を使用して、次のステートメントを実行します。
ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
sqlcmd ユーティリティの使用方法については、「 sqlcmd ユーティリティの使用」を参照してください。
sqlcmd ユーティリティまたは SQL Server Management Studioを終了します。
SQL Serverのインスタンスを停止します。 たとえば、
NET STOP MSSQLSERVER
を実行します。ファイルを新しい場所に移動します。
SQL Serverのインスタンスを再起動します。 たとえば、
NET START MSSQLSERVER
を実行します。次のクエリを実行して、ファイルが変更されたことを確認します。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
master データベースの移動
master データベースを移動するには、次の手順を実行します。
[スタート] ボタンをクリックし、 [すべてのプログラム] 、 [Microsoft SQL Server] 、 [構成ツール] の順にポイントし、 [SQL Server 構成マネージャー] をクリックします。
[SQL Server サービス] ノードで、SQL Serverのインスタンス (SQL Server (MSSQLSERVER など) を右クリックし、 [プロパティ] を選択します。
[SQL Server (instance_name) のプロパティ] ダイアログ ボックスで、[スタートアップ パラメーター] タブをクリックします。
[既存のパラメーター] ボックスで -d パラメーターを選択して、マスター データ ファイルを移動します。 [更新] をクリックして変更を保存します。
[起動時のパラメーターの指定] ボックスで、パラメーターを master データベースの新しいパスに変更します。
[既存のパラメーター] ボックスで -l パラメーターを選択して、マスター ログ ファイルを移動します。 [更新] をクリックして変更を保存します。
[起動時のパラメーターの指定] ボックスで、パラメーターを master データベースの新しいパスに変更します。
-d
パラメーターの後にデータ ファイルのパラメーター値を指定し、-l
パラメーターの後にログ ファイルのパラメーター値を指定します。 次の例は、マスター データ ファイルの既定の場所のパラメーター値を示します。-dC:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\master.mdf
-lC:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
マスター データ ファイルの計画に従った再配置場所が
E:\SQLData
の場合、パラメーター値を次のように変更します。-dE:\SQLData\master.mdf
-lE:\SQLData\mastlog.ldf
インスタンス名を右クリックし、[停止] を選択して、SQL Serverのインスタンスを停止します。
master.mdf ファイルおよび mastlog.ldf ファイルを新しい場所に移動します。
SQL Serverのインスタンスを再起動します。
master データベースのファイルが変更されたことを確認するため、次のクエリを実行します。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID('master'); GO
Resource データベースの移動
リソース データベースの場所は drive><:\Program Files\Microsoft SQL Server\MSSQL<バージョンです>。<Instance_name>\MSSQL\Binn\ データベースを移動することはできません。
補足情報: すべてのシステム データベースを移動した後
すべてのシステム データベースを、新しいドライブやボリューム、または別のドライブ文字を使用した別のサーバーに移動した場合は、次の更新を行います。
SQL Server エージェントのログ パスを変更します。 このパスを更新しないと、SQL Server エージェントは起動しません。
データベースの既定の場所を変更します。 既定の場所として指定したドライブ文字やパスが存在しない場合、新しいデータベースが作成されない可能性があります。
SQL Server エージェントのログ パスの変更
SQL Server Management Studio のオブジェクト エクスプローラーで、 [SQL Server エージェント] を展開します。
[エラー ログ] を右クリックし、 [構成] をクリックします。
SQL Server エージェント エラー ログの構成] ダイアログ ボックスで、SQLAGENT.OUT ファイルの新しい場所を指定します。 既定の場所は C:\Program Files\Microsoft SQL Server\MSSQL12 です。<>instance_name\MSSQL\Log\
データベースの既定の場所の変更
SQL Server Management Studio のオブジェクト エクスプローラーで、SQL Server のサーバーを右クリックし、 [プロパティ] をクリックします。
[サーバーのプロパティ] ダイアログ ボックスで、 [データベースの設定] を選択します。
[データベースの既定の場所] で、データ ファイルとログ ファイルの両方の新しい場所を参照します。
変更を完了するため、SQL Server サービスをいったん停止してから開始します。
例
A. tempdb データベースを移動する
次の例では、計画に従った再配置の一環として、 tempdb
データ ファイルとログ ファイルを新しい場所に移動します。
注意
tempdb は、SQL Serverのインスタンスが開始されるたびに再作成されるため、データ ファイルとログ ファイルを物理的に移動する必要はありません。 手順 3. でサービスを再起動すると、新しい場所にファイルが作成されます。 サービスを再起動するまでは、tempdb は既存の場所のデータ ファイルとログ ファイルを使用し続けます。
tempdb
データベースの論理ファイル名と、ディスク上での現在の場所を確認します。SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID(N'tempdb'); GO
ALTER DATABASE
を使用して、各ファイルの場所を変更します。USE master; GO ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf'); GO ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf'); GO
SQL Serverのインスタンスをいったん停止してから再起動します。
ファイルの変更を確認します。
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'tempdb');
tempdb.mdf
ファイルおよびtemplog.ldf
ファイルを元の場所から削除します。
参照
Resource データベース
tempdb データベース
master データベース
msdb データベース
model データベース
ユーザー データベースの移動
データベース ファイルの移動
データベース エンジン、SQL Server エージェント、SQL Server Browser サービスの開始、停止、一時停止、再開、および再起動
ALTER DATABASE (Transact-SQL)
システム データベースの再構築