デタッチとアタッチを使用してデータベースを移動する方法 (Transact-SQL)
このトピックでは、SQL Server 2012 でデタッチしたデータベースを別の場所に移動し、同じまたは異なるサーバー インスタンスに再アタッチする方法について説明します。 ただし、データベースを移動するときは、デタッチとアタッチではなく、ALTER DATABASE による計画的再配置手順を使用することをお勧めします。 詳細については、「ユーザー データベースの移動」を参照してください。
セキュリティに関する注意 |
---|
不明なソースや信頼されていないソースからデータベースをアタッチまたは復元しないことをお勧めします。 そのようなデータベースには、意図しない Transact-SQL コードを実行したり、スキーマまたは物理データベース構造を変更することによりエラーを発生させる悪意のあるコードが含まれている可能性があるからです。 不明なソースや信頼されていないソースのデータベースは、使用する前に、非稼働サーバーでそのデータベースに対し DBCC CHECKDB を実行し、さらに、そのデータベースのストアド プロシージャやその他のユーザー定義コードなどのコードを調べます。 |
手順
デタッチとアタッチを使用してデータベースを移動するには
データベースをデタッチします。 詳細については、「データベースのデタッチ」を参照してください。
Windows エクスプローラーまたは Windows コマンド プロンプト ウィンドウで、デタッチされたデータベース ファイルとログ ファイルを新しい場所に移動します。
注 単一ファイルのデータベースを移動する場合は、電子メールを使用できます。ただし、ファイル サイズが電子メールで対応できる大きさである場合に限られます。
新しいログ ファイルを作成する場合でも、ログ ファイルを移動する必要があります。 場合によっては、データベースの再アタッチに既存のログ ファイルが必要になります。 したがって、デタッチしたログ ファイルを使わずにデータベースを正常にアタッチできるまで、デタッチしたログ ファイルは必ずすべて保管しておいてください。
注 ログ ファイルを指定せずにデータベースのアタッチを試みると、アタッチ操作は元の場所でログ ファイルを検索します。 ログのコピーが依然として元の場所にある場合は、そのコピーがアタッチされます。 元のログ ファイルが使用されないようにするには、新しいログ ファイルのパスを指定するか、ログ ファイルの元のコピーを (新しい場所にコピーした後で) 削除します。
コピーしたファイルをアタッチします。 詳細については、「データベースのアタッチ」を参照してください。
例
次の例では、MyAdventureWorks という AdventureWorks2012 データベースのコピーを作成しています。 Transact-SQL ステートメントは、アタッチするサーバー インスタンスに接続されたクエリ エディター ウィンドウで実行しています。
次の Transact-SQL ステートメントを実行して AdventureWorks2012 データベースをデタッチします。
USE master; GO EXEC sp_detach_db @dbname = N'AdventureWorks2012'; GO
任意の方法で、データベース ファイル (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 のインスタンスで使用するユーザー アカウントに許可されている必要があります。
次の 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 では、新しくアタッチされたデータベースはオブジェクト エクスプローラーにすぐに表示されません。 このデータベースを表示するには、オブジェクト エクスプローラーで、[表示] をクリックし、[最新の情報に更新] をクリックします。 オブジェクト エクスプローラーの [データベース] ノードを展開すると、データベースの一覧に新しくアタッチされたデータベースが表示されるようになります。