Как правильно перенести базу данных 1С с Microsoft SQL Server 2005 на SQL Server 2016

Системный администратор IT и автоматизация бизнеса
← На главную

Перенос информационной базы 1С с устаревшего сервера SQL Server 2005 на современный SQL Server 2016 — задача ответственная. Она осложняется тем, что между этими версиями лежит огромная технологическая пропасть (пропущены версии 2008, 2008 R2, 2012 и 2014). В этой статье мы подробно разберем, как избежать типичных ошибок при миграции и обеспечим стабильную работу системы на новом месте.

Анализ основной ошибки при восстановлении

Рассмотрим типичную ситуацию: администратор создает пустую базу данных на новом сервере SQL 2016, а затем пытается восстановить в нее бэкап, сделанный в SQL 2005. В результате возникает ошибка: «Резервный набор данных содержит копию базы данных, отличную от существующих данных».

Выясним причину: это происходит потому, что Microsoft SQL Server видит несоответствие метаданных и идентификаторов (Family GUID) созданной «пустышки» и той базы, которая находится внутри файла резервной копии. Система безопасности СУБД блокирует операцию, чтобы предотвратить случайную перезапись данных другой базы.

Способ 1: Восстановление базы «с нуля» (Рекомендуемый)

Самый простой и правильный путь — не создавать базу данных заранее. Разберем по шагам, как выполнить восстановление правильно через SQL Server Management Studio (SSMS):

  1. Запустим SSMS на новом сервере 2016.
  2. Нажмем правой кнопкой мыши на ветку Databases и выберем пункт Restore Database....
  3. В появившемся окне в разделе Source выберем пункт Device и укажем путь к вашему .bak файлу.
  4. В поле Destination (раздел Database) впишем имя новой базы данных. Его можно просто набрать руками — SQL Server сам создаст базу с этим именем в процессе восстановления.
  5. Перейдем на вкладку Files. Проверим пути к файлам данных (.mdf) и лога (.ldf). Важно убедиться, что каталоги существуют и у службы SQL Server есть права на запись в них. Если каталоги не созданы, их необходимо создать вручную до начала процесса.
  6. На вкладке Options убедимся, что НЕ стоит галочка «Tail-Log backup» (для новой базы она не нужна).
  7. Нажмем ОК и дождемся завершения процесса.

Если вы все же хотите восстановить данные поверх уже созданной пустой базы, на вкладке Options необходимо установить флаг Overwrite the existing database (WITH REPLACE). Это заставит сервер проигнорировать несоответствие идентификаторов.

Способ 2: Перенос через отсоединение и присоединение файлов (Detach/Attach)

Этот метод часто называют более быстрым, так как он не требует процесса создания бэкапа и его развертывания. Проанализируем этот алгоритм:

  1. На старом сервере (SQL 2005) переведем базу в Offline или выполним команду Detach (отсоединение).
  2. Скопируем файлы .mdf и .ldf на новый сервер.
  3. На новом сервере в SSMS нажмем правой кнопкой на Databases и выберем Attach....
  4. Укажем путь к скопированному .mdf файлу.

Важный нюанс: SQL Server 2016 способен «подцепить» файлы от версии 2005. При первом подключении произойдет автоматическая конвертация структуры файлов под новую версию. Однако помните, что после этой операции вы уже не сможете вернуть эти файлы обратно на SQL 2005 — обратной совместимости «вниз» не существует.

Способ 3: Средствами 1С:Предприятие

Если вы опасаетесь работать напрямую с SQL-инструментами, можно воспользоваться штатным механизмом 1С. Рассмотрим этот вариант:

  1. В старой базе запустим Конфигуратор.
  2. Выберем меню Администрирование — Выгрузить информационную базу.... Получим файл .dt.
  3. На новом сервере создадим пустую базу в консоли администрирования 1С, указав параметры подключения к новому SQL 2016.
  4. Запустим Конфигуратор новой (пустой) базы.
  5. Выберем Администрирование — Загрузить информационную базу... и выберем наш .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 и выше). Следуя приведенным шагам по обновлению статистики и настройке уровней совместимости, вы обеспечите надежную и быструю работу вашей системы на новом оборудовании.

← На главную