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

更新 : 2008 年 11 月 17 日

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

  • 障害復旧。たとえば、ハードウェア障害により、データベースが問題のあるモードになっている場合や、シャットダウンされた場合など。
  • 計画に従った再配置。
  • スケジュールされたディスク メンテナンスとしての再配置。

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

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

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

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

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

ms345408.note(ja-jp,SQL.90).gif重要 :
データベースを起動できないとき、つまり、データベースが問題のあるモードか復旧できない状態にある場合、ファイルを移動できるのは、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 データベースと Resource データベースの移動

Resource データベースは、master データベースの場所に依存します。Resource データ ファイルとログ ファイルは、master データ ファイル (master.mdf) と同じ場所に一緒に保存する必要があります。したがって、master データベースを移動する場合は、Resource データベースも master データ ファイルと同じ場所に移動する必要があります。Resource データベースは、圧縮または暗号化された NTFS ファイル システムのフォルダに保存しないでください。パフォーマンスが低下し、アップグレードできなくなります。

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

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

  2. [SQL Server 2005 のサービス] ノードで、SQL Server のインスタンス (たとえば、[SQL Server (MSSQLSERVER)]) を右クリックし、[プロパティ] をクリックします。

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

  4. [起動時のパラメータ] の値を編集して、master データベースのデータ ファイルとログ ファイル用の計画された場所を指すようにし、[OK] をクリックします。エラー ログ ファイルは移動しても移動しなくてもかまいません。
    -d パラメータの後にデータ ファイルのパラメータ値を指定し、-l パラメータの後にログ ファイルのパラメータ値を指定します。次の例は、master データ ファイルとログ ファイルの既定の場所のパラメータ値を示します。

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

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

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

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

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

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

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

      NET START MSSQL$instancename /f /T3608
      

    詳細については、「SQL Server のインスタンスを起動する方法 (net コマンド)」を参照してください。

  8. sqlcmd コマンドまたは SQL Server Management Studio を使用して、次のステートメントを実行します。FILENAME パスは、master データ ファイルの新しい場所に合わせて変更します。データベース名やファイル名は変更しないでください。

    ALTER DATABASE mssqlsystemresource 
        MODIFY FILE (NAME=data, FILENAME= 'new_path_of_master\mssqlsystemresource.mdf');
    GO
    ALTER DATABASE mssqlsystemresource 
        MODIFY FILE (NAME=log, FILENAME= 'new_path_of_master\mssqlsystemresource.ldf');
    GO
    
  9. mssqlsystemresource.mdf ファイルおよび mssqlsystemresource.ldf ファイルを新しい場所に移動します。

  10. 次のステートメントを実行して、Resource データベースを読み取り専用に設定します。

    ALTER DATABASE mssqlsystemresource SET READ_ONLY;
    
  11. sqlcmd ユーティリティまたは SQL Server Management Studio を終了します。

  12. SQL Server のインスタンスを停止します。

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

  14. master データベースのファイルが変更されたことを確認するため、次のクエリを実行します。Resource データベースのメタデータを、システム カタログ ビューやシステム テーブルを使用して表示することはできません。

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

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

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

ms345408.note(ja-jp,SQL.90).gifメモ :
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 データベース
ユーザー データベースの移動
サービスの停止

その他の技術情報

データベース ファイルの移動
サービスの開始と再開
ALTER DATABASE (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2008 年 11 月 17 日

変更内容 :
  • Resource データ ファイルとログ ファイルは、master データ ファイルと同じ場所に一緒に保存する必要があるという要件を追加しました。

2006 年 4 月 14 日

追加内容 :
  • master データベースを再構築した後のシステム データベースの移動に関する重要な注意事項を追加しました。
更新内容 :
  • master データベースおよび Resource データベースを移動する手順を変更しました。