次の方法で共有


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

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 カタログ ビューで名前列に対してクエリを実行します。

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 のインスタンスを起動します。

    • 既定の (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';  

こちらもご覧ください

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