Переход на новое серверное оборудование — это всегда вызов, особенно когда в IT-ландшафте предприятия соседствуют современные решения на платформе 8.3 и «ветераны» автоматизации на платформе 7.7 (например, «Производство+Услуги+Бухгалтерия» или «Торговля и Склад»).
В этой статье мы подробно разберем ситуацию, с которой сталкиваются многие системные администраторы: необходимо перенести работающую базу 1С 7.7 на сервер с операционной системой Windows Server 2012/2016/2019 и СУБД MS SQL Server 2014 или новее. Мы выясним, почему возникают ошибки транзакций, как побороть несовместимость версий и что делать, если нужно создать файловый архив базы данных, размер которой превышает десятки гигабайт.
Платформа 1С:Предприятие 7.7 была разработана во времена SQL Server 6.5 и 7.0, а её «золотой век» пришелся на SQL Server 2000. Штатные механизмы платформы опираются на технологии и синтаксис, которые компания Microsoft либо объявила устаревшими, либо полностью удалила в версиях SQL Server 2008, 2012 и 2014.
Давайте проанализируем основные препятствия, возникающие при попытке «подружить» 1С 7.7 и SQL Server 2014:
sp_dboption. Начиная с SQL Server 2012, эта процедура удалена из системы.SQL State: 25000 Native 0 («Недопустимое состояние транзакции»), упомянутая в обсуждении, возникает из-за изменений в работе ODBC-драйверов и механизма управления транзакциями в новых версиях SQL Server.Посмотрим на решения этих проблем по порядку.
Так как официальная поддержка 1С 7.7 для новых ОС и СУБД отсутствует, сообщество специалистов выработало решение, известное как использование пропатченных файлов ядра (часто упоминаются как «Секретный релиз» или проекты типа «Solution7»).
Суть метода заключается в замене или модификации файла BkEnd.dll (библиотека работы с базой данных) или использовании специальных DLL-перехватчиков. Эти модификации выполняют следующие функции:
sp_dboption) и эмулируют успешный ответ или транслируют их в современные аналоги (через ALTER DATABASE).Порядок действий для запуска: (см. также альтернативный запуск 1С:Предприятие 7.7)
Cyrillic_General_CI_AS.BkEnd.dll (например, «Solution7» или аналог), который заявлен как поддерживающий SQL Server 2014+.Если вы сталкиваетесь с ошибкой 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.
Ошибка SQL State: 25000 часто связана с тем, как драйвер ODBC обрабатывает режим неявных транзакций (IMPLICIT_TRANSACTIONS). В старых версиях 1С 7.7 управление транзакциями могло конфликтовать с логикой драйверов SQL Server Native Client версий 11.0 и выше.
Чтобы устранить эту ошибку, следуйте рекомендациям:
SQL Server 2000 Driver for ODBC, другие умеют работать с SQL Server Native Client.ODBC Driver 17 for SQL Server или Native Client 11.0.Автор темы столкнулся с проблемой: невозможно выгрузить базу SQL объемом 17 ГБ в файловый вариант (для архива) — процесс завершается ошибкой. Давайте разберем, почему это происходит и как быть.
Технические ограничения:
Файловая версия 1С 7.7 использует формат DBF (dBase). Этот формат имеет жесткое архитектурное ограничение: размер одного файла данных (.dbf) или индексного файла (.cdx) не может превышать 2 ГБ.
Если ваша база в SQL занимает 17 ГБ (файл MDF), то с высокой долей вероятности одна из таблиц (скорее всего, таблица проводок 1SENTRY или таблица движений регистра RA...) содержит данных больше, чем на 2 ГБ в формате DBF. При попытке выгрузки данных через «Администрирование — Выгрузить данные» или «Загрузить данные» платформа пытается создать эти файлы, упирается в лимит 2 ГБ и падает с ошибкой.
Кроме того, штатный механизм выгрузки (zip архив) также имеет ограничения на размер архива в старых версиях платформы. В качестве альтернативы может использоваться простая обработка-архиватор всех файлов базы.
Поскольку штатная выгрузка в файл невозможна из-за ограничений формата DBF, рассмотрим рабочие альтернативы для создания независимого архива.
Вариант 1: Использование SQL Server Developer Edition
Это самый надежный способ. Вместо попыток «впихнуть» большую базу в устаревший файловый формат, разверните для архива отдельный экземпляр SQL Server.
.bak) вашей рабочей базы средствами SQL Server.Вариант 2: Свертка базы данных
Если вам критически важно получить именно файловую (DBF) версию, единственный путь — уменьшить объем данных. Это делается через процедуру свертки базы (удаление документов прошлых лет с формированием входящих остатков на дату свертки).
1SENTRY) станут меньше 2 ГБ, вы сможете выполнить штатную выгрузку в файловый вариант. Для выборочного переноса данных пригодится выгрузка справочников TRANREF.Вариант 3: Использование спецсредств (не рекомендуется)
Существуют инструменты, позволяющие 1С 7.7 работать с DBF файлами более 2 ГБ (патчи типа dbeng32), но они крайне ненадежны и могут привести к потере данных. Для архивной копии, к которой вы планируете обращаться редко, надежность важнее всего, поэтому этот вариант мы рассматривать не будем.
В обсуждении были упомянуты инструменты, которые могут помочь при работе с большими базами и переносе данных. Рассмотрим их назначение:
1cv7s.exe). По умолчанию 32-битные приложения Windows могут адресовать только 2 ГБ оперативной памяти. Этот патч устанавливает флаг LARGE_ADDRESS_AWARE, позволяя процессу 1С использовать до 4 ГБ ОЗУ (на 64-битной ОС). Это может помочь при выгрузках/загрузках и построении «тяжелых» отчетов..dt или .dat не проходит из-за ошибок структуры метаданных или сбоев упаковки. Однако против физического ограничения размера таблицы DBF он бессилен.Запуск 1С 7.7 на Windows Server 2016 + SQL Server 2014 возможен и является стандартной практикой для сохранения доступа к архивным данным. Для этого:
.bak (бэкап SQL) и развертывание на бесплатной редакции SQL Server Developer Edition по мере необходимости.