web-dev-qa-db-ja.com

SQL Serverでデータベースを復元するときにmdfファイルを上書きできない

データベースAを取得しました。データが含まれています。 AのバックアップをA.bakファイルとして作成しました。次に、新しい空のデータベースBを作成します。次に、A.bakからBを復元しようとします。しかし、SQLサーバーは次のエラーを教えてくれます。

ファイル「C:\ SQL Directory\DATA\A.mdf」は上書きできません。データベース「A」で使用されています。

しかし、SQL ServerからAを削除すると、元に戻すことができます。

SQLがseperateバックアップファイルからの復元中にオリジナルデータベースファイルに書き込む必要がある理由がわかりません。

ありがとう〜

22
smwikipedia

データベースを復元すると、SQL Serverはデフォルトですべてのデータとログファイルを元の場所に復元しようとします。これらの元の場所はまだ元のデータベース( "A")で使用されているため、復元は失敗します。データベース内のすべてのファイルの新しい場所を指定するには、WITH MOVE句を使用する必要があります。

RESTORE DATABASE B FROM DISK = 'A.bak'
WITH MOVE 'DataFileLogicalName' TO 'C:\SQL Directory\DATA\B.mdf',
MOVE 'LogFileLogicalName' TO 'C:\SQL Directory\DATA\B.ldf',
REPLACE --Needed if database B already exists

とにかくそのようなもの。必要に応じて、RESTORE FILELISTONLY FROM DISK ...を使用して、バックアップ内の論理ファイル名を確認します。

20
db2

WITH MOVE/MOVET-SQLの正しいソリューションです。

ちなみに、GUIを使用する場合は、Filesに移動して名前を変更できます。

  • a.MDF
  • a.NDF
  • a.LDF

  • b.MDF
  • b.NDF
  • b.LDF

enter image description here

12

誰かがすでにOptionsページを使用してOverwrite the existing database (WITH REPLACE)オプションをアクティブにした後、Management StudioのGUIでソリューションを検索した場合:

Restore As列をクリックして、*.mdfファイルと*.ldfファイルのファイル名を変更するだけです。

1
jan

バックアップを復元するときに、復元するデータファイルを指定できます。

herehere を見てください。 「データベースファイルの保存方法」オプションと「既存のデータベースを上書きする」フラグを使用できます。

0
demas

TSQLコマンドで、または選択したチェックボックスとして、REPLACEオプションを使用していますか?または、ファイルの名前を変更して、データベースを別の名前で呼び出すこともできます。

また、使用中のデータベースを復元するのが少し難しい場合もあります。データベースを使用しているプロセスを強制終了する必要があります。 OR最初にデータベースを削除/削除し、接続を閉じます(これがおそらく最も簡単です)。 OR上書きしたいデータベースを、制限付きユーザーモードのようなものに設定し、ロールバックを即時に実行して、DBAだけが使用できるようにしてください。 OR SQL Serverを停止して再起動することもできます-うまくいけば、だれか/何かがそのデータベースを使用する前に、復元をローリングできます。

PSは念のため、上書きしようとしているデータベースのバックアップを取ります。

0
Peter Schofield