Как запустить 1С 7.7 на SQL Server 2014 и сделать архив большой базы данных?

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

Переход на новое серверное оборудование — это всегда вызов, особенно когда в IT-ландшафте предприятия соседствуют современные решения на платформе 8.3 и «ветераны» автоматизации на платформе 7.7 (например, «Производство+Услуги+Бухгалтерия» или «Торговля и Склад»).

В этой статье мы подробно разберем ситуацию, с которой сталкиваются многие системные администраторы: необходимо перенести работающую базу 1С 7.7 на сервер с операционной системой Windows Server 2012/2016/2019 и СУБД MS SQL Server 2014 или новее. Мы выясним, почему возникают ошибки транзакций, как побороть несовместимость версий и что делать, если нужно создать файловый архив базы данных, размер которой превышает десятки гигабайт.

Суть проблемы совместимости 1С 7.7 и современных SQL Server

Платформа 1С:Предприятие 7.7 была разработана во времена SQL Server 6.5 и 7.0, а её «золотой век» пришелся на SQL Server 2000. Штатные механизмы платформы опираются на технологии и синтаксис, которые компания Microsoft либо объявила устаревшими, либо полностью удалила в версиях SQL Server 2008, 2012 и 2014.

Давайте проанализируем основные препятствия, возникающие при попытке «подружить» 1С 7.7 и SQL Server 2014:

  1. Отсутствие системных процедур. При запуске 1С 7.7 проверяет параметры базы данных, используя процедуру sp_dboption. Начиная с SQL Server 2012, эта процедура удалена из системы.
  2. Уровень совместимости (Compatibility Level). 1С 7.7 «хочет» видеть уровень совместимости базы данных 80 (SQL Server 2000). SQL Server 2014 поддерживает минимальный уровень 100 (SQL Server 2008).
  3. Ошибки транзакций. Ошибка SQL State: 25000 Native 0 («Недопустимое состояние транзакции»), упомянутая в обсуждении, возникает из-за изменений в работе ODBC-драйверов и механизма управления транзакциями в новых версиях SQL Server.

Посмотрим на решения этих проблем по порядку.

Решение 1: Адаптация платформы под новый SQL Server

Так как официальная поддержка 1С 7.7 для новых ОС и СУБД отсутствует, сообщество специалистов выработало решение, известное как использование пропатченных файлов ядра (часто упоминаются как «Секретный релиз» или проекты типа «Solution7»).

Суть метода заключается в замене или модификации файла BkEnd.dll (библиотека работы с базой данных) или использовании специальных DLL-перехватчиков. Эти модификации выполняют следующие функции:

Порядок действий для запуска: (см. также альтернативный запуск 1С:Предприятие 7.7)

  1. Установите SQL Server 2014. При установке важно выбрать правильную кодировку (Collation). Для 1С 7.7 стандартом является Cyrillic_General_CI_AS.
  2. Создайте пустую базу данных в SQL Server.
  3. Найдите и примените специализированный патч для BkEnd.dll (например, «Solution7» или аналог), который заявлен как поддерживающий SQL Server 2014+.
  4. В конфигураторе 1С пропишите параметры подключения к SQL Server.

Если вы сталкиваетесь с ошибкой sp_dboption даже после применения патчей, можно попробовать создать эту процедуру вручную в системной базе master. Рассмотрим пример кода для создания такой «заглушки»:


USE master;
GO
IF OBJECT_ID('sp_dboption', 'P') IS NOT NULL
    DROP PROCEDURE sp_dboption;
GO
CREATE PROCEDURE sp_dboption
    @dbname sysname = NULL,
    @optname varchar(35) = NULL,
    @optvalue varchar(10) = NULL
AS
BEGIN
    SET NOCOUNT ON;
    -- Эмуляция успешного выполнения
    RETURN 0;
END;
GO

Однако, использование специализированных патчей (Solution7) предпочтительнее, так как они решают проблему комплексно, включая ошибку транзакции SQL State: 25000.

Решение 2: Исправление ошибки "Недопустимое состояние транзакции"

Ошибка SQL State: 25000 часто связана с тем, как драйвер ODBC обрабатывает режим неявных транзакций (IMPLICIT_TRANSACTIONS). В старых версиях 1С 7.7 управление транзакциями могло конфликтовать с логикой драйверов SQL Server Native Client версий 11.0 и выше.

Чтобы устранить эту ошибку, следуйте рекомендациям:

  1. Убедитесь, что используемый вами патч (релиз платформы) поддерживает работу именно с тем драйвером ODBC, который установлен в системе. Некоторые патчи требуют наличия старого драйвера SQL Server 2000 Driver for ODBC, другие умеют работать с SQL Server Native Client.
  2. В современных реалиях (Windows Server 2016/2019) рекомендуется использовать патчи, которые умеют работать с драйвером ODBC Driver 17 for SQL Server или Native Client 11.0.
  3. Если ошибка сохраняется, проверьте настройки совместимости базы данных в Management Studio. Хотя 7.7 требует уровень 80, современные патчи позволяют работать на уровне 100, 110 или 120. Попробуйте понизить уровень совместимости до минимально возможного для вашей версии SQL Server (для 2014 это уровень 100 — SQL 2008).

Проблема архивации большой базы (Выгрузка в DBF)

Автор темы столкнулся с проблемой: невозможно выгрузить базу SQL объемом 17 ГБ в файловый вариант (для архива) — процесс завершается ошибкой. Давайте разберем, почему это происходит и как быть.

Технические ограничения:

Файловая версия 1С 7.7 использует формат DBF (dBase). Этот формат имеет жесткое архитектурное ограничение: размер одного файла данных (.dbf) или индексного файла (.cdx) не может превышать 2 ГБ.

Если ваша база в SQL занимает 17 ГБ (файл MDF), то с высокой долей вероятности одна из таблиц (скорее всего, таблица проводок 1SENTRY или таблица движений регистра RA...) содержит данных больше, чем на 2 ГБ в формате DBF. При попытке выгрузки данных через «Администрирование — Выгрузить данные» или «Загрузить данные» платформа пытается создать эти файлы, упирается в лимит 2 ГБ и падает с ошибкой.

Кроме того, штатный механизм выгрузки (zip архив) также имеет ограничения на размер архива в старых версиях платформы. В качестве альтернативы может использоваться простая обработка-архиватор всех файлов базы.

Как создать архив большой базы 7.7?

Поскольку штатная выгрузка в файл невозможна из-за ограничений формата DBF, рассмотрим рабочие альтернативы для создания независимого архива.

Вариант 1: Использование SQL Server Developer Edition

Это самый надежный способ. Вместо попыток «впихнуть» большую базу в устаревший файловый формат, разверните для архива отдельный экземпляр SQL Server.

  1. Установите бесплатную редакцию SQL Server Developer Edition (она обладает полным функционалом Enterprise версии, но лицензионно ограничена использованием только для разработки и тестирования — хранение «холодного» архива вполне укладывается в эту концепцию, если база не используется для коммерческой деятельности).
  2. Сделайте бэкап (.bak) вашей рабочей базы средствами SQL Server.
  3. Разверните этот бэкап на архивном сервере или виртуалке.
  4. Для доступа к этой базе используйте ту же пропатченную платформу 1С 7.7.

Вариант 2: Свертка базы данных

Если вам критически важно получить именно файловую (DBF) версию, единственный путь — уменьшить объем данных. Это делается через процедуру свертки базы (удаление документов прошлых лет с формированием входящих остатков на дату свертки).

Вариант 3: Использование спецсредств (не рекомендуется)

Существуют инструменты, позволяющие 1С 7.7 работать с DBF файлами более 2 ГБ (патчи типа dbeng32), но они крайне ненадежны и могут привести к потере данных. Для архивной копии, к которой вы планируете обращаться редко, надежность важнее всего, поэтому этот вариант мы рассматривать не будем.

Дополнительные полезные инструменты

В обсуждении были упомянуты инструменты, которые могут помочь при работе с большими базами и переносе данных. Рассмотрим их назначение:

  1. 4Gb Patch NTCore. Это утилита для патчинга исполняемого файла (1cv7s.exe). По умолчанию 32-битные приложения Windows могут адресовать только 2 ГБ оперативной памяти. Этот патч устанавливает флаг LARGE_ADDRESS_AWARE, позволяя процессу 1С использовать до 4 ГБ ОЗУ (на 64-битной ОС). Это может помочь при выгрузках/загрузках и построении «тяжелых» отчетов.
  2. ConfigSpy (от АЛьФ). Инструмент, который может помочь, если стандартная выгрузка .dt или .dat не проходит из-за ошибок структуры метаданных или сбоев упаковки. Однако против физического ограничения размера таблицы DBF он бессилен.

Итог

Запуск 1С 7.7 на Windows Server 2016 + SQL Server 2014 возможен и является стандартной практикой для сохранения доступа к архивным данным. Для этого:

  1. Используйте качественный патч ядра (Solution7 или аналоги), поддерживающий SQL Server 2014/2016/2019.
  2. Не пытайтесь выгрузить базу объемом 17 ГБ в файловый режим (DBF) — это технически невозможно без свертки.
  3. Лучший способ хранения архива такой базы — формат .bak (бэкап SQL) и развертывание на бесплатной редакции SQL Server Developer Edition по мере необходимости.
← На главную