Резервный набор содержит резервную копию базы данных, отличную от существующей


485

Я пытаюсь восстановить файл резервной копии SQL Server для моей базы данных, но выдает ошибку следующим образом:

Резервный набор содержит резервную копию базы данных, отличную от существующей

Моя база данных в SQL Server 2008 и файл резервной копии в 2005 году.

В чем может быть проблема?


95
Ответ с высоким рейтингом ниже - кувалда, чтобы расколоть орех. Проблема, скорее всего, в том, что вы не выбрали опцию « Перезаписать существующую базу данных (С ЗАМЕНОЙ) » в окне « Восстановление> Параметры» . У меня была эта проблема с использованием командной строки WITH MOVE, и была исправлена ​​с помощью WITH REPLACE, MOVE.
Джеймс МакКормак

У меня та же ошибка с одной из моих баз данных, но только когда агент SQL Server выключен. Если я его включу, ошибки не будет, и я смогу восстановить без проблем. Мой файл BAK содержит только одну базу данных, и это имя базы данных (и логические имена файлов) являются уникальными на моем сервере.
разработчика

Ответы:


807

Я тоже сталкивался с этой проблемой.

Решение :

  • Не создавайте пустую базу данных и не восстанавливайте на ней .bakфайл.
  • Используйте опцию «Восстановить базу данных» , щелкнув правой кнопкой мыши ветку «Базы данных» в SQL Server Management Studio и укажите имя базы данных, указав источник для восстановления.
  • Также измените имена файлов в «Файлы», если другая база данных еще существует. В противном случае вы получите "Файл '...' не может быть перезаписан. Он используется базой данных 'yourFirstDb'".

102
Было бы так легко для SSMS сказать мне это, когда ошибка происходит
cja

16
+1 за " Не создавайте пустую базу данных и не восстанавливайте на ней файл .bak " ... да, это решает ее. (Но почему я не получал эту проблему все остальное время, когда я делал то же самое? И разве мы не начали делать это предварительно во-первых, как обходной путь для какого-то другого необъяснимого сообщения об ошибке?:])
Reg Edit

Кто-то должен пометить это как ответ, потому что это был совет, который мне нужен для успешного восстановления резервной копии.
Дорин

2
В «Восстановить базу данных» я выбрал «Файлы», «Восстановить как» и ввел уникальные имена файлов, поскольку у них все еще были оригинальные имена для файлов данных и журналов.
Дэйв Матеер

2
Также измените имена файлов в «Файлы», если другая база данных еще существует. В противном случае вы получите "Файл '...' не может быть перезаписан. Он используется базой данных 'yourFirstDb'".
Верена Haunschmid

175

Или:

1) Используйте WITH REPLACEпри использовании RESTOREкоманды (если используется графический интерфейс, она находится в разделе «Параметры» -> «Перезаписать существующую базу данных» WITH REPLACE).

2) Deleteстарая база данных, которая находится в конфликте и восстановить снова с помощью RESTOREкоманды.

Проверьте ссылку для более подробной информации.


1
скопировал ссылку и предоставил ссылку. * вздох * (умный)
Abhijeetchindhe

4
@Abhijeetchindhe haha ​​.. Повторное использование и вежливость .. :)
Амарнат

:) Честное программное обеспечение Вы! В любом случае, это лучший ответ на этот вопрос. И проголосуй за то время, которое ты потратил, чтобы найти его :)
Abhijeetchindhe

1
Была та же проблема, что и ОП, и этот ответ работает просто отлично. +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 (или zip .bak).

3- На левой панели нажмите optionsи:

  • установите флажок Перезаписать существующую базу данных.
  • снимите флажок Делать резервное копирование журнала перед восстановлением
  • установите флажок Закрыть существующее соединение с базой данных назначения.

Другие варианты действительно необязательны (и, конечно, важны)!


23

Это потому, что .mdfи .ldfфайлы из оригинала Dbбыли расположены на возможно, c:\programFile\....и эта информация сохраняется в резервной копии!

Если вы создаете одну и ту же БД на другом сервере SQL Server, на котором выполняется установка, c:\program Files (x86)\ ....вы не сможете восстановить как обычно. Вам нужно переместить путь .mdfи .ldfфайлы.

Следовательно:

  • Создайте пустую БД на новом Сервере

  • Щелкните правой кнопкой мыши на пустой Db> Задачи> Восстановить> База данных> щелкните Устройство, выберите ваши .bakфайлы> Выберите Db, чтобы восстановить в

  • щелкните «Файлы» слева> выберите «Переместить все файлы в папку»
  • нажмите Опции на левом сайте> нажмите Перезаписать

Выполнено!
Надеюсь, поможет!


16

Я столкнулся с подобной проблемой сегодня. Перепробовал все вышеперечисленные решения, но не сработало. Итак, разместив мое решение здесь.

Не забудьте снять галочку с Tail-long Backup перед восстановлением

Не забудьте снять галочку с Tail-long Backup перед восстановлением

Надеюсь, это поможет другим!


Это то, что сработало для меня. Спасибо!
Билл Норман,

16

Если вы используете подход сценария и есть ошибка относительно СОЛ и 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, которая напоминает вывод первого запроса. Затем второй запрос работал правильно и база данных была восстановлена.
ринилнат

11

Также важно убедиться, что имя вашей базы данных совпадает с именем базы данных в резервной копии, которую вы пытаетесь восстановить. Если он не совпадает, вы получите ту же ошибку.


Это особенно актуально, если у вас несколько файлов / групп файлов и секционированных таблиц
AlexC

9

Прежде чем делать что-либо еще, проверьте, является ли ваша резервная копия полной или дифференциальной. Если вы пытаетесь создать новую базу данных из дифференциальной резервной копии, независимо от того, что вы делаете, вы столкнетесь с ошибкой.


1
Это была проблема, с которой я столкнулся, так что спасибо за это !!! (Я не знал, что файл резервной копии был на самом деле дифференциальной резервной копией.). Вот как проверить: «RESTORE HEADERONLY FROM DISK = 'C: \ myfile.bak'» В результате BackupType = 1 = полная резервная копия. BackupType of 5 = Дифференциальное резервное копирование.
Wimpie Ratte

9

system.data.sqlclient.sqlerror: резервный набор содержит резервную копию базы данных, отличной от существующей базы данных «Dbname»

Я наткнулся, чтобы найти душевное равновесие

  1. Не создавайте базу данных с тем же именем или другим именем! Важно.

  2. щелкните правой кнопкой мыши базу данных | Задачи> Восстановление> База данных

  3. В разделе «Источник для восстановления» выберите «С устройства»

  4. Выберите файл .bak

  5. Установите флажок для базы данных в сетке ниже

  6. В базу данных: «Здесь вы можете ввести новое имя базы данных» (например: DemoDB)

  7. Не выбирайте существующую базу данных из DropDownlist

  8. Теперь нажмите кнопку Ok, она создаст новую базу данных и восстановит все данные из вашего файла .bak.

Вы можете получить помощь по этой ссылке даже

Надеюсь, это поможет разобраться в вашей проблеме ...


1
«Не создавайте базу данных с тем же именем или другим именем! Важно». Что вы имеете в виду?
Саджид

6

Это происходит всегда из-за несовместимости версий. выполните следующие шаги, чтобы решить:

Шаг 1: Создайте базу данных с вашим предпочтительным именем. (В нашем случае AdventureWorks)

Шаг 2: Написать нажмите на базу данных и нажмите Задачи >> Восстановление >> База данных ...

введите описание изображения здесь

Шаг 3: На экране восстановления перейдите к третьему выбору параметров. Теперь установите флажок «Перезаписать существующую базу данных (с заменой)»

введите описание изображения здесь

Шаг 4: Нажмите ОК. Следует успешно восстановить базу данных.

Примечание. При восстановлении базы данных WITH REPLACE она перезапишет старую базу данных.


Спасибо Alireza за ваши усилия. Но мы используем запрос вместо GUI.
Пугал

5

Та же проблема со мной. Решение для меня:

  1. Щелкните правой кнопкой мыши на базе данных.
  2. Выберите задачи, выберите восстановить базу данных.
  3. Нажмите опции на левой стороне.
  4. Проверьте первую опцию Overwrite существующей базы данных (WITH REPLACE).
  5. Перейдите в Общие, выберите базу данных источника и назначения
  6. Нажмите ОК, вот и все

3

Я просто пытался решить эту проблему.

Я перепробовал все, начиная с прав администратора и заканчивая предложениями, найденными здесь и в других местах; в итоге я решил проверить опцию «переместить файлы» на вкладке «Свойства файла».

Надеюсь, это поможет кому-то еще.


3

Я должен был создать новую базу данных на моем локальном компьютере для тестирования, и у меня была резервная копия с моего продукта. Сначала я создал базу данных и попытался запустить BAK поверх новой базы данных, которая выдала мне эту ошибку. Я удалил базу данных и восстановил ее при поиске нового имени базы данных на экране восстановления. БД была автоматически создана при восстановлении.


3

Некоторые из вас очень усложнили это. Я обнаружил, что это очень просто.

1) Создайте базу данных с тем же именем, что и ваше имя базы данных .bak! Важно!

2) щелкните правой кнопкой мыши базу данных | Задачи> Восстановление> База данных

3) В разделе «Источник для восстановления» выберите «С устройства»

4) Выберите файл .bak

5) Установите флажок для базы данных в сетке ниже

6) В разделе «Выберите страницу» справа выберите «Параметры»

7) Установите флажок «Сохранить настройки репликации (WITH KEEP_REPLICATION)».

Теперь вернитесь на страницу General и нажмите OK, чтобы восстановить базу данных ... Вот и все.


где это "выбрать страницу"?
KansaiRobot

2

Я выполнил работу альтернативным способом, используя сценарии Generate. Это сработало для меня, так как Backup-Restore не помог решить проблему из-за той же ошибки.


2

В разделе «Параметры» измените имя файла «Восстановить как» на новую базу данных mdf и ldf. Он ссылается на исходные файлы базы данных .mdf и .ldf.


1

Вы можете восстановить новую БД, проверить синтаксис имени файла, он будет в файле журнала, для новой версии SQL будет суффикс "_log"

объявление проверить перезаписать существующий флаг базы данных на вкладке параметров

Fabio


0

Я уверен, что эта проблема связана с разрешениями файлов и папок.


0

Я пытался восстановить производственную базу данных в промежуточную базу данных на том же сервере.

Единственное, что сработало в моем случае, - это восстановление новой пустой базы данных. Это прекрасно работало, не пытался перезаписать рабочие файлы (что было бы, если бы вы просто восстановили рабочий файл резервной копии в существующей промежуточной базе данных). Затем удалите старую базу данных и переименуйте - файлы сохранят новое временное имя, но в моем случае это нормально.

(В противном случае сначала удалите промежуточную базу данных, а затем вы сможете восстановить новую базу данных с тем же именем, что и промежуточная база данных).


0

вместо того, чтобы щелкнуть Восстановить базу данных, нажмите Восстановить файл и файловые группы.

это работает на моем сервере sql


0

Это помогло мне импортировать файл резервной копии с системного диска

  1. Создайте базу данных с тем же именем (желательно), что и имя базы данных вашего файла .bak
  2. Щелкните правой кнопкой мыши базу данных> Задачи> Восстановить> База данных
  3. В разделе «Источник для восстановления» выберите «С устройства»
  4. Выберите файл .bak, выбрав путь из системы.
  5. Установите флажок для базы данных в списке ниже
  6. Под «Выбрать страницу» справа выберите «Параметры»
  7. Установите флажок «Сохранить параметры репликации (WITH KEEP_REPLICATION)»
  8. Установите флажок для перезаписи существующей базы данных (с заменой). Теперь вернитесь на страницу General и нажмите OK, чтобы восстановить базу данных ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.