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

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

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

  • 計画に従った再配置。

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

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

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

重要な注意事項重要

システム データベースを移動した後に master データベースを再構築すると、すべてのシステム データベースがそれぞれ既定の場所にインストールされるため、システム データベースを再度移動する必要があります。master データベースの再構築の詳細については、「コマンド プロンプトから SQL Server 2008 をインストールする方法」の「システム データベースの再構築とレジストリの再構築」を参照してください。

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

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

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

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

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

  4. SQL Server のインスタンスまたはサーバーを再起動します。詳細については、「サービスの開始と再開」を参照してください。

  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 のインスタンスを起動する方法 (net コマンド)」を参照してください。

  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. [起動時のパラメータ] の値を編集して、master データベースのデータ ファイルとログ ファイル用の計画された場所を指すようにし、[OK] をクリックします。エラー ログ ファイルは移動しても移動しなくてもかまいません。

    -d パラメータの後にデータ ファイルのパラメータ値を指定し、-l パラメータの後にログ ファイルのパラメータ値を指定します。次の例は、master データ ファイルとログ ファイルの既定の場所のパラメータ値を示します。

    -dC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\
    master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\
    LOG\ERRORLOG;-lC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\
    DATA\mastlog.ldf
    

    master データ ファイルとログ ファイルの計画に従った再配置場所が E:\SQLData の場合、パラメータ値を次のように変更します。

    -dE:\SQLData\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\LOG\ERRORLOG;-lE:\SQLData\mastlog.ldf
    
  5. インスタンス名を右クリックして [停止] をクリックし、SQL Server のインスタンスを停止します。

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

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

  8. master データベースのファイルが変更されたことを確認するため、次のクエリを実行します。

    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID('master');
    GO
    

Resource データベースの移動

SQL Server 2008 では、Resource データベースの場所は、<drive>:\Program Files\Microsoft SQL Server\MSSQL10.<instance_name>\MSSQL\Binn\ です。データベースを移動することはできません。

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 データベースは移動できないという内容を「Resource データベースの移動」に追加しました。