При работе в системе 1С:Предприятие пользователи могут столкнуться с критической ошибкой, сопровождающейся текстом: «Соединение с сервером баз данных непригодно для использования после разрыва соединения администратором и будет переустановлено». Техническая расшифровка от SQL Server при этом гласит: The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION. Это состояние крайне неприятно тем, что оно приводит к аварийному завершению работы программы и часто повторяется регулярно, несмотря на временную помощь от очистки кэша или перезагрузки компьютера.
Проанализируем ситуацию: данная ошибка означает, что в момент, когда 1С пытается зафиксировать транзакцию (выполнить команду COMMIT), физическая связь с SQL-сервером уже разорвана. Сервер базы данных «забыл» о начатой транзакции из-за обрыва сессии, и когда запрос на фиксацию все же доходит (или 1С пытается его отправить), SQL выдает ошибку несоответствия. Выясним основные причины этого явления и разберем по шагам методы решения.
Как показывает практика и обсуждения системных администраторов, наиболее частой причиной «разрыва соединения администратором» является работа сетевых фильтров. Современные файрволлы используют технологию Stateful Packet Inspection (SPI) или глубокий анализ пакетов (DPI). Если транзакция в 1С длится долго (например, при выполнении фонового задания ДлительныеОперации.ВыполнитьСКонтекстомКлиента), сетевой экран может посчитать такое соединение «зависшим» или неактивным и принудительно закрыть TCP-сессию.
Рассмотрим порядок действий для исключения этой проблемы:
1433 и 1434) в исключения не только по протоколу, но и исключим их из механизмов проверки содержимого пакетов (DPI).Ошибки соединения часто возникают из-за нестабильности разрешения имен NetBIOS или коротких имен серверов. Рассмотрим ситуацию, когда в параметрах подключения 1С указано просто имя сервера (например, SRV-SQL). Если в сети происходят кратковременные сбои DNS или суффиксов домена, SQL Server может расценить сессию как небезопасную или потерять её.
Проанализируем настройки подключения:
SRV-SQL.company.local) или статический IP-адрес сервера БД.Современные сетевые карты пытаются «помочь» процессору, забирая на себя часть функций по обработке пакетов. Однако механизмы TCP Chimney Offload и RSS часто работают некорректно под высокой нагрузкой 1С, что приводит к непредсказуемым разрывам. Разберем, как отключить эти функции для стабилизации связи.
Запустим командную строку от имени администратора на обоих серверах и выполним следующие команды:
netsh int tcp set global chimney=disabled
netsh int tcp set global rss=disabled
netsh int tcp set global netdma=disabled
netsh int tcp set global autotuninglevel=disabled
После внесения изменений рекомендуется перезагрузить серверы, чтобы сетевой стек начал работать в классическом режиме без аппаратного ускорения, которое часто является виновником ошибки HRESULT=80004005.
Выясним причину кратковременных «замираний» сервера. На виртуальных машинах или серверах с настройками по умолчанию может быть включен режим энергосбережения. Если сетевой адаптер «засыпает» на долю секунды, SQL Server мгновенно обрывает активную транзакцию.
Существуют известные баги определенных версий платформы 1С (например, в релизах 8.3.22.1704, 8.3.21.1622 и др.), где 32-разрядные рабочие процессы могли аварийно завершаться при работе с транзакциями. Посмотрим на рекомендации вендора:
Агент сервера 1С:Предприятия. Это временно очистит зависшие сессии и восстановит работоспособность.Чтобы промежуточное оборудование (коммутаторы, роутеры) не закрывало «молчаливые» соединения, когда 1С ждет ответа от SQL, настроим параметры опроса активности в реестре Windows. Рассмотрим создание параметров в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters:
KeepAliveTime — установим значение 300000 (5 минут в миллисекундах).KeepAliveInterval — установим значение 1000 (1 секунда).Это заставит операционную систему чаще проверять целостность соединения, не позволяя сетевому оборудованию обрывать сессию по таймауту простоя.
Подводя итог, отметим: ошибка The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION — это почти всегда сигнал о проблемах в сетевой инфраструктуре или настройках ОС, а не в самом коде 1С. Последовательное выполнение описанных шагов — от настройки файрволла до оптимизации сетевых карт — позволяет полностью избавиться от данной проблемы.