次の方法で共有


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

このトピックでは、SQL Server でシステム データベースを移動する方法について説明します。 システム データベースの移動は、次のような場合に役立ちます。

  • 障害復旧プロセス。 たとえば、データベースが疑わしいモードであるか、ハードウェア障害が原因でシャットダウンしたとします。

  • 計画的な再配置。

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

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

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

重要

システム データベースを移動し、後でマスター データベースを再構築する場合は、再構築操作によってすべてのシステム データベースが既定の場所にインストールされるため、システム データベースをもう一度移動する必要があります。

このトピックについて

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

計画的な再配置またはスケジュールされたメンテナンス操作の一環としてシステム データベースのデータまたはログ ファイルを移動するには、次の手順に従います。 この手順は、マスター データベースとリソース データベースを除くすべてのシステム データベースに適用されます。

  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. テスト メールを送信して、データベース メールが動作していることを確認します。

障害復旧手順

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

重要

データベースを起動できない場合、つまり、データベースが疑わしいモードまたは復旧されていない状態の場合は、sysadmin 固定ロールのメンバーのみがファイルを移動できます。

  1. SQL Server のインスタンスが起動されている場合は停止します。

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

    • 既定の (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 データベースの移動

マスター データベースを移動するには、次の手順に従います。

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

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

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

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

    [ スタートアップ パラメーターの指定 ] ボックスで、パラメーターをマスター データベースの新しいパスに変更します。

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

    [ スタートアップ パラメーターの指定 ] ボックスで、パラメーターをマスター データベースの新しいパスに変更します。

    データ ファイルのパラメーター値は -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. 次のクエリを実行して、マスター データベースのファイル変更を確認します。

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

リソース データベースの移動

リソース データベースの場所は <drive>:\Program Files\Microsoft SQL Server\MSSQL<version>.<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 サービスを停止して開始し、変更を完了します。

例示

ある。 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 ファイルを削除します。

こちらもご覧ください

リソース データベース
tempdb データベース
マスター データベース
msdb Database
モデルデータベース
ユーザー データベースの移動
データベース ファイルの移動
データベース エンジン、SQL Server エージェント、SQL Server Browser サービスの開始、停止、一時停止、再開、および再起動
データベースを変更 (Transact-SQL)
システム データベースの再構築