Перенос информационной базы 1С с устаревшего сервера SQL Server 2005 на современный SQL Server 2016 — задача ответственная. Она осложняется тем, что между этими версиями лежит огромная технологическая пропасть (пропущены версии 2008, 2008 R2, 2012 и 2014). В этой статье мы подробно разберем, как избежать типичных ошибок при миграции и обеспечим стабильную работу системы на новом месте.
Рассмотрим типичную ситуацию: администратор создает пустую базу данных на новом сервере SQL 2016, а затем пытается восстановить в нее бэкап, сделанный в SQL 2005. В результате возникает ошибка: «Резервный набор данных содержит копию базы данных, отличную от существующих данных».
Выясним причину: это происходит потому, что Microsoft SQL Server видит несоответствие метаданных и идентификаторов (Family GUID) созданной «пустышки» и той базы, которая находится внутри файла резервной копии. Система безопасности СУБД блокирует операцию, чтобы предотвратить случайную перезапись данных другой базы.
Самый простой и правильный путь — не создавать базу данных заранее. Разберем по шагам, как выполнить восстановление правильно через SQL Server Management Studio (SSMS):
SSMS на новом сервере 2016..bak файлу..mdf) и лога (.ldf). Важно убедиться, что каталоги существуют и у службы SQL Server есть права на запись в них. Если каталоги не созданы, их необходимо создать вручную до начала процесса.Если вы все же хотите восстановить данные поверх уже созданной пустой базы, на вкладке Options необходимо установить флаг Overwrite the existing database (WITH REPLACE). Это заставит сервер проигнорировать несоответствие идентификаторов.
Этот метод часто называют более быстрым, так как он не требует процесса создания бэкапа и его развертывания. Проанализируем этот алгоритм:
Offline или выполним команду Detach (отсоединение)..mdf и .ldf на новый сервер.SSMS нажмем правой кнопкой на Databases и выберем Attach.....mdf файлу.Важный нюанс: SQL Server 2016 способен «подцепить» файлы от версии 2005. При первом подключении произойдет автоматическая конвертация структуры файлов под новую версию. Однако помните, что после этой операции вы уже не сможете вернуть эти файлы обратно на SQL 2005 — обратной совместимости «вниз» не существует.
Если вы опасаетесь работать напрямую с SQL-инструментами, можно воспользоваться штатным механизмом 1С. Рассмотрим этот вариант:
.dt.SQL 2016..dt файл.Этот способ дольше, но он гарантирует, что структура данных будет полностью перестроена средствами платформы 1С. Это полезно, если в базе были накоплены логические ошибки на уровне СУБД.
После того как база оказалась на новом сервере, работа еще не закончена. Разберем технические моменты, без которых производительность 1С может упасть.
1. Уровень совместимости (Compatibility Level)
База из 2005 года имеет уровень 90. SQL Server 2016 поддерживает уровни от 100 до 130. При восстановлении база автоматически поднимется до 100. Чтобы база использовала все возможности оптимизатора 2016 версии, рекомендуется в свойствах базы (Options) установить Compatibility Level = SQL Server 2016 (130).
2. Обновление статистики
Статистика распределения данных, переехавшая со старого сервера, будет неактуальна для новых алгоритмов. Сразу после переезда выполним в консоли запросов:
USE [Имя_Вашей_Базы];
GO
EXEC sp_updatestats;
3. Исправление «осиротевших» пользователей (Orphaned Users)
При переносе базы пользователи внутри нее теряют связь с логинами (Logins) на самом сервере SQL, так как их внутренние идентификаторы (SID) различаются. Проанализируем ситуацию: если в 1С при попытке входа возникает ошибка авторизации, воспользуемся следующим кодом для «связывания» (для каждого пользователя):
ALTER USER [Имя_Пользователя_Базы]
WITH LOGIN = [Имя_Логина_На_Сервере];
4. Оценка стоимости запросов (Cardinality Estimator)
В SQL 2016 используется новая модель оценки запросов. Иногда для старых конфигураций 1С это приводит к замедлению. Если вы заметили проблемы с производительностью, можно вернуть старую логику оценки, не меняя уровень совместимости всей базы. Для этого в свойствах базы в разделе Database Scoped Configurations установим Legacy Cardinality Estimation в значение ON.
Мы рассмотрели основной алгоритм миграции. Помните, что перед любыми действиями необходимо убедиться, что ваша версия платформы 1С поддерживает работу с SQL Server 2016 (это версии 8.3.8 и выше). Следуя приведенным шагам по обновлению статистики и настройке уровней совместимости, вы обеспечите надежную и быструю работу вашей системы на новом оборудовании.