Ошибка 3154 при восстановлении резервной копии с помощью WITH REPLACE


16

У меня SQL 2012 с SP1 установлен на моем компьютере. Я сделал резервную копию базы данных test.bak.

У меня есть база данных с именем, test2которая является той же самой базой данных, но данные изменились.

Я хочу восстановить test.bakповерх test2базы данных.

Я всегда получаю ошибку:

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

Я старался:

  1. Я щелкнул правой кнопкой мыши на test2 -> Restore database -> From device

    Я выбрал test.bakи проверил, With Replaceно я получаю ошибку.

  2. Затем я попытался щелкнуть правой кнопкой мыши на test2 -> Restore file and filegroups

    Я выбрал test.bakи проверил, With Replaceно я получаю ошибку.

Я могу удалить свою старую базу данных и затем восстановить резервную копию с правильным именем, но когда я использовал SQL 2008, у меня не было проблем с восстановлением поверх существующей базы данных.

Кажется, что так как я использую SQL2012, я получаю эту ошибку много!

Ответы:


12

Вы должны использовать WITH REPLACEи вообще избегать использования «наведений и щелчков» в Management Studio - они негибкие и часто содержат ошибки.

Это сработало для меня:

USE [master];
GO

CREATE DATABASE test;
GO

CREATE DATABASE test2;
GO

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

RESTORE DATABASE test2
  FROM DISK = 'c:\temp\test.bak'
  WITH REPLACE,
  MOVE 'test' TO 'c:\temp\test2.mdf',
  MOVE 'test_log' TO 'c:\temp\test2.ldf';

Также вы должны быть уверены, что при резервном копировании баз данных, которые вы используете, WITH INITи / или не указывать на устройстве файл, который уже содержит резервную копию (поскольку это может быть не та база данных, которую вы сейчас создаете, особенно если вы повторно используете такие имена, как test...).


@AaronBertrand Fyi, эта функция существует. Что я обычно делаю, так это использую пользовательский интерфейс и сценарий, чтобы убедиться, что все в порядке. Там являются много ошибок, да.
USR

2

1) Используйте WITH REPLACEпри использовании RESTOREкоманды.

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

Нет проблем с версией SQL Server. Как отметил Аарон, я также могу восстановить базу данных с 2008 по 2012 год и те же версии.


2

Вы восстанавливаете не ту базу данных. Не думайте, что это «восстановление test2из резервной копии из test», думайте «восстановить мою резервную копию, testно переименуйте ее как test2». Вы можете выбрать задачу восстановления из testи поставить test2в поле «К базе данных:».

Как упоминает Аарон, изучайте сценарий, а не полагайтесь на волшебника - яснее, что и где происходит.


2

Вы все еще можете сделать это, но это требует дополнительного шага.

Откройте диалог восстановления, сделайте свой обычный выбор в соответствии с привычками 2008 года. Если исходной базой данных является DB, выберите устройство DB.bak для источника и измените имя получателя на DBTest. Затем в разделе «Выбрать страницу» (в верхнем левом углу) вы увидите «Общие / Файлы / Параметры» - выберите «Файлы». Посмотри в сетке. Вы увидите столбцы для Исходного имени файла и Восстановить как имя файла. Расширьте последнее вручную и введите новое имя (если исходное имя базы данных - DB, и вы хотите создать DBTest, измените .... \ DB.mdf на ... \ DBTest.mdf и т. Д.)

Это примет ваш файл .bak для БД в качестве источника и DBTest в качестве места назначения. Вам также может понадобиться перейти на страницу параметров и выбрать «С заменой». Мне нужно по другим причинам, поэтому я не могу проверить это без этой опции.


2

Правильный ответ, как указано, заключается в использовании WITH REPLACEопции.

Я просто хочу указать, что вы можете получить ошибку в вопросе даже при использовании WITH REPLACE, если вы попытаетесь восстановить из дифференциальной резервной копии (без полной).


Возможно, у меня не было достаточно точек, чтобы комментировать во время этого ответа, я просто хотел указать, что вы можете получить ошибку, даже если используете «С ЗАМЕНОЙ», если вы пытаетесь восстановить из дифференциальной резервной копии (без полной)
Бримштедт

0

Надеюсь, это сработает.

  1. После того, как вы установите путь для восстановления файла.
  2. Нажмите «Опции» с левой стороны.
  3. Установите флажок «Закрыть существующие подключения к целевой базе данных».
  4. Нажмите ОК. введите описание изображения здесь

-4

Пожалуйста, остановите ваш работающий сервер и затем восстановите базу данных, это поможет вам. :)

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