現象
Microsoft SQL Server 2012 の [ 置換後の文字列 ] オプションを使用してバックアップからデータベースを復元すると、バックアップデータベースから取得された復元されたデータベースの物理ファイル名が、既存のデータベースの物理ファイル名で上書きされることがあります。たとえば、次のシナリオについて考えてみます。
-
SQL Server の InstanceA と Instancea の2つのインスタンスがあります。
-
SQL Server の各インスタンスで、SQLDB という名前のデータベースが作成されている。
-
InstanceA では、SQLDB データベースデータファイル名は DB1_InstanceA .mdf で、ログファイル名は DB1_InstanceA .ldf です。
-
InstanceB では、SQLDB データベースデータファイル名は DB1_InstanceB .mdf で、ログファイル名は DB1_InstanceB .ldf です。
-
[復元] コマンドの [置換後の文字列] オプションを使用して、SQLDB データベースの instancea から SQLDB データベースのバックアップを、instancea から復元しようとしています。
このシナリオでは、InstanceB 上の SQLDB の物理ファイル名が DB1_InstanceA .mdf と DB1_InstanceA に変更されます。
原因
この動作は、SQL Server 2012 で設計されています。
回避策
この問題を回避するには、[復元] コマンドの [置換後の文字列] オプションを使用しないでください。 代わりに、 WITH MOVE オプションを使用します。注: [ ムーブ ] オプションでは、物理ファイル名を変更するオプションが提供されます。
詳細情報
[ ムーブ] オプションは、[ 復元] コマンドを初めて使用するときにのみ必要です。 バックアップからデータベースを復元しようとすると、SQL Server はデータベースの回復フォークの値を比較します。 次に、これらの値が一致するかどうかに応じて、次の操作を実行します。
-
一致するものがある場合、バックアップセットではターゲットデータベースのファイル名がそのまま使用されます。
-
値が異なる場合、バックアップセットの名前を使用して、ターゲットデータベースの物理ファイル名が置き換えられます。
[移動] オプションと [復元] コマンドを一緒に使用すると、次の操作が実行されます。
-
ターゲットサーバー上に新しい回復フォークが作成されます。
-
次の復元操作では、バックアップセットの回復フォーク Id がターゲットサーバーの Id と照合されます。
-
[置換] オプションと共に使用される復元コマンドは、ターゲットサーバー上の物理名を保持します。
[復元] コマンドの詳細については、「復元 (transact-sql) 」を参照してください。