Как запустить 1С 7.7 при разделении SQL-сервера и каталога базы на разные машины

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

В практике администрирования старых систем 1С:Предприятие 7.7 часто возникает вопрос оптимизации производительности или обновления серверного парка. Одним из вариантов является схема, при которой SQL Server находится на одном физическом или виртуальном сервере, а каталог с базой данных (файлы конфигурации .md, внешние отчеты .ert и таблицы базы) — на другом. Рассмотрим подробнее, насколько жизнеспособна такая схема, какие подводные камни нас ожидают и как правильно настроить систему для стабильной работы.

Принципиальная возможность разделения ролей

Схема с разнесением исполняемых файлов/метаданных и сервера базы данных является технически допустимой и даже штатной для платформы 1С 7.7. В стародавние времена, когда аппаратные ресурсы серверов были сильно ограничены, разделение дисковой нагрузки между «файловой помойкой» и расчетным сервером SQL позволяло выиграть в производительности. Проанализируем ситуацию: платформа 1С 7.7 при запуске в режиме SQL все равно требует наличия общего сетевого каталога. В этом каталоге хранятся не только файлы метаданных 1cv7.md, но и служебные файлы блокировок, журналы регистрации и временные файлы пользователей.

Оптимизация сетевого взаимодействия

Разберем, почему при такой схеме могут возникнуть задержки. Основная проблема кроется в протоколе SMB. 1С 7.7 крайне чувствительна к скорости доступа к файлу конфигурации и другим мелким файлам в каталоге базы. Если сеть имеет высокую латентность (задержки), работа пользователей станет невыносимой. Для минимизации проблем выполним следующие шаги:

  1. Гигабитная сеть: Убедимся, что между сервером SQL и сервером с каталогом базы установлена связь не ниже 1 Гбит/с.
  2. Настройка SMB: На сервере, где расположен каталог базы, рекомендуется отключить механизмы SMB Signing и Opportunistic Locking (Oplocks). Это предотвратит ложные блокировки файлов и «вылеты» программы при кратковременных сетевых миганиях.
  3. Исключение из антивируса: Обязательно добавим расширения .md, .dbf, .cdx (если есть), .ert в исключения антивирусной проверки на обоих серверах.

Переход на современные версии SQL Server и «секретный релиз»

Рассмотрим ситуацию, когда мы хотим уйти от древнего SQL 2000 на более современные версии, такие как SQL 2008, 2012 или даже 2019. Штатно 1С 7.7 «умеет» работать только с SQL 6.5 и 2000. При попытке подключения к более новым версиям возникнет ошибка проверки версии.

Для решения этой проблемы используем так называемый «секретный релиз». Это набор патченных библиотек, в частности BkEnd.dll. Проанализируем, что именно делает этот патч: он подменяет алгоритм проверки версии SQL-сервера, заставляя 1С думать, что она работает с привычным SQL 2000. Найти данный патч можно на специализированных ресурсах, таких как Инфостарт (ищите по запросу «секретный релиз 7.7.27.7»).

Решение проблемы с кодовой страницей (OrdNoChk.res)

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

Для этого выполним простое действие: создадим в каталоге установленной программы 1С (там, где лежит 1cv7s.exe) пустой текстовый файл и переименуем его в OrdNoChk.res. Это «магический» флаг, который отключает проверку соответствия кодовых страниц и позволяет запустить базу.

Настройка ODBC и 64-битные системы

Посмотрим на особенности настройки подключения. 1С 7.7 — это 32-битное приложение. Оно использует драйвер SQL Server (SQLSRV32.DLL). На 64-битных версиях Windows Server настройка источников данных ODBC через стандартную панель управления может не сработать для 1С.

Разберем по шагам правильную настройку:

  1. Запустите 32-битную версию администратора ODBC. Она находится по пути: C:\Windows\SysWOW64\odbcad32.exe.
  2. Создайте Системный DSN, выбрав драйвер «SQL Server».
  3. Укажите имя сервера (тот, где висит SQL) и выберите способ авторизации.
  4. В самой 1С при настройке параметров базы SQL укажите имя созданного DSN.

Использование прямых запросов и компоненты 1C++

Проанализируем вопрос производительности штатных запросов 1С 7.7. Они генерируют крайне тяжелый и неоптимальный T-SQL код. Если ваша база велика, разделение серверов может усугубить ситуацию. В этом случае спасением станет внешняя компонента 1C++.

Она позволяет писать прямые SQL-запросы к таблицам базы. Посмотрим на пример инициализации объекта для работы с SQL:


// Пример инициализации прямого запроса в 1С++
Запрос = СоздатьОбъект("ODBCRecordset");
ТекстЗапроса = "
|SELECT 
|    Жур.IDDOC as [Док $Документ],
|    Жур.IDDOCDEF as Док_вид
|FROM 
|    _1SJOURN as Жур
|WHERE 
|    Жур.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~
|";
Запрос.УстановитьТекстовыйПараметр("НачДата", ВыбНачДата);
Запрос.УстановитьТекстовыйПараметр("КонДата", ВыбКонДата);
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);

Использование прямых запросов через 1C++ нивелирует практически все тормоза, связанные с «прослойкой» штатного движка 1С, и позволяет системе летать даже на распределенной инфраструктуре.

Дополнительные настройки SQL Server для стабильности

Выясним, какие настройки самого SQL-сервера помогут нам при разнесении ролей:

Подводя итог, можно сказать: схема «SQL на одном сервере, база на другом» вполне рабочая. Главное — обеспечить качественную сеть, использовать «секретный релиз» для обхода ограничений версии SQL и не забыть про OrdNoChk.res для корректной работы с кодировками.

← На главную