Перенос рабочей базы данных между серверами СУБД разных поколений — стандартная задача при модернизации инфраструктуры. Однако при попытке развернуть бэкап, созданный в MS SQL Server 2000, на более современном MS SQL Server 2008, администраторы часто сталкиваются с ошибками восстановления. Разберем основные причины сбоев и пошагово рассмотрим правильные алгоритмы миграции базы данных.
Проанализируем ключевые факторы, которые приводят к ошибкам при разворачивании базы:
.mdf и .ldf. Если на целевом сервере отсутствует нужная буква диска или каталог, процедура завершится ошибкой.8.00.760). Если исходный экземпляр работает на версиях RTM, SP1 или SP2, процедура обновления структур завершится критическим сбоем.Наиболее надежным и контролируемым методом разворачивания бэкапа является выполнение скрипта в SQL Server Management Studio (SSMS). Сначала определим логические имена файлов внутри резервной копии:
RESTORE FILELISTONLY
FROM DISK = 'C:\bu\mm.bak';
В результате выполнения запроса в колонке LogicalName мы увидим имена файлов базы данных и журнала транзакций. Теперь выполним команду восстановления, явно перенаправив файлы в актуальные каталоги нового сервера с помощью параметра WITH MOVE, а также применив WITH REPLACE для перезаписи существующей целевой базы:
RESTORE DATABASE NewDBName
FROM DISK = 'C:\bu\mm.bak'
WITH
MOVE 'OldDB' TO 'C:\Data\new_mm.mdf',
MOVE 'OldDB_Log' TO 'C:\Data\new_mm_log.ldf',
REPLACE,
STATS = 10;
Параметр STATS = 10 выводит прогресс выполнения операции с шагом в 10%, что позволяет отслеживать процесс разворачивания больших баз данных.
Если бэкап по каким-либо причинам не разворачивается, рассмотрим альтернативный вариант — прямое подключение файлов базы данных (Attach):
OFFLINE..mdf и .ldf на новый сервер.
CREATE DATABASE NewDBName
ON (FILENAME = 'C:\Data\new_mm.mdf'),
(FILENAME = 'C:\Data\new_mm_log.ldf')
FOR ATTACH;
Если исходная база SQL Server 2000 не имела установленных пакетов SP3/SP4 и обновить старый сервер невозможно, прямой перенос на SQL 2008 завершится ошибкой. В такой ситуации разберем промежуточный этап: разворачиваем бэкап на временном экземпляре MS SQL Server 2005, делаем свежую резервную копию и после этого успешно восстанавливаем её на целевом MS SQL Server 2008.
После успешного завершения команды RESTORE база переходит в рабочий режим, однако для стабильной работы платформы 1С необходимо выполнить регламентные шаги:
datetime. Обязательно выполним команду:
DBCC CHECKDB ('NewDBName') WITH DATA_PURITY;
ALTER DATABASE NewDBName SET COMPATIBILITY_LEVEL = 100;
GO
USE NewDBName;
GO
EXEC sp_updatestats;
USE NewDBName;
GO
EXEC sp_change_users_login 'Auto_Fix', 'ИмяПользователя1С';
tempdb совпадают (для русскоязычных конфигураций 1С стандартным является Cyrillic_General_CI_AS). Несовпадение Collation приведет к падению запросов с временными таблицами.Рассмотрим вопрос использования штатной выгрузки информационной базы в файл .dt средствами конфигуратора 1С. Выгрузка в .dt предназначена для переноса данных между разными типами СУБД или перехода в файловый режим. На базах объемом в десятки гигабайт штатная выгрузка и загрузка не гарантируют целостность данных, создают пиковую нагрузку на сервер и могут завершиться аварийно по нехватке памяти. Единственным надежным способом резервного копирования и миграции высоконагруженных систем 1С остается создание и восстановление бэкапов средствами самой СУБД MS SQL Server.