次の方法で共有


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

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

重要

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

プロシージャ

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

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

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

    単一ファイル データベースを移動するには、メールに対応できるファイル サイズが十分に小さい場合は、電子メールを使用できます。

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

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

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

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

  1. Transact-SQL ステートメントをデタッチします。

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

    重要

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

    ネットワーク経由でリモート コンピューター上のディスクにファイルをコピーするには、リモートの場所の汎用名前付け規則 (UNC) 名を使用します。 UNC 名は、Servername\Sharename\Path\Filename\\形式になります。 ローカル ハード ディスクへのファイルの書き込みと同様に、リモート ディスク上のファイルの読み取りまたは書き込みに必要な適切なアクセス許可は、SQL Server のインスタンスで使用されるユーザー アカウントに付与する必要があります。

  3. 次の Transact-SQL ステートメントを実行して、移動したデータベースとそのログ (必要に応じて) をアタッチします。

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

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

こちらもご覧ください

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