バックアップセットは、既存のデータベース以外のデータベースのバックアップを保持します。


485

データベースのSQL Serverバックアップファイルを復元しようとしていますが、次のようにエラーがスローされます。

バックアップセットは、既存のデータベース以外のデータベースのバックアップを保持します。

SQL Server 2008のデータベースとバックアップファイルは2005年のものです。

何が問題なのでしょうか?


95
以下の非常に投票された答えは、ナッツを割るための大ハンマーです。この問題は、[ リストア]> [オプション]ウィンドウで[ 既存のデータベースを上書きする(置換あり) ]オプションを選択していない可能性が高いです。この問題はを使用してコマンドラインから発生し、を使用して修正されました。WITH MOVEWITH REPLACE, MOVE
James McCormack

いずれかのデータベースで同じエラーが発生しましたが、SQL Serverエージェントがオフになっている場合のみです。オンにしてもエラーは発生せず、問題なく復元できます。私のBAKファイルには単一のデータベースしか含まれておらず、そのデータベース名(および論理ファイル名)はサーバー上で一意です。
開発者向けWeb

回答:


807

私もこの問題に出くわしました。

解決 :

  • 空のデータベースを作成して.bakファイルを復元しないでください。
  • SQL Server Management Studioの[データベース]ブランチを右クリックしてアクセスできる[ データベースの復元]オプションを使用し、復元するソースを提供しながらデータベース名を指定します。
  • また、他のデータベースがまだ存在する場合は、「ファイル」でファイル名を変更します。そうでない場合、「ファイル '...'は上書きできません。データベース 'yourFirstDb'によって使用されています」を取得します。

102
エラーが発生したときにSSMSが私にこのことを伝えることはとても簡単なことだろう
CJA

16
空のデータベースを作成せず、.bakファイルをそのデータベースに復元しないでください」の+1 ...はい、それで解決します。(しかし、私が同じことをしたのに、なぜこの問題が何度も発生しなかったのでしょうか。そして、他のいくつか不可解なエラーメッセージの回避策として、最初から事前作成を始めただけではありませんでしたか?:])
Reg Edit

バックアップを正常に復元するために必要なアドバイスだったので、誰かがこれを回答としてマークする必要があります。
Doreen

2
データベースの復元では、ファイルと名前を付けて復元に移動し、一意のファイル名を付けました。データファイルとログファイルの元の名前がまだ残っているためです。
Dave Mateer、2015

2
また、他のデータベースがまだ存在する場合は、「ファイル」でファイル名を変更します。そうでない場合、「ファイル '...'は上書きできません。データベース 'yourFirstDb'によって使用されています」を取得します。
Verena Haunschmid 16年

175

どちらか:

1)コマンドの使用WITH REPLACE中に使用しますRESTORE(GUI を使用している場合は、[オプション]-> [既存のデータベースを上書きします](WITH REPLACE)にあります)。

2)Delete競合している古いデータベースRESTORE。コマンドを使用して再度復元します。

詳細については、リンクを確認してください。


1
リンクからコピーしてリンクも提供.. * sigh *(スマート)
Abhijeetchindhe 2012

4
@Abhijeetchindhe haha​​ ..再利用性と礼儀.. :)
Amarnath

:)正直なソフトウェアええ、あなたは!とにかく、それがこの質問に対する最良の答えです。そして、あなたがそれを見つけるために取り出した時間に賛成票を投じてください:)
Abhijeetchindhe 2012

1
opと同じ問題があり、この答えはうまくいきました。+1
エステバン

1
このWITH REPLACEオプションも、私が必要としたソリューションでした。ありがとう!
アダム

90

最初に、同じ名前の空のデータベースを作成します。次に、復元オプションに進みます

下にオプションの左ペインで選択することを忘れないでください

  • 既存のデータベースを上書きする
  • 複製設定を保持する

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

それでおしまい


51

同じ問題に直面し、SSMS 2014を使用してこれを行うことで解決策を見つけた

-[既存のデータベースを上書きする]オプションを選択するだけ(置換あり) 

既存のデータベース>タスク>復元>データベース


34
USE [master];
GO

CREATE DATABASE db;
GO

CREATE DATABASE db2;
GO

BACKUP DATABASE db TO DISK = 'c:\temp\db.bak' WITH INIT, COMPRESSION;
GO

RESTORE DATABASE db2
  FROM DISK = 'c:\temp\db.bak'
  WITH REPLACE,
  MOVE 'db' TO 'c:\temp\db2.mdf',
  MOVE 'db_log' TO 'c:\temp\db2.ldf';

33

簡単な3つのステップ:

1-データベースを右クリック→タスク→復元→データベース

2- Deviceソースとして確認し、.bak(または圧縮された.bak)ファイルを見つけます

3-左ペインでをクリックしてoptions

  • 既存のデータベースを上書きするをチェックします。
  • 復元前にログ末尾のバックアップを取るのチェックを外します
  • チェック宛先データベースへの既存の接続を閉じます。

他のオプションは本当にオプションです(そしてもちろん重要です)!


23

そのため、.mdfそして.ldf元のファイルはDb多分で見つけたc:\programFile\....と、この情報は、バックアップに保存されます!

インストール先の別のSQL Serverに同じDBを作成するとc:\program Files (x86)\ ....、通常どおりに復元できません。.mdfおよび.ldfファイルのパスを再配置する必要があります。

したがって:

  • 新しいサーバーに空のDBを作成する

  • 空のDBを右クリック>タスク>復元>データベース>デバイスをクリックして.bakファイルを選択> DBを選択して復元

  • 左側の[ファイル]をクリックし、[すべてのファイルをフォルダに再配置]を選択します
  • 左側のサイトで[オプション]をクリックし、[上書き]をクリックします

できた!
それが役に立てば幸い!


16

今日も同様の問題に遭遇しました。上記のすべてのソリューションを試したが機能しなかった。ここに私の解決策を投稿します。

復元する前に、Tail-long Backupのチェックを外すことを忘れないでください

復元する前に、Tail-long Backupのチェックを外すことを忘れないでください

他の人にも役立つことを願っています!


これは私のために働いたものです。ありがとう!
ビルノーマン

16

スクリプトアプローチを使用していて、LDFファイルとMDFファイルに関するエラーが発生した場合は、最初に次のコマンドを使用して、バックアップファイルにバックアップセット内のファイルの論理名(およびその他の詳細)を問い合わせることができます。

-- Queries the backup file for the file list in backup set, where Type denotes 
-- type of file. Can be L,D,F or S
-- info: https://docs.microsoft.com/en-us/sql/t-sql/statements/restore-statements-filelistonly-transact-sql
RESTORE FILELISTONLY FROM DISK = 'C:\Temp\DB_backup.bak'
GO

次のような結果が得られます。

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

そして、これらの論理名をクエリで使用できます。

    -- Script assumes you want MDF and LDF files restored on separate drives. Modify for your scenario
    RESTORE DATABASE DB 
    FROM DISK='C:\Temp\DB_backup.bak'
    WITH REPLACE,
      MOVE 'DB' TO 'E:\MSSQL\Data\DB.mdf', -- "DB" is the mdf logical name from query above
      MOVE 'DB_log' TO 'F:\MSSQL\Logs\DB.ldf'; -- "DB_log" is LDF logical name from query above

詳細についてRESTORE FILELISTONLY は、SQL Serverのドキュメントをご覧ください。


私も同じ問題を抱えていました。私の場合、Dbバックアップはリモートサーバーからのものであり、最初のクエリの出力に似たDドライブに同じフォルダー構造を作成する必要がありました。次に、2番目のクエリが正しく機能し、データベースが復元されました。
rinilnath

11

また、データベース名が、復元しようとしているバックアップ内のデータベース名と一致することを確認することも重要です。一致しない場合は、同じエラーが発生します。


これは、複数のファイル/ファイルグループとパーティションテーブルがある場合に特に当てはまるようです
AlexC

9

他の作業を行う前に、バックアップが完全か差分かを確認してください。差分バックアップから新しいデータベースを作成しようとしている場合は、何をしてもエラーが発生します。


1
これは私が経験していた問題だったので、これに感謝します!!! (バックアップファイルが実際に差分バックアップであることを知りませんでした。)チェック方法は次のとおりです。「ディスクからHEADERONLY FROM RESTORE = 'C:\ myfile.bak'」結果で、BackupType 1 =完全バックアップ。BackupType 5 =差分バックアップ。
Wimpie Ratte 2017

9

system.data.sqlclient.sqlerror:バックアップセットは、既存の「Dbname」データベース以外のデータベースのバックアップを保持します

私は魂を見つけるために出会いました

  1. 同じ名前または異なるデータベース名でデータベースを作成しないでください。重要。

  2. データベースを右クリック| タスク>復元>データベース

  3. [復元元]で[デバイスから]を選択します

  4. .bakファイルを選択

  5. 以下のグリッドビューでデータベースのチェックボックスを選択してください

  6. データベースへ:「ここに新しいデータベース名を入力できます」(Ex:DemoDB)

  7. ドロップダウンリストから既存のデータベースを選択しないでください

  8. [OK]ボタンをクリックすると、新しいデータベースが作成され、.bakファイルからすべてのデータが復元されます。

あなたもこのリンクから助けを得ることができます

問題が解決することを願っています...


1
「同じ名前または異なるデータベース名でデータベースを作成しないでください。重要です。」どういう意味ですか?
sajid

6

これは、常にバージョンの非互換性が原因で発生します。解決するには、次の手順に従います。

ステップ1:任意の名前でデータベースを作成します。(私たちの場合、AdventureWorks)

ステップ2:データベースをクリックして書き込み、[タスク] >> [復元] >> [データベース…]をクリックします。

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

手順3:復元画面で、オプションの3番目の選択に移動します。次に、「既存のデータベースを上書きする(置換あり)」チェックボックスを選択します。

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

ステップ4:[OK]をクリックします。データベースは正常に復元されます。

注:データベースをREPLACEで復元すると、古いデータベースが上書きされます。


アリレザさん、ありがとうございました。GUIではなくクエリを使用しています。
プガル

5

私と同じ問題。解決策は次のとおりです:

  1. データベースを右クリックします。
  2. タスクを選択し、データベースの復元を選択します。
  3. 左側のオプションをクリックします。
  4. 最初のオプションをチェックして、既存のデータベースを上書きします(WITH REPLACE)。
  5. [全般]に移動し、ソースデータベースと宛先データベースを選択します。
  6. OKをクリックしてください

3

私はこの問題を解決しようとしていました。

私は、管理者としての実行から、ここや他の場所にある提案まで、すべてを試しました。最終的に私が解決したのは、[ファイル]プロパティタブの[ファイルの再配置]オプションをチェックすることでした。

うまくいけば、これは誰かを助けるでしょう。


3

テストのためにローカルに新しいdbを作成する必要があり、製品からバックアップがありました。最初にデータベースを作成し、このエラーを生成した新しいデータベースの上でBAKを実行しようとしました。復元画面で新しいデータベース名を取得しているときに、データベースを削除して復元しました。dbは復元時に自動的に作成されました。


3

これを非常に複雑にしている人もいます。これは非常に単純であることがわかりました。

1).bakファイルのデータベース名と同じ名前でデータベースを作成します。重要

2)データベースを右クリック| タスク>復元>データベース

3)[復元元]で[デバイスから]を選択します

4).bakファイルを選択します

5)以下のグリッドビューでデータベースのチェックボックスを選択します

6)右側の[ページの選択]で[オプション]を選択します

7)「複製設定を保持する(KEEP_REPLICATIONを使用)」というチェックボックスを選択します。

次に、[全般]ページに戻り、[OK]をクリックしてデータベースを復元します...これで完了です。


「ページを選択」はどこにありますか?
KansaiRobot

2

生成スクリプトを使用して、別の方法で作業を完了しました。同じエラーが原因でBackup-Restoreが問題の解決に役立たなかったので、それは私にとってはうまくいきました。


2

オプションで、「名前を付けて復元」ファイル名を新しいデータベースmdfおよびldfに変更します。ソースデータベースの.mdfファイルと.ldfファイルを参照しています。


1

新しいDBに復元し、ファイル名の構文を確認します。これはログファイルにあります。新しいSQLバージョンは「_log」サフィックスになります。

オプションタブで既存のデータベースフラグを上書きするかチェックします

ファビオ


0

この問題がファイルとフォルダの権限に関連していることを確認してください。


0

同じサーバー上のステージングデータベースに運用データベースを復元しようとしていました。

私のケースで機能した唯一のものは、新しい空のデータベースに復元することでした。これはうまく機能し、本番ファイルを上書きしようとしませんでした(本番バックアップファイルを既存のステージングデータベースに復元するだけの場合)。次に、古いデータベースを削除して名前を変更します-ファイルは新しい一時名を保持しますが、私の場合は問題ありません。

(または、最初にステージングデータベースを削除してから、ステージングデータベースと同じ名前で新しいデータベースに復元できます)


0

[ データベースの復元]をクリックする代わりに、[ ファイルとファイルグループの復元 ]をクリックし ます。

それは私のSQLサーバーで動作します


0

これは、システムドライブからバックアップファイルをインポートするのに役立ちました

  1. .bakファイルのデータベース名と同じ名前(できれば)でデータベースを作成します。
  2. データベースを右クリック>タスク>復元>データベース
  3. [復元元]で[デバイスから]を選択します
  4. システムからパスを選択して.bakファイルを選択します
  5. 下のリストボックスでデータベースのチェックボックスを選択します
  6. 右側の「ページの選択」の下で「オプション」を選択します
  7. 「複製設定を保持する(KEEP_REPLICATIONを使用)」というチェックボックスを選択します
  8. [既存のデータベースを上書きする(置換あり)]チェックボックスをオンにします。[全般]ページに戻り、[OK]をクリックしてデータベースを復元します...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.