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


21

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

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

しかし、SQL ServerからAを削除すると、問題は解決します。

SQLはへの書き込みに必要とする理由私は理解していないから復元中のデータベースファイルの別々のバックアップファイル?

ありがとう〜

回答:


19

データベースを復元する場合、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 ...を使用して、バックアップ内の論理ファイル名を確認します。


11

WITH MOVE/ MOVEは、の正しいソリューションですT-SQL

ところで、GUIを使用したい場合は、 ファイル]にて名前を変更。

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

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

ここに画像の説明を入力してください


1
また、「一般」タブで宛先データベース名を変更すると、GUIはそれに応じて「名前を付けて復元」を自動的に更新します。
Wouter

0

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

ここここをください。[データベースファイルを次の名前で復元する]オプションと[既存のデータベースを上書きする]フラグを使用できます。


0

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

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

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


0

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.