Резервный набор данных содержит копию базы данных, отличной от существующей базы данных — знакомо сообщение? Восстановить Backup одной базы данных Microsoft SQL Server в другую «в лоб» приводит к сообщению об ошибке. Нередко встречаюсь с ситуациями, когда горе админы на этом и завершают свои попытки восстановления базы. Ниже приведу пример восстановления из копии одной базы в другую.
Диагноз: Резервный набор данных содержит копию базы данных, отличной от существующей базы данных
Была сделана копия заданием или T-SQL из базы в файл.
Попытка восстановления на другом сервере или на этом же, но в другую базу приводит к сообщению об ошибке:
1 Сообщение 3154, уровень 16, состояние 4, строка 1 2 Резервный набор данных содержит копию базы данных, отличной от существующей базы данных "trade". 3 Сообщение 3013, уровень 16, состояние 1, строка 1 4 RESTORE DATABASE прервано с ошибкой.
Расстановка галок в разных комбинациях, как рекомендуют чудо админы на множестве форумов ни к чему не приводят.
Суть проблемы
Создавая Backup базы данных SQL Server сохраняет данные и о файлах и путях к ним, а также еще вагон служебной инфы.
При попытке восстановления в другую БД, естественно указанные ресурсы не обнаруживаются, и пользователь получает чудное сообщение, что база нужна другая.
Способ решения
При восстановлении нужно явно указать какие файлы данных куда сохранять.
В процессе восстановления, фактически создаются файлы со структурой соответствующей копии, но с другими именами и путями.
Все это подробно описано в доке для разработчиков Microsoft, но в многобукофф не многие хотят разбираться.
Процесс
Разберем процесс создания копии и восстановления от начала до конца. В примере будет приведен способ с T-SQL. Как аналогичное сделать с использованием пользовательского интерфейса в части восстановления – понятия не имею.
Процесс рассматриваем на примере Microsoft SQLS erver 2012, но другие версии особо от него не отличаются.
Исходную базу данных будем рассматривать trade.
База данных, в которую будем грузить будет называться tradenew.
Сам Microsoft SQL Server установлен со значениями путей по-умолчанию.
Создание резервной копии базы данных Microsoft SQL Server
Создаем запрос для формирования файла резервной копии базы данных trade.
1 BACKUP DATABASE [trade] TO DISK = N'c:\Backup\Trade\trade.bak' WITH NOFORMAT, INIT, NAME = N'trade-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 2 GO
Таким образом файл копии базы данных будет расположен в папке
N'c:\Backup\Trade\trade.bak
Получение списка файлов в файле копии
Имена файлов нам нужны для того, чтоб точно указать куда они будут сохранены при восстановлении.
Создаем и запускаем запрос:
1 RESTORE FILELISTONLY FROM DISK = N'c:\Backup\Trade\trade.bak' 2 GO
Получаем список:
trade trade_log
Восстановление базы данных
Предварительно создавать новую базу ненужно, т.е. в списке у вас ее не должно быть!
Создаем и запускаем запрос:
RESTORE DATABASE [tradenew] FROM DISK = N'c:\Backup\Trade\trade.bak' WITH RECOVERY, FILE=1, MOVE 'trade' TO 'C:\Program Files\Microsoft SQL Server\MSSQL \MSSQL\DATA\tradenew.mdf', MOVE 'trade_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL \MSSQL\DATA\tradenew_log.ldf' GO
Жмем кнопку выполнить и ожидаем.
По завершении наслаждаемся готовым результатом.
Комментариев нет:
Отправить комментарий