Как исправить ошибки индексации и запустить базу 1С после переноса с платформы 8.2 на 8.3 и SQL Server 2017?

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

Перенос крупной информационной базы, которая годами развивалась на старых версиях программного обеспечения, — это всегда серьезный вызов для системного администратора и программиста 1С. Типичная ситуация: база успешно работала на платформе 1С:Предприятие 8.2 под управлением MS SQL Server 2008, но пришло время модернизировать серверное оборудование и обновить ПО до современных версий, например, до платформы 8.3.14+ (или более свежей) и СУБД MS SQL Server 2017.

Часто при таком переходе специалисты сталкиваются с неприятным симптомом: выгрузка и загрузка файлов данных (.dt) проходят без видимых замечаний, в Конфигуратор зайти удается, но при попытке запустить систему в режиме «1С:Предприятие» программа аварийно завершает работу с неинформативной ошибкой. В этой статье мы подробно разберем причины этой проблемы, выясним, почему изменяется структура индексов, и рассмотрим пошаговый алгоритм безопасной и корректной миграции базы данных.

Почему возникают ошибки индексации при переходе с 8.2 на 8.3?

Для того чтобы понять природу сбоя, проанализируем изменения в архитектуре хранения данных СУБД, которые произошли при переходе со старых версий платформы 1С на новые:

  1. Изменение структуры индексов в регистрах сведений: На платформе 1С 8.2 кластерный индекс периодических регистров сведений строился по схеме [Разделители] + Период + [Измерения]. Начиная с платформы 8.3, логика была оптимизирована разработчиками для повышения быстродействия, и теперь кластерный индекс строится по принципу [Разделители] + [Измерения] + Период. При первом запуске базы на новой платформе СУБД пытается выполнить глобальную реструктуризацию этих таблиц.
  2. Оптимизация регистров накопления и бухгалтерии: В 1С 8.3 используются усовершенствованные механизмы хранения итогов и агрегатов. Платформа принудительно перестраивает таблицы итогов для совместимости с новыми алгоритмами запросов.
  3. Накопленные логические ошибки: За годы эксплуатации (например, за 4 года активного ведения учета производства) в базе данных неизбежно накапливаются логические нарушения. Это могут быть «битые» ссылки, незавершенные транзакции, создавшие «зависшие» записи, или дубликаты строк в уникальных индексах. Старая платформа 1С 8.2 и MS SQL Server 2008 могли игнорировать или обходить эти ошибки. Однако новая платформа 8.3 при попытке перестроить индексы натыкается на дубли и аварийно завершает процесс с системной ошибкой СУБД (например, Violation of PRIMARY KEY / UNIQUE KEY constraint).

Выгрузка базы через файл .dt скрывает эти проблемы при создании архива, но при развертывании и первом обращении к данным новая платформа пытается «на лету» преобразовать структуру таблиц, что приводит к критическому сбою.

Почему нельзя использовать перенос через файл .dt?

Многие специалисты по привычке используют механизм выгрузки и загрузки информационной базы через файлы .dt. Рассмотрим, почему в данном случае это является ошибочной методикой:

Правильный подход — использовать механизмы резервного копирования и восстановления самой СУБД (MS SQL Server Backup / Restore). Это гарантирует физическую целостность данных на момент миграции, после чего мы сможем точечно исправить проблемы совместимости непосредственно в SQL-базе.

Пошаговый алгоритм миграции базы данных на MS SQL Server 2017

Разберем детально безопасную методику переноса базы, которая позволит избежать ошибок индексации и обеспечит стабильный запуск системы.

Шаг 1. Подготовка базы на старом сервере (1С 8.2 + MS SQL 2008)

Перед тем как переносить базу, необходимо максимально очистить ее от логического «мусора» средствами старой платформы:

  1. Запустите Конфигуратор 1С 8.2 на старом сервере в монопольном режиме.
  2. Перейдите в меню Администрирование — Тестирование и исправление...
  3. Обязательно выберите следующие опции:
    • Реиндексация таблиц информационной базы;
    • Проверка логической целостности;
    • Проверка ссылочной целостности (для параметров «При наличии битых ссылок» выберите «Очищать ссылки» или «Создавать объекты» в зависимости от вашей политики восстановления данных).
  4. Выполните тестирование. Это позволит исправить базовые ошибки в индексах еще до того, как они попадут в новую среду.

Шаг 2. Создание и перенос резервной копии СУБД

Создадим бэкап базы данных средствами SQL Server Management Studio (SSMS) на старом сервере:

  1. Откройте SSMS, кликните правой кнопкой мыши по вашей базе данных и выберите Tasks (Задачи) — Back Up (Создать резервную копию).
  2. Укажите путь для сохранения файла с расширением .bak и выполните операцию.
  3. Перенесите полученный файл бэкапа на новый сервер с MS SQL Server 2017.

Шаг 3. Восстановление базы на новом сервере MS SQL 2017

На новом сервере выполним восстановление базы данных:

  1. Откройте SSMS на новом сервере SQL Server 2017.
  2. Кликните правой кнопкой мыши на ветку Databases (Базы данных) и выберите Restore Database (Восстановить базу данных).
  3. Укажите перенесенный файл .bak в качестве источника и восстановите базу под нужным именем.

Шаг 4. Обязательная настройка параметров MS SQL Server 2017 для 1С 8.3

После восстановления базы со старого SQL Server 2008 на SQL Server 2017, она наследует старые настройки совместимости, что может приводить к ошибкам и блокировкам. Нам необходимо принудительно перенастроить параметры базы данных. Для этого выполним специальный SQL-скрипт.

Выясним причину необходимости этих настроек:

Выполним следующий T-SQL запрос в среде SSMS на новом сервере:


-- Изменяем уровень совместимости базы данных до SQL Server 2017 (140)
ALTER DATABASE [Имя_Вашей_Базы] SET COMPATIBILITY_LEVEL = 140;
GO

-- Включаем режим READ_COMMITTED_SNAPSHOT (требует монопольного доступа, сбрасываем активные соединения)
ALTER DATABASE [Имя_Вашей_Базы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE [Имя_Вашей_Базы] SET READ_COMMITTED_SNAPSHOT ON;
GO
ALTER DATABASE [Имя_Вашей_Базы] SET MULTI_USER;
GO

-- Ограничиваем параллелизм выполнения запросов для базы данных (MAXDOP = 1)
ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 1;
GO

Шаг 5. Подключение и реструктуризация в новой платформе 1С 8.3

Теперь база готова к подключению к серверу 1С:Предприятия 8.3:

  1. Зарегистрируйте базу данных в кластере серверов 1С 8.3 через утилиту администрирования или непосредственно в стартовом окне запуска.
  2. Внимание! Первый запуск выполняйте строго в режиме Конфигуратора! При первом запуске Конфигуратор определит, что формат базы устарел, и выдаст запрос на конвертацию и обновление метаданных. Согласитесь с этим предложением.
  3. После успешного входа в Конфигуратор запустите процедуру реструктуризации таблиц. Перейдите в Администрирование — Тестирование и исправление..., выберите пункт Реструктуризация таблиц информационной базы и запустите выполнение.

Во время реструктуризации новая платформа 1С 8.3 последовательно перестроит физическую структуру таблиц СУБД, приведя индексы в соответствие с новыми стандартами. Если на каком-то этапе процесс прервется с ошибкой, обратитесь к журналу регистрации 1С или логам SQL Server. Там будет четко указано имя проблемной таблицы (например, _InfoRgXXXX — регистр сведений или _AccumRgXXXX — регистр накопления), в которой СУБД нашла дублирующиеся записи. Вы сможете точечно очистить эти записи через SQL-запрос и повторить реструктуризацию.

Рекомендации по выбору релиза платформы 8.3

Рассматривая проблему совместимости старых конфигураций с новыми платформами, обратите внимание на стабильность релизов:

Следуя этой методике, мы планомерно перенесем базу данных, оптимизируем настройки СУБД под стандарты 1С 8.3 и успешно запустим систему в эксплуатацию на современном и быстром оборудовании.

← На главную