次の方法で共有


システム データベースの移動

このトピックでは、SQL Serverでシステム データベースを移動する方法について説明します。 システム データベースの移動は、次の状況で便利な場合があります。

  • 障害復旧。 たとえば、ハードウェア障害により、データベースが問題のあるモードになっている場合や、シャットダウンされた場合など。

  • 計画に従った再配置。

  • スケジュールされたディスク メンテナンスとしての再配置。

次の手順は、SQL Serverの同じインスタンス内でデータベース ファイルを移動する場合に適用されます。 データベースをSQL Serverの別のインスタンスまたは別のサーバーに移動するには、バックアップ操作と復元操作、デタッチ操作、アタッチ操作を使用します。

このトピックの手順では、データベース ファイルの論理名が必要です。 論理名を取得するには、 sys.master_files カタログ ビューで name 列に対するクエリを実行します。

重要

システム データベースを移動した後に master データベースを再構築すると、すべてのシステム データベースがそれぞれ既定の場所にインストールされるため、システム データベースを再度移動する必要があります。

このトピックの内容

計画に従った再配置とスケジュールされたディスク メンテナンスの手順

計画に従った再配置やスケジュールされたメンテナンス操作の中でシステム データベースのデータ ファイルやログ ファイルを移動するには、次の手順を実行します。 この手順は、master データベースと Resource データベース以外のすべてのシステム データベースに適用されます。

  1. 移動対象のそれぞれのファイルに対して、次のステートメントを実行します。

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )  
    
  2. メンテナンスを行うため、 SQL Server のインスタンスを停止するか、システムをシャットダウンします。 詳細については、「 データベース エンジン、SQL Server エージェント、SQL Server Browser サービスの開始、停止、一時停止、再開、および再起動 」を参照してください。

  3. ファイルを新しい場所に移動します。

  4. SQL Server のインスタンスまたはサーバーを再起動します。 詳細については、「 データベース エンジン、SQL Server エージェント、SQL Server Browser サービスの開始、停止、一時停止、再開、および再起動 」を参照してください。

  5. 次のクエリを実行して、ファイルが変更されたことを確認します。

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    

msdb データベースが移動され、SQL Serverのインスタンスがデータベース メール用に構成されている場合は、次の追加手順を実行します。

  1. 次のクエリを実行して、msdb データベースに対して Service Broker が有効になっていることを確認します。

    SELECT is_broker_enabled   
    FROM sys.databases  
    WHERE name = N'msdb';  
    

    Service Broker の有効化の詳細については、「 ALTER DATABASE (Transact-SQL)」を参照してください。

  2. テスト メールを送信して、データベース メールが動作していることを確認します。

障害復旧の手順

ハードウェア障害が原因でファイルを移動する必要がある場合、次の手順に従って別の場所にファイルを再配置します。 この手順は、master データベースと Resource データベース以外のすべてのシステム データベースに適用されます。

重要

データベースを起動できないとき、つまり、データベースが問題のあるモードか復旧できない状態にある場合、ファイルを移動できるのは、sysadmin 固定ロールのメンバーだけです。

  1. SQL Server のインスタンスが起動していたら停止します。

  2. コマンド プロンプトで次のいずれかのコマンドを入力し、 SQL Server のインスタンスを master のみを復旧するモードで開始します。 これらのコマンドで指定されるパラメーターでは、大文字と小文字が区別されます。 パラメーターが次のように指定されていない場合、コマンドは失敗します。

    • 既定 (MSSQLSERVER) のインスタンスの場合は、次のコマンドを実行します。

      NET START MSSQLSERVER /f /T3608  
      
    • 名前付きインスタンスの場合は、次のコマンドを実行します。

      NET START MSSQL$instancename /f /T3608  
      

    詳細については、「 データベース エンジン、SQL Server エージェント、SQL Server Browser サービスの開始、停止、一時停止、再開、および再起動 」を参照してください。

  3. 移動対象の各ファイルに対して、 sqlcmd コマンドか SQL Server Management Studio を使用して、次のステートメントを実行します。

    ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' )  
    

    sqlcmd ユーティリティの使用方法については、「 sqlcmd ユーティリティの使用」を参照してください。

  4. sqlcmd ユーティリティまたは SQL Server Management Studioを終了します。

  5. SQL Serverのインスタンスを停止します。 たとえば、 NET STOP MSSQLSERVERを実行します。

  6. ファイルを新しい場所に移動します。

  7. SQL Serverのインスタンスを再起動します。 たとえば、 NET START MSSQLSERVERを実行します。

  8. 次のクエリを実行して、ファイルが変更されたことを確認します。

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    

master データベースの移動

master データベースを移動するには、次の手順を実行します。

  1. [スタート] ボタンをクリックし、 [すべてのプログラム][Microsoft SQL Server][構成ツール] の順にポイントし、 [SQL Server 構成マネージャー] をクリックします。

  2. [SQL Server サービス] ノードで、SQL Serverのインスタンス (SQL Server (MSSQLSERVER など) を右クリックし、 [プロパティ] を選択します

  3. [SQL Server (instance_name) のプロパティ] ダイアログ ボックスで、[スタートアップ パラメーター] タブをクリックします。

  4. [既存のパラメーター] ボックスで -d パラメーターを選択して、マスター データ ファイルを移動します。 [更新] をクリックして変更を保存します。

    [起動時のパラメーターの指定] ボックスで、パラメーターを master データベースの新しいパスに変更します。

  5. [既存のパラメーター] ボックスで -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

  6. インスタンス名を右クリックし、[停止] を選択して、SQL Serverのインスタンスを停止します

  7. master.mdf ファイルおよび mastlog.ldf ファイルを新しい場所に移動します。

  8. SQL Serverのインスタンスを再起動します。

  9. 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 エージェントのログ パスの変更

  1. SQL Server Management Studio のオブジェクト エクスプローラーで、 [SQL Server エージェント] を展開します。

  2. [エラー ログ] を右クリックし、 [構成] をクリックします。

  3. SQL Server エージェント エラー ログの構成] ダイアログ ボックスで、SQLAGENT.OUT ファイルの新しい場所を指定します。 既定の場所は C:\Program Files\Microsoft SQL Server\MSSQL12 です。<>instance_name\MSSQL\Log\

データベースの既定の場所の変更

  1. SQL Server Management Studio のオブジェクト エクスプローラーで、SQL Server のサーバーを右クリックし、 [プロパティ] をクリックします。

  2. [サーバーのプロパティ] ダイアログ ボックスで、 [データベースの設定] を選択します。

  3. [データベースの既定の場所] で、データ ファイルとログ ファイルの両方の新しい場所を参照します。

  4. 変更を完了するため、SQL Server サービスをいったん停止してから開始します。

A. tempdb データベースを移動する

次の例では、計画に従った再配置の一環として、 tempdb データ ファイルとログ ファイルを新しい場所に移動します。

注意

tempdb は、SQL Serverのインスタンスが開始されるたびに再作成されるため、データ ファイルとログ ファイルを物理的に移動する必要はありません。 手順 3. でサービスを再起動すると、新しい場所にファイルが作成されます。 サービスを再起動するまでは、tempdb は既存の場所のデータ ファイルとログ ファイルを使用し続けます。

  1. tempdb データベースの論理ファイル名と、ディスク上での現在の場所を確認します。

    SELECT name, physical_name AS CurrentLocation  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'tempdb');  
    GO  
    
  2. 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  
    
  3. SQL Serverのインスタンスをいったん停止してから再起動します。

  4. ファイルの変更を確認します。

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'tempdb');  
    
  5. tempdb.mdf ファイルおよび templog.ldf ファイルを元の場所から削除します。

参照

Resource データベース
tempdb データベース
master データベース
msdb データベース
model データベース
ユーザー データベースの移動
データベース ファイルの移動
データベース エンジン、SQL Server エージェント、SQL Server Browser サービスの開始、停止、一時停止、再開、および再起動
ALTER DATABASE (Transact-SQL)
システム データベースの再構築