Как исправить ошибки СУБД SQL Server Native Client 10.0 и настроить кластер при обновлении платформы 1С:Предприятие

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

Переход с файлового варианта работы 1С:Предприятие на клиент-серверный — это важный шаг для повышения производительности и стабильности информационной системы. Однако этот процесс нередко сопровождается непредвиденными трудностями. Ситуация, когда пользователи регулярно сталкиваются с аварийным завершением работы системы до 50–60 раз в день, парализует бизнес-процессы предприятия. Особенно остро эта проблема проявляется на стыке взаимодействия сервера приложений 1С и СУБД MS SQL Server при использовании устаревших драйверов и платформ.

В этой статье мы подробно разберем причины регулярных вылетов СУБД при работе с драйвером SQL Server Native Client 10.0 на платформе 8.3.9.2033, выясним, почему при попытке обновления платформы сервер 1С выдает ошибку «не удалось создать кластер», и пошагово решим обе технические проблемы.

Анализ причин ошибок СУБД на платформе 1С 8.3.9 (Bug 50010160)

Давайте проанализируем природу критических ошибок СУБД, возникающих у пользователей. При использовании платформы версии 8.3.9.2033 в связке с MS SQL Server часто регистрируется аппаратный сбой, известный в сообществе 1С как платформенная ошибка. В официальном багборде 1С этот недостаток зафиксирован под кодом 50010160 (а также смежные обращения CSR-12050 и CSR-12078).

Симптомы этой ошибки выглядят следующим образом. В процессе работы пользователи получают сообщение:

Ошибка СУБД: Microsoft SQL Server Native Client 10.0: Недопустимое имя объекта «#tt1» (или «#tt2») HRESULT=80040E37, native=208

Выясним причину этого поведения. Проблема кроется в механизме работы сервера приложений 1С с временными таблицами в СУБД MS SQL Server. В платформе 8.3.9 при выполнении сложных запросов (особенно содержащих обращения к виртуальным таблицам, конструкции выбора по массиву значений ГДЕ Ссылка В (&Массив...), а также при активном поиске в динамических списках документов) сервер 1С некорректно управляет временем жизни временных таблиц. В СУБД отправляется запрос на выборку данных из временной таблицы (например, #tt1), которая к этому моменту уже была уничтожена сервером приложений или закрыта в другой транзакции. СУБД возвращает код ошибки 208 («Объект не найден»), что приводит к моментальному аварийному завершению сеанса пользователя.

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

Почему новый сервер 1С не создает кластер при обновлении платформы

При попытке обновить платформу 1С (например, на версию 8.3.12.1567 или 8.3.12.1924) администраторы часто сталкиваются с новой проблемой: служба сервера приложений запускается, но кластер серверов не инициализируется, а утилита администрирования выдает ошибку о невозможности создания или подключения к кластеру. Рассмотрим подробно причины этой неисправности:

  1. Конфликт сетевых портов старой и новой службы. Если на сервере осталась запущенной старая служба сервера 1С (например, для версии 8.3.9), она продолжает удерживать стандартные порты кластера (1540 — порт агента, 1541 — порт главного менеджера кластера, 1560-1591 — диапазон рабочих процессов). Новая установленная служба не может занять эти порты и переходит в аварийный режим работы.
  2. Несовместимость файлов конфигурации кластера (srvinfo). Данные о настройках кластера, зарегистрированных базах и администраторах хранятся в специальном каталоге srvinfo (по умолчанию находящемся в C:\Program Files\1cv8\srvinfo). При переходе со старых платформ (8.3.9) на новые версии форматы конфигурационных файлов 1cv8wsrv.lst и 1CV8Clst.lst могут кардинально отличаться. Новый сервер 1С пытается прочитать старые файлы, сталкивается с ошибкой десериализации данных и отказывается создавать кластер.
  3. Ошибки регистрации утилиты администрирования (MMC-консоли). Если администратор пытается настроить новый кластер через старую консоль администрирования, зарегистрированную в операционной системе Windows для версии 8.3.9, возникнет критический сбой авторизации и отображения дерева кластера.
  4. Проблемы разрядности сервера (x86 и x64) и лицензирования. Системные администраторы иногда пытаются установить сервер 1С разрядности x64 на замену x86. Однако важно помнить, что лицензия на 32-разрядный сервер 1С физически не подходит к 64-разрядному серверу приложений. При несоответствии лицензионного ключа служба сервера не сможет запустить рабочие процессы rphost, что внешне выглядит как невозможность создания или функционирования кластера.

Пошаговое руководство по переходу на стабильную версию платформы и устранению ошибок

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

Шаг 1. Подготовка и выбор стабильной версии платформы

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

Перед началом работ обязательно выполните резервное копирование всех баз данных средствами СУБД MS SQL Server (создание файлов .bak), а также выгрузите базы в конфигураторе 1С в формате .dt.

Шаг 2. Остановка и удаление старой службы сервера 1С

Для предотвращения конфликтов сетевых портов полностью остановим и деактивируем старую службу сервера приложений:

  1. Откройте оснастку управления службами Windows (команда services.msc в строке выполнения).
  2. Найдите службу Агент сервера 1С:Предприятие 8.3 (или службу с именем 1C:Enterprise 8.3 Server Agent).
  3. Остановите службу и измените тип ее запуска на «Отключена» (Disabled).
  4. Откройте диспетчер задач и убедитесь, что в системе не осталось активных процессов ragent.exe, rmngr.exe и rphost.exe. Если они есть, завершите их принудительно.

Шаг 3. Очистка системного кэша и конфигурации кластера

Теперь проведем процедуру глубокой очистки кэша, чтобы гарантировать успешную инициализацию нового кластера:

  1. Перейдите в каталог хранения данных кластера. По умолчанию это папка C:\Program Files\1cv8\srvinfo (или C:\Program Files (x86)\1cv8\srvinfo, если использовался 32-битный сервер). Если при установке был указан альтернативный путь к каталогу данных (параметр -d в свойствах службы), перейдите по этому пути.
  2. Важно: Переименуйте папку srvinfo в srvinfo_backup. Это позволит сохранить старые настройки на случай непредвиденных обстоятельств, но при этом заставит новую платформу создать чистую, корректную структуру файлов конфигурации кластера с нуля.
  3. Очистите временные файлы (кэш) пользователей на сервере в каталогах Local AppData и AppData для пользователя, под которым запускается служба 1С (обычно это системная учетная запись USR1CV8):
    C:\Users\USR1CV8\AppData\Local\1C\1cv8
    C:\Users\USR1CV8\AppData\Roaming\1C\1cv8

Шаг 4. Установка новой платформы 1С и инициализация кластера

Выполним установку новой платформы:

  1. Запустите установщик новой версии платформы (например, 8.3.12.1924).
  2. В списке компонентов обязательно выберите «Cервер 1С:Предприятия» и «Администрирование сервера 1С:Предприятия».
  3. Укажите учетную запись пользователя для запуска службы (рекомендуется использовать существующего пользователя USR1CV8 с корректными правами на чтение и запись папок базы и исполняемых файлов).
  4. После завершения установки откройте оснастку services.msc и проверьте, запущен ли новый «Агент сервера 1С:Предприятие». В свойствах службы исполняемый путь должен указывать на каталог новой версии, например:
    "C:\Program Files\1cv8\8.3.12.1924\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"

Шаг 5. Регистрация утилиты администрирования кластера

Для корректной работы консоли MMC необходимо зарегистрировать библиотеку администрирования новой версии в операционной системе Windows. Разберем, как это сделать:

  1. Откройте командную строку (cmd) от имени Администратора.
  2. Выполните команду перехода в каталог новой платформы и зарегистрируйте библиотеку:

cd "C:\Program Files\1cv8\8.3.12.1924\bin"
regsvr32 radmin.dll

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

Оптимизация MS SQL Server для стабильной работы 1С

Для того чтобы навсегда исключить появление ошибок СУБД при работе с временными таблицами, недостаточно просто обновить платформу 1С. Крайне важно провести точечную оптимизацию настроек СУБД MS SQL Server, особенно в части работы с системной базой данных tempdb, где хранятся те самые временные таблицы #tt1 и #tt2.

1. Замена SQL Server Native Client 10.0 на Native Client 11.0

Драйвер Native Client 10.0 поставлялся со старым SQL Server 2008. Если ваш сервер СУБД работает под управлением SQL Server 2012, 2014, 2016 или более новых версий на операционной системе Windows Server 2012, обязательно установите и настройте использование драйвера SQL Server Native Client 11.0 (или более современного OLE DB Driver для SQL Server). Это существенно повысит стабильность сетевых сокетов и предотвратит таймауты соединений.

2. Настройка системной базы TempDB

Поскольку временные таблицы создаются в базе tempdb, именно она часто становится узким местом («бутылочным горлышком») производительности. Выполним ее оптимизацию:

  1. Разделите файл данных tempdb на несколько физических файлов. Рекомендуется создать количество файлов данных, равное количеству физических ядер процессора на сервере СУБД (но не более 8 файлов, если ядер больше). Все файлы данных должны иметь строго одинаковый начальный размер и одинаковый шаг авторасширения. Это позволит SQL Server использовать алгоритм Proportional Fill и параллельно записывать временные таблицы во все файлы, устраняя конкуренцию за распределение страниц (PFS и SGAM).
  2. Настройте авторасширение файлов. Задайте фиксированный начальный размер файлов (например, по 1024 МБ или 2048 МБ на файл) и установите шаг прироста в мегабайтах (например, по 256 МБ или 512 МБ), но ни в коем случае не в процентах. Это исключит задержки транзакций 1С, связанные с динамическим выделением дискового пространства.
  3. Перенесите tempdb на скоростные диски. Разместите файлы базы tempdb и ее журнала транзакций на самых производительных твердотельных накопителях (SSD или NVMe), физически отделенных от дисков с основными базами данных 1С.

3. Использование протокола Shared Memory

Если сервер приложений 1С и сервер СУБД MS SQL Server развернуты физически на одном и том же компьютере (сервере), обязательно включите протокол локального обмена данными Shared Memory в утилите SQL Server Configuration Manager. В настройках подключения базы данных в 1С в качестве имени сервера SQL укажите локальное имя:

localhost или (local)

Это позволит серверу 1С передавать данные в СУБД напрямую через оперативную память, минуя сетевой стек TCP/IP. Такой подход полностью исключает сетевые сбои связи, которые часто маскируются под ошибки Native Client.

Проведение тестирования информационной базы через DT

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

Выполним процедуру выгрузки и загрузки базы данных:

  1. Запустите Конфигуратор обновленной информационной базы.
  2. В меню «Администрирование» выберите пункт Выгрузить информационную базу... и сохраните файл с расширением .dt.
  3. После успешного завершения выгрузки создайте пустую базу данных в СУБД MS SQL.
  4. Зарегистрируйте эту новую пустую базу в кластере 1С и зайдите в нее в режиме Конфигуратора.
  5. В меню «Администрирование» выберите пункт Загрузить информационную базу... и укажите ранее выгруженный файл .dt.

Зачем это нужно? В процессе загрузки файла .dt платформа 1С с нуля создает все таблицы базы данных в MS SQL, перестраивает индексы, очищает устаревшие системные записи и оптимизирует распределение страниц данных в СУБД. Это гарантирует отсутствие накопленных ошибок в структуре таблиц и минимизирует вероятность повторного возникновения ошибок СУБД.

Выполнив указанные шаги, мы успешно избавимся от регулярных аварийных завершений работы пользователей 1С, обеспечим переход на современную и стабильную версию платформы, а также оптимизируем производительность всей серверной инфраструктуры предприятия.

← На главную