SQL Server восстановить резервную копию приводит к ошибке

15

У меня есть база данных в dev (SQL Server 2005 на Windows Server 2008), которую мне нужно перейти на prod (SQL Server 2000 на Windows Server 2003). Мой процесс выглядит следующим образом:

  1. Войдите в dev, откройте SQL Server Management Studio
  2. Щелкните правой кнопкой мыши на базе данных | Задачи | Резервный. Сохраните все параметры по умолчанию (полное резервное копирование и т. Д.)
  3. Переместите файл .bak локально в prod (без сетевого диска), войдите в prod, откройте SQL Server Enterprise Manager.
  4. Щелкните правой кнопкой мыши узел Базы данных | Все задачи | Восстановить базу данных.
  5. Измените Восстановить как базу данных, чтобы отобразить то же имя базы данных.
  6. Нажмите переключатель «С устройства». Нажмите «Выбрать устройства»
  7. Нажмите Восстановить из: Добавить ..., найдите файл .bak (маленький - всего 6 МБ)

Теперь я готов восстановить базу данных, поэтому я нажимаю ОК и получаю следующую ошибку:

«Семейство носителей на устройстве« E: ... bak »сформировано неправильно. SQL Server не может обработать это семейство носителей. RESTORE DATABASE прерывается ненормально».

Эта ошибка немедленная.

Я пробовал несколько разных вариантов этого - восстановление машины db to dev с другим именем базы данных и именами файлов журналов (откуда она возникла), создание пустой базы данных с тем же физическим путем к файлам и попытка ее восстановления, сделать несколько разных .bak файлов и убедиться, что они проверены перед загрузкой в ​​prod. Я точно знаю, что каталог для файлов .mdf и .ldf существует на prod, хотя сами файлы не существуют. Если, прежде чем я нажму OK для восстановления, перейдите на вкладку параметров вместо этого я получаю следующую ошибку:

Ошибка 3241: Семейство носителей на устройстве «E: ... bak» сформировано неправильно. SQL Server не может обработать это семейство носителей. ВОССТАНОВЛЕНИЕ ФИЛИСТА завершается ненормально.

У кого-нибудь есть яркие идеи?

Марио
источник
Я согласен, просто потратил день на это и потратил впустую мое время, это похоже на проблему обратной совместимости, от 2k8 R2 до 2k5 в моем случае.

Ответы:

7

Заголовки резервных копий в MSSQL2008 отличаются от заголовков в MSSQL2005, что, вероятно, является источником вашей проблемы. Попробуйте экспортировать БД вместо парадигмы резервного копирования и восстановления или настройте MSSQL2008 на своем сервере DEV.

Thunder3
источник
4

Как говорит Майк Диммик - SQL 2000 не распознает резервные копии SQL 2005 (как Word 2000 не распознает файлы DOCX 2007 года). Поэтому вам придется переносить данные в формате с более низким общим знаменателем, таком как сценарии SQL. Попробуйте Мастер публикации баз данных, который является частью SQL Server Hosting Toolkit, который генерирует один файл SQL для схемы и данных.

Дункан Смарт
источник
1
Важно проверить, установлен ли у вас SqlExpress (возможно, он установлен, даже не подозревая, что он у вас есть). Очень легко по ошибке войти в SqlExpress, а затем запаниковать, потому что он не позволит вам восстановить базу данных 2008 года. Это, вероятно, очень распространенная причина получения этой ошибки.
Симон
2

Вы можете перемещать резервные копии вперед в семействе SQL Server, то есть с 2000 на 2005 или 2008, но не назад: вы не можете восстановить резервную копию SQL Server 2005 на SQL Server 2000.

Майк Диммик
источник
1

Возможно, это проблема с правами доступа, которая препятствует созданию файла при попытке восстановления. Попробуйте создать новую базу данных с тем же именем, которое вы хотите, и затем восстановить поверх нее.

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


источник
1

По умолчанию в SQL Server 2005 есть два объекта исследования. Я полагаю, вы пытаетесь использовать объект server / sqlexpress. Попробуйте восстановить на другой.


источник
1

(С облегчением вздохнул.) Аааа, вот в чем проблема.

У меня SQL Server 2008 SP1 работает на удаленном ПК. Я сделал резервную копию его базы данных, но не смог восстановить локальную копию SQL Server 2008 из файла .bak.

Как говорит [Yini], это было связано с тем, что моя копия SQL Server 2008 открывала мой экземпляр SQL Server 2005 на моем локальном ПК, а не мой экземпляр SQL Server 2008. Genius.

И я полностью согласен с [Yini] - честно говоря, вы не можете восстановить резервную копию SQL Server 2008 в экземпляр 2005 года, но Microsoft может, по крайней мере, дать нам достойное сообщение об ошибке.

«Семейство носителей на устройстве« D: \ DatabaseBackup_21_02_2011.bak »сформировано неправильно. SQL Server не может обработать это семейство носителей».

Моя резервная копия не была сформирована неправильно. Его просто невозможно восстановить в экземпляр SQL Server 2005 , даже когда я использую SQL Server 2008 с пакетом обновления 1 (SP1).

Неужели так сложно поместить это в сообщение об ошибке ............?

Майк Гледхилл
источник
0

Несколько мыслей:

  • Приблизительно какой размер базы данных вы восстанавливаете?
    Единственная статья поддержки по этой ошибке предназначена для SQL 2000 и рассказывает о больших файлах журналов. Несмотря на то, что вы не используете SQL 2000, вначале можно попытаться уменьшить размер журналов, если они особенно велики.

  • Можете ли вы восстановить базу данных на вашем Dev-сервере (под другим именем db, в другие файлы)? Это докажет, подходит ли сам файл для SQL 2005.

  • Вы можете восстановить любые другие базы данных с этого сервера разработки на Prod?

Рори
источник
0

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

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


1) Создайте db on prod, создайте пользователя db с соответствующими правами, откройте порт на брандмауэре, который разрешает удаленный доступ.
2) Из dev в SQL Server Management Studio щелкните правой кнопкой мыши db -> tasks -> export data. При выборе пункта назначения обязательно укажите порт xxx.xxx.xxx.xxx, 1764.
3) Выберите все таблицы для переноса, нажмите следующие 100 раз, и все готово.

ВНИМАНИЕ: Это не копирует хранимые процедуры.
ВНИМАНИЕ: Это не копирует Identities для столбцов int

ОБНОВЛЕНИЕ: похоже, что вы не можете перейти с 2005 на 2000 год. Я нашел следующий текст ссылки на пост - похоже, вы можете использовать мои методы выше, но вы также хотите написать сценарий для всех объектов и затем запустить его на 2000.

Марио
источник