Как перенести базу данных 1С с SQL Server 2008 на SQL Server 2017

Системный администратор 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

Переход с устаревшей версии MS SQL Server 2008 на современную SQL Server 2017 — это ответственный процесс, который требует не только простого копирования файлов, но и тонкой настройки производительности. В этой статье мы разберем основные методы миграции, проверенные специалистами, и выясним, как избежать типичных проблем, связанных с падением скорости работы 1С после обновления.

Метод 1: Использование механизмов резервного копирования (Backup/Restore)

Рассмотрим наиболее надежный и стандартный способ — создание бэкапа на старом сервере и его восстановление на новом. Проанализируем последовательность действий:

  1. На исходном сервере SQL 2008 выполним полную резервную копию базы данных.
  2. Скопируем полученный файл .bak на новый сервер.
  3. В консоли SQL Server Management Studio (SSMS) версии 2017 выберем пункт «Restore Database».

Важно помнить, что SQL Server 2017 поддерживает восстановление баз, созданных в версии 2008. Если при попытке восстановления система «не видит» файл .mdf или .bak, проанализируем ситуацию: чаще всего это связано с отсутствием прав доступа у учетной записи, под которой запущена служба SQL Server, к папке с бэкапом. Проверьте права на чтение и запись для этой директории.

Метод 2: Отсоединение и присоединение (Detach/Attach)

Разберем альтернативный способ, который часто оказывается быстрее при работе на одной физической машине или при прямом переносе дисков. Посмотрим на алгоритм:

  1. Остановим работу всех пользователей в 1С и службу rphost сервера приложений.
  2. В консоли SQL 2008 выполним команду Detach для нужной базы данных.
  3. Скопируем файлы .mdf (данные) и .ldf (лог транзакций) в каталог данных нового сервера SQL 2017.
  4. На новом сервере нажмем правой кнопкой на «Databases» и выберем «Attach».
  5. Укажем путь к скопированному файлу .mdf.

Как показала практика обсуждений, этот метод успешно работает даже при таком большом скачке версий (с 2008 на 2017). Однако помните, что после этой операции база станет недоступна для открытия в старом SQL 2008, так как формат файлов будет обновлен.

Метод 3: Выгрузка и загрузка через файл .dt

Рассмотрим вариант средствами самой платформы 1С. Этот метод заключается в создании файла .dt. Выясним его особенности:

Основной минус этого подхода — время. Для базы объемом более 50 ГБ процесс выгрузки и последующей загрузки в новую пустую базу может занять более 12 часов. Кроме того, на время выгрузки база должна быть полностью монопольна. Если бизнес не готов к длительному простою, этот вариант использовать не рекомендуется. Однако он полезен тем, что полностью пересоздает структуру таблиц и индексов «с нуля», что иногда помогает исправить логические ошибки в данных.

Настройка уровня совместимости (Compatibility Level)

После того как мы успешно восстановили базу на SQL 2017, проанализируем важный технический нюанс. По умолчанию база сохранит уровень совместимости «100» (SQL 2008). Чтобы база начала использовать возможности нового движка, его нужно поднять до «140».

Внимание: Для старых конфигураций, таких как Управление торговлей 11.1, резкое повышение уровня совместимости может привести к замедлению запросов. Рекомендуется сначала запустить систему на уровне 100, провести тесты, а затем переключаться на 140.

Решение проблемы с оптимизатором запросов (Cardinality Estimator)

Разберем ситуацию, когда после переноса 1С начала «тормозить». В SQL Server 2014 и выше появился новый механизм оценки количества строк. Для 1С это часто становится проблемой. Чтобы вернуть старую (более стабильную для 1С) логику работы, выполним следующую команду в SQL-запросе:


ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = ON;
GO

Это заставит новый SQL 2017 использовать проверенные алгоритмы оптимизации 2008 года, что во многих случаях мгновенно возвращает привычную скорость работы 1С.

Исправление «осиротевших» пользователей (Orphaned Users)

Выясним причину, по которой пользователи 1С не могут зайти в базу после миграции. Идентификаторы (SID) пользователей в базе данных не совпадают с новыми логинами на сервере SQL. Для исправления ситуации выполним «связывание» пользователей. Воспользуемся скриптом:


USE [Имя_Вашей_Базы];
GO
-- Исправление конкретного пользователя
ALTER USER [Имя_Пользователя_БД] WITH LOGIN = [Имя_Логина_Сервера];
GO

Если пользователей много, проанализируем возможность использования системной процедуры sp_change_users_login с параметром Auto_Fix.

Обязательное обслуживание после переноса

Чтобы база данных работала максимально эффективно на новом месте, выполним три критически важных действия:

  1. Обновление статистики: Старая статистика распределения данных не подходит для нового движка. Выполним команду EXEC sp_updatestats;.
  2. Очистка процедурного кэша: Чтобы SQL Server построил новые планы выполнения запросов.
  3. Проверка целостности: Выполним DBCC CHECKDB;, чтобы убедиться, что при «перескоке» через несколько поколений SQL Server не возникло структурных повреждений.

Настройка TempDB и оперативной памяти

Посмотрим на настройки сервера. SQL Server 2017 требует грамотного распределения ресурсов:

Ограничение памяти: Если сервер 1С и SQL Server стоят на одной машине, обязательно установим параметр Maximum Server Memory. Если этого не сделать, SQL заберет всю память, и процессам rphost будет нечем «дышать», что приведет к аварийным завершениям сеансов.

TempDB: В SQL 2017 рекомендуется разделять tempdb на несколько файлов данных (обычно по количеству ядер процессора, но не более 8). Это значительно ускоряет работу 1С с временными таблицами, которые активно используются в сложных отчетах.

Обновление драйверов на сервере 1С

Проанализируем программную часть. На компьютере, где установлен сервер приложений 1С, должен быть актуальный драйвер для связи с БД. Для SQL 2017 рекомендуется использовать Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL). Старый SQL Native Client от 2008 версии может работать некорректно с новыми типами данных или вызывать ошибки соединения.

Подводя итог, можно сказать: наиболее эффективный путь — это Backup/Restore или Attach/Detach с последующей настройкой LEGACY_CARDINALITY_ESTIMATION и обязательным обновлением статистики. Это гарантирует стабильную работу 1С на современной платформе.

← На главную