ユーザー データベースの移動

SQL Serverでは、 ALTER DATABASE ステートメントの FILENAME 句で新しいファイルの場所を指定することで、ユーザー データベースのデータ ファイル、ログ ファイル、およびフルテキスト カタログ ファイルを新しい場所に移動することができます。 この方法は、同じ SQL Serverインスタンス内でデータベース ファイルを移動する場合に使用できます。 SQL Server の別のインスタンスや、別のサーバーにデータベースを移動する場合は、 バックアップと復元 操作か デタッチ操作とアタッチ操作を使用します。

考慮事項

データベースを別のサーバー インスタンスに移動するときは、ユーザーおよびアプリケーションに一貫した使用環境を提供するために、データベースのメタデータの一部またはすべてを作成し直す必要が生じる場合があります。 詳細については、「データベースを別のサーバー インスタンスで使用できるようにするときのメタデータの管理 (SQL Server)」を参照してください。

SQL Server データベース エンジンの一部の機能は、データベース エンジンがデータベース ファイルに情報を格納する方法を変更します。 これらの機能は、 SQL Serverの特定のエディションでのみ使用できます。 これらの機能を備えたデータベースを、それらをサポートしない SQL Server のエディションに移動することはできません。 現在のデータベースで有効なエディション固有の機能をすべて一覧表示するには、sys.dm_db_persisted_sku_features 動的管理ビューを使用します。

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

SQL Server 2008 R2以降では、フルテキスト カタログは、ファイル システムに格納されるのではなく、データベースに統合されています。 フルテキスト カタログは、データベースの移動時に自動的に移動されるようになりました。

計画に従った再配置の手順

計画に従った再配置の一環としてデータ ファイルやログ ファイルを移動するには、次の手順を実行します。

  1. 次のステートメントを実行します。

    ALTER DATABASE database_name SET OFFLINE;  
    
  2. ファイルを新しい場所に移動します。

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

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );  
    
  4. 次のステートメントを実行します。

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

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

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

スケジュールされたディスク メンテナンスの一環としてファイルを再配置するには、次の手順を実行します。

  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>');  
    

障害復旧の手順

ハードウェア障害が原因でファイルを移動する必要がある場合、次の手順に従って別の場所にファイルを再配置します。

重要

データベースを起動できないとき、つまり、データベースが問題のあるモードか復旧できない状態にある場合、ファイルを移動できるのは、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のインスタンスを停止します。

  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>');  
    

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

USE master;  
GO  
-- Return the logical file name.  
SELECT name, physical_name AS CurrentLocation, state_desc  
FROM sys.master_files  
WHERE database_id = DB_ID(N'AdventureWorks2012')  
    AND type_desc = N'LOG';  
GO  
ALTER DATABASE AdventureWorks2012 SET OFFLINE;  
GO  
-- Physically move the file to a new location.  
-- In the following statement, modify the path specified in FILENAME to  
-- the new location of the file on your server.  
ALTER DATABASE AdventureWorks2012   
    MODIFY FILE ( NAME = AdventureWorks2012_Log,   
                  FILENAME = 'C:\NewLoc\AdventureWorks2012_Log.ldf');  
GO  
ALTER DATABASE AdventureWorks2012 SET ONLINE;  
GO  
--Verify the new location.  
SELECT name, physical_name AS CurrentLocation, state_desc  
FROM sys.master_files  
WHERE database_id = DB_ID(N'AdventureWorks2012')  
    AND type_desc = N'LOG';  

参照

ALTER DATABASE (Transact-SQL)
CREATE DATABASE (SQL Server Transact-SQL)
データベースのデタッチとアタッチ (SQL Server)
システム データベースの移動
データベース ファイルの移動
BACKUP (Transact-SQL)
RESTORE (Transact-SQL)
データベース エンジン、SQL Server エージェント、SQL Server Browser サービスの開始、停止、一時停止、再開、および再起動