デタッチとアタッチを使用してデータベースを移動する方法 (Transact-SQL)

適用対象:SQL Server

このトピックでは、SQL Server でデタッチしたデータベースを別の場所に移動し、同じまたは異なるサーバー インスタンスに再アタッチする方法について説明します。 ただし、データベースを移動するときは、デタッチとアタッチではなく、ALTER DATABASE による計画的再配置手順を使用することをお勧めします。 詳細については、「 ユーザー データベースの移動」を参照してください。

重要

不明なソースや信頼されていないソースからのデータベースのアタッチまたは復元は実行しないことをお勧めします。 こうしたデータベースには、意図しない Transact-SQL コードを実行したり、スキーマまたは物理データベース構造を変更してエラーを発生させるような、悪意のあるコードが含まれている可能性があります。 不明または信頼できないソースのデータベースを使用する前に、運用サーバー以外のサーバーでそのデータベースに対し DBCC CHECKDB を実行し、さらに、そのデータベースのストアド プロシージャやその他のユーザー定義コードなどのコードを調べます。

手順

デタッチとアタッチを使用してデータベースを移動するには

  1. データベースをデタッチします。 詳細については、「 データベースのデタッチ」を参照してください。

  2. Windows エクスプローラーまたは Windows コマンド プロンプト ウィンドウで、デタッチされたデータベース ファイルとログ ファイルを新しい場所に移動します。

    新しいログ ファイルを作成する場合でも、ログ ファイルを移動する必要があります。 場合によっては、データベースの再アタッチに既存のログ ファイルが必要になります。 したがって、デタッチしたログ ファイルを使わずにデータベースを正常にアタッチできるまで、デタッチしたログ ファイルは必ずすべて保管しておいてください。

    注意

    ログ ファイルを指定せずにデータベースのインポートを試みると、アタッチ操作は元の場所でログ ファイルを検索します。 ログのコピーが依然として元の場所にある場合は、そのコピーがアタッチされます。 元のログ ファイルが使用されないようにするには、新しいログ ファイルのパスを指定するか、ログ ファイルの元のコピーを (新しい場所にコピーした後で) 削除します。

  3. コピーしたファイルをアタッチします。 詳細については、「 Attach a Database」を参照してください。

次の例では、 MyAdventureWorksという AdventureWorks2022 データベースのコピーを作成しています。 Transact-SQL ステートメントは、アタッチするサーバー インスタンスに接続されたクエリ エディター ウィンドウで実行しています。

  1. 次の Transact-SQL ステートメントを実行して AdventureWorks2022 データベースをデタッチします。

    USE master;  
    GO  
    EXEC sp_detach_db @dbname = N'AdventureWorks2022';  
    GO  
    
  2. 任意の方法で、データベース ファイル (AdventureWorks208R2_Data.mdf と AdventureWorks208R2_log) を C:\MySQLServer\AdventureWorks208R2_Data.mdf と C:\MySQLServer\AdventureWorks208R2_Log.ldf にそれぞれコピーします。

    重要

    実稼動データベースの場合は、データベースとトランザクション ログを別のディスクに配置します。

    ファイルをネットワーク経由でリモート コンピューターのディスクにコピーするには、そのリモート コンピューターの UNC (Universal Naming Convention) 名を使用します。 UNC 名の形式は、 \\Servername\Sharename\Path\Filenameです。 ローカル ハード ディスクにファイルを書き込む場合と同様、リモート ディスクでのファイルの読み取りや書き込みに必要な適切な権限が、SQL Server のインスタンスで使用するユーザー アカウントに許可されている必要があます。

  3. 次の Transact-SQL ステートメントを使用して、移動したデータベースとログをアタッチします (ログのアタッチは省略できます)。

    USE master;  
    GO  
    CREATE DATABASE MyAdventureWorks   
        ON (FILENAME = 'C:\MySQLServer\AdventureWorks2022_Data.mdf'),  
        (FILENAME = 'C:\MySQLServer\AdventureWorks2022_Log.ldf')  
        FOR ATTACH;  
    GO  
    

    SQL Server Management Studio では、新しくアタッチされたデータベースはオブジェクト エクスプローラーにすぐに表示されません。 このデータベースを表示するには、オブジェクト エクスプローラーで、 [表示] をクリックし、 [最新の情報に更新]をクリックします。 オブジェクト エクスプローラーの [データベース] ノードを展開すると、データベースの一覧に新しくアタッチされたデータベースが表示されるようになります。

参照

データベースのデタッチとアタッチ (SQL Server)