Files
knowledge-base/decisions/2026-05-08-buzharovo-sql-native-backup.md
dttb 4e88741d08 Бужарово: бот Северный лес + переход на native MS SQL Backup
- Создан отдельный AI-ассистент @bz_sl_bot на LXC 139 (openclaw 2026.5.7) с watchdog'ом для server1c. TG-группа -1003778571121 для П.И. Кулябина.
- Канон бэкапа RitmUl — `BACKUP DATABASE` через MS SQL Server напрямую, не Effector Saver DT-выгрузка. Работает online, не требует cluster admin'а 1С (которого зарегистрировать нельзя — chicken-and-egg).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 22:33:56 +03:00

7.4 KiB
Raw Blame History

date, type, tags
date type tags
2026-05-08 decision
decision
buzharovo
1c
backup
mssql
effector-saver

2026-05-08: Бэкап Бужарово 1С — переход с Effector Saver DT на native MS SQL Backup

Контекст

Вечером 2026-05-08, после починки rmngr-loop, регулярная задача Бэкап 1Cv8 в Effector Saver Free 4.8/2 на server1c.netbird.cloud (Win 2012 R2, MSSQL 2012 SP4, 1С 8.3.27.1606) отказывалась завершаться успешно. Шесть подряд запусков (19:51 → 22:21) падали с одной и той же связкой ошибок:

  1. HRESULT=800401F3V83.ComConnector не зарегистрирован → Olег зарегистрировал через UI Effector Saver, переключился на 64-bit

  2. HRESULT=80004005 — "Администратор кластера не аутентифицирован" — у кластера 1С есть проверка авторизации, но в кластере нет ни одного admin'а, а добавить нельзя:

    • В Серверной консоли 1С: Локальный кластер → Администраторы показывает количество=0, форма "Новый администратор" заполнена, но при OK просит логин/пароль и не принимает agent-уровневый admin (создан Olегом отдельно)
    • Через COM V83.COMConnector: AuthenticateAgent('admin', '1qaz!QAZ') проходит, но RegClusterAdmin падает "пользователь не выполнил аутентификацию для требуемой операции" (chicken-and-egg: для создания первого cluster admin нужен уже cluster admin)
    • Через rac с --agent-user: cluster operations не принимают agent-уровневую аутентификацию (design choice 1С)
  3. Ошибка исключительной блокировки информационной базы — даже без cluster admin'а Effector Saver продолжает выгрузку, но не может получить эксклюзив, потому что в БД активные сессии. Особенно "вечная" сессия КулябинПИ sid=4514, начат 12:55:42 — после моего рестарта службы 1С в 19:30 и последующих SQL KILL сессий, она раз за разом возвращается (вероятно, реально открытый где-то тонкий клиент Павла Ивановича + persistent state в 1CV8Clst.lst).

Что пробовали и почему не сработало

Попытка Результат
regsvr32 x64 comcntr.dll COM зарегистрирован, переключение Effector Saver на 64-bit убрало 800401F3
Restart-Service '1C:Enterprise 8.3 Server Agent' rmngr вылечен, но session 4514 в реестре кластера persists между рестартами
KILL SQL-сессий через sa/Qwer1122334400 временно (sess=0, locks=0), но 1С rphost восстанавливает соединения за 1-2 мин и сессия 4514 reanimates
rac cluster admin register без auth "оператор не существует"
RegClusterAdmin через COM с AuthenticateAgent "пользователь не аутентифицирован для требуемой операции"
GUI Серверной консоли 1С — добавить cluster admin форма не сохраняет, требует cluster auth (которой нет)

Тупик: в кластере БД 1С нет cluster admin'а, и зарегистрировать первого нельзя ни через GUI, ни через rac, ни через COM. Возможный единственный путь — обнулить srvinfo\reg_1541\1CV8Clst.lst целиком (потеря и админов, и регистрации ИБ — нужна перерегистрация ИБ с SQL params; рискованно).

Решение: native MS SQL Backup

Effector Saver делает DT-выгрузку через 1С Конфигуратор (1cv8.exe DESIGNER /DumpIB), которая требует эксклюзив на ИБ. Это исторический способ для файловых ИБ. Для клиент-серверных ИБ на MS SQL правильный путь — BACKUP DATABASE на уровне SQL Server:

  • Online backup — снимает копию во время работы, не требует эксклюзива
  • Не зависит от 1С-кластера, cluster admin'а, активных сессий
  • С WITH COMPRESSION файл сжимается ~3:1 (3.8 GB → 1.1 GB)
  • Быстрее — у нас 2 секунды на 3.8 GB БД
  • Восстанавливается одним запросом RESTORE DATABASE

Реализация:

BACKUP DATABASE [RitmUl]
TO DISK = N'C:\backup\RitmUl_<ts>.bak'
WITH FORMAT, INIT, NAME = N'RitmUl-Full',
     SKIP, NOREWIND, NOUNLOAD, COMPRESSION, COPY_ONLY,
     STATS = 5

COPY_ONLY — чтобы наш бэкап не ломал log chain если потом настроят differential/log backups.

Запускается через WinRM python3 + System.Data.SqlClient с LXC 139 severny-les (бот). Storage: C:\backup\ на server1c (374 GB свободно).

Артефакт

  • Первый успешный бэкап 2026-05-08: C:\backup\RitmUl_2026-05-08_2225.bak (1105 MB)
  • Скрипт: /root/clawd/scripts/sql_native_backup.py на LXC 139

TODO (после возвращения Olега из Египта)

  1. Автоматизировать — добавить cron на LXC 139 severny-les: каждый день в 03:00 МСК запускать sql_native_backup.py, ротировать (хранить N дней). Алерт в Telegram-группу при сбое.
  2. Ротация и трансфер — настроить копирование .bak файлов на внешний носитель (Nextcloud / S3 / Gitea-LFS).
  3. Тест восстановления — раз в N дней автоматически развернуть бэкап в тестовую БД и проверить целостность.
  4. Effector Saver оставить как есть, не чинить (чинить cluster admin = разбирать 1CV8Clst.lst бинарник, риск убить ИБ). Можно отключить регулярную задачу Бэкап 1Cv8 в Effector Saver чтобы не плодились алерты "ошибка".
  5. TODO документировать SQL creds в projects/dttb/credentials.md (см. блок Бужарово).

Связанные