Как администратору обновить серверную базу 1С и не остановить работу офиса
Содержание
Базу 1С на сервере обновляют в четыре хода: делают копию средствами СУБД, блокируют начало сеансов и регламентные задания в кластере, применяют файл обновления .cfu в Конфигураторе (вручную или командой 1cv8 DESIGNER ... /UpdateCfg ... /UpdateDBCfg), а затем один раз запускают базу в режиме 1С:Предприятие, чтобы отработали обработчики обновления. Пока идёт обновление структуры, пользователи в базе работать не могут.
Ручной путь через Конфигуратор удобен для одной-двух баз и доработанных конфигураций. Пакетный режим из командной строки выбирают, когда баз много или обновлять нужно ночью без человека. Встроенный помощник обновления в самой программе подходит для типовых конфигураций без доработок, но на сервере у него меньше контроля над процессом.
Подготовка сервера и базы к обновлению
Обновление начинается не с Конфигуратора, а с проверки трёх вещей: что именно обновляем, хватит ли ресурсов и есть ли путь отката.
Что проверить заранее
- 🔎 Версию платформы. В файле
UpdInfo.txtили в описании релиза указана минимальная версия платформы. Номер установленной платформы на сервере должен быть не ниже требуемого. Если нет, сначала обновляют платформу на всех серверах кластера и на клиентах. - 🔗 Цепочку релизов. Файл
.cfuобновляет только с конкретных версий. Список «из каких версий» есть в том жеUpdInfo.txt. Если ваша версия туда не входит, нужны промежуточные релизы, по очереди. - 🧩 Статус поддержки. В Конфигураторе откройте
Конфигурация → Поддержка → Настройка поддержки. Если объекты сняты с поддержки или конфигурация в режиме «Изменения разрешены», обновление пойдёт через сравнение и объединение, и его надо планировать дольше. - 💾 Место на дисках. Обновление структуры пишет много в журнал транзакций СУБД и во временную базу. Запас свободного места на томе с данными и логом должен быть не меньше размера самой базы.
- ⏱ Окно работ. Реструктуризация крупных таблиц на базе в сотни гигабайт может идти часами. Окно назначают с запасом и согласуют с пользователями.
Резервная копия: какую делать
Без копии, из которой вы уже хотя бы раз восстанавливались, серверную базу
не обновляют. Выгрузка .dt для крупной базы идёт долго и сама требует монопольного режима, поэтому на сервере копию лучше делать средствами СУБД.
Для MS SQL Server:
BACKUP DATABASE [buh_prod]
TO DISK = N'D:\Backup\buh_prod_before_update.bak'
WITH COPY_ONLY, COMPRESSION, CHECKSUM, STATS = 10;
Параметр COPY_ONLY не ломает цепочку ваших регулярных бэкапов. Для PostgreSQL то же самое делает pg_dump -Fc -f buh_prod.dump buh_prod от имени владельца базы.
На тестовом стенде восстановите эту копию в отдельную базу и прогоните на ней обновление целиком. Так вы узнаете реальное время работ и увидите конфликты объединения до того, как они случатся в рабочей базе.
Каким способом обновлять: сравнение вариантов
| Способ | Когда подходит | Ограничения |
|---|---|---|
| Конфигуратор, вручную | 1–3 базы, доработанная конфигурация, нужно решать конфликты объединения | Нужен человек у экрана на всё время работ |
Пакетный режим 1cv8 DESIGNER | Много баз, типовые конфигурации, ночные работы | Конфликты объединения сам не решит |
| Помощник в программе | Типовая база без доработок, есть интернет-поддержка | Меньше контроля, ошибки видны хуже |
| Динамическое обновление | Срочная правка без изменения структуры данных | Пользователи остаются на старой версии до перезапуска, риски расхождений |
Для серверной базы с реальными пользователями основной выбор — между ручным Конфигуратором и пакетным режимом. Динамическое обновление оставьте для мелких исправлений модулей, а не для перехода на новый релиз.
Пошаговое обновление базы 1С через Конфигуратор
Шаг 1. Закройте вход в базу
Откройте консоль администрирования серверов 1С, найдите базу в разделе Информационные базы и в её свойствах включите:
- Блокировка начала сеансов включена — новые пользователи не войдут.
- Блокировка регламентных заданий включена — фоновые задания не помешают монопольному режиму.
- Сообщение о блокировке — текст, который увидит пользователь.
- Код разрешения — например
upd777. С ним вы сами войдёте в заблокированную базу.
Затем в разделе Сеансы посмотрите, кто ещё подключён.
Принудительное завершение сеансов обрывает работу пользователей: несохранённые документы пропадут. Предупредите людей заранее и завершайте сеансы только в согласованное окно.
Шаг 2. Запустите Конфигуратор с кодом разрешения
В окне запуска выберите базу и режим Конфигуратор. Чтобы пройти блокировку, в дополнительных параметрах запуска укажите /UC upd777. Без кода платформа покажет сообщение о блокировке и не пустит.
Шаг 3. Примените файл обновления
- Откройте
Конфигурация → Поддержка → Обновить конфигурацию. - Выберите «Выбор файла обновления» и укажите
1cv8.cfuиз каталога шаблонов. - Платформа проверит применимость и покажет, с какой версии на какую идёт обновление.
- Если конфигурация доработана, откроется окно сравнения. Просмотрите объекты, отмеченные как изменённые и вами, и поставщиком, и выберите режим объединения для каждого.
- Нажмите «Выполнить». Конфигурация основной базы обновится, но в базе данных пока старая структура.
Шаг 4. Обновите конфигурацию базы данных
Выполните Конфигурация → Обновить конфигурацию базы данных (клавиша F7). Платформа покажет список изменений структуры и попросит подтверждение. На этом шаге нужен монопольный доступ, и именно здесь идёт реструктуризация таблиц.
Шаг 5. Запустите обработчики обновления
Закройте Конфигуратор и войдите в базу в режиме 1С:Предприятие с тем же кодом разрешения. Типовые конфигурации на БСП увидят новую версию и запустят обработку данных. Часть её идёт сразу, часть — отложенно в фоне, уже после снятия блокировки.
Только после того как программа открылась и показала сведения о новой версии, снимайте блокировку сеансов и регламентных заданий в консоли кластера.
Обновление из командной строки в пакетном режиме
Пакетный режим делает то же самое, что шаги 2–4, без окон. Базовая команда для серверной базы:
"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER ^
/S "srv1c\buh_prod" /N "Администратор" /P "пароль" ^
/UC upd777 ^
/UpdateCfg "D:\Updates\Accounting\1cv8.cfu" ^
/UpdateDBCfg ^
/Out "D:\Logs\buh_prod_update.log" ^
/DisableStartupMessages /DisableStartupDialogs
Что здесь важно:
- 📂 Путь к
1cv8.exeдолжен вести на ту версию платформы, что установлена на сервере. Номер выше в примере — условный, подставьте свой. - 📝 Ключ
/Outпишет журнал. Без него вы не узнаете, почему пакетный запуск закончился ничем. - 🔐 Пользователь
/Nдолжен иметь административные права в базе. - 🧱
/UpdateCfgобновляет только конфигурацию на поддержке. Если в базе есть конфликтные доработки, команда завершится с ошибкой, и объединение придётся делать вручную.
После этого запустите обработчики обновления, открыв базу в режиме предприятия:
"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" ENTERPRISE ^
/S "srv1c\buh_prod" /N "Администратор" /P "пароль" ^
/UC upd777 /DisableStartupMessages ^
/C "ЗапуститьОбновлениеИнформационнойБазы;ЗавершитьРаботуСистемы"
Параметр /C с этой строкой понимают конфигурации на БСП: они выполнят обновление данных и закроются. Если конфигурация нетиповая, проверьте у её разработчика, поддерживает ли она такой запуск.
Пароль в открытом виде в .bat — плохая идея. Держите скрипт в каталоге с доступом только для сервисной учётной записи, а пароль для обновлений заведите отдельный.
Обновление в кластере серверов 1С
В кластере данные базы живут в СУБД, а не на рабочих серверах. Поэтому обновление конфигурации делается один раз на базу, а не на каждом сервере кластера.
Что отличается от одиночного сервера
- 🖥 Версия платформы. Все рабочие серверы кластера и все клиенты должны работать на одной и той же версии платформы. Обновили платформу на одном сервере — обновите на всех, иначе клиенты получат ошибку несоответствия версий.
- 🔌 Порты. Клиент обращается к агенту сервера (порт 1540), затем к менеджеру кластера (1541) и к рабочим процессам из диапазона портов, заданного в свойствах рабочего сервера. Если на время работ вы меняли сетевые правила, проверьте, что эти порты снова открыты.
- 🛑 Сеансы на всех серверах. Сеансы, фоновые задания, COM-соединения и подключения веб-сервисов могут висеть на любом рабочем сервере. Список сеансов в консоли показывает их по всему кластеру.
Блокировка базы через rac
Если консоль с графикой недоступна, блокировку ставят через сервер администрирования ras и утилиту rac:
rac cluster list
rac infobase summary list --cluster=<id_кластера>
rac infobase update --cluster=<id_кластера> --infobase=<id_базы> ^
--infobase-user="Администратор" --infobase-pwd="пароль" ^
--sessions-deny=on --scheduled-jobs-deny=on ^
--denied-message="Идёт обновление" --permission-code=upd777
rac session list --cluster=<id_кластера> --infobase=<id_базы>
Если у кластера задан администратор, добавьте к командам его логин и пароль. Точный набор ключей для вашей версии платформы смотрите в rac help infobase. После работ та же команда с --sessions-deny=off --scheduled-jobs-deny=off снимает блокировку.
Перезапуск службы агента сервера 1С завершает все сеансы во всех базах кластера, а не только в обновляемой. Делайте это только в общее окно работ и только если завершить сеансы иначе не получилось.
Ошибки при обновлении серверной базы и что с ними делать
.cfu. Найдите промежуточный релиз и обновляйтесь по цепочке, по одному файлу за раз./Out. Обычно там ошибка авторизации, неверное имя базы в /S, неверный путь к .cfu или конфликт объединения, который пакетный режим сам решить не может.Если после обновления пользователи видят старый интерфейс или странные ошибки форм, попросите их перезайти: клиент мог закешировать старые метаданные. Очистка кэша ключом /ClearCache при запуске закрывает этот вопрос на рабочем месте.
Автоматизация обновлений: скрипт и планировщик
Когда баз десятки, ручное обновление превращается в ночную смену. Его собирают в один сценарий.
Из чего состоит сценарий
- Копия базы средствами СУБД (задание SQL Agent или
pg_dumpиз планировщика). - Блокировка сеансов и регламентных заданий через
rac infobase update. - Завершение оставшихся сеансов по списку из
rac session list— только в согласованное окно. 1cv8 DESIGNER ... /UpdateCfg ... /UpdateDBCfg /Out ....- Запуск
ENTERPRISEс/C "ЗапуститьОбновлениеИнформационнойБазы;ЗавершитьРаботуСистемы". - Снятие блокировки и отправка журнала администратору.
Как запускать по расписанию
В Windows Server сценарий ставят в Планировщик заданий от отдельной сервисной учётной записи. Включите в задании запуск «независимо от входа пользователя» и ограничение по времени выполнения. Код возврата 1cv8.exe проверяйте в скрипте: при ненулевом значении блокировку не снимайте, а сразу отправляйте журнал.
if %ERRORLEVEL% NEQ 0 (
echo Обновление buh_prod завершилось с ошибкой >> D:\Logs\update_summary.log
exit /b 1
)
Автоматизируйте только типовые базы на поддержке. Доработанные конфигурации с объединением обновляйте вручную: пакетный режим на конфликте просто остановится, а утром вы найдёте заблокированную базу.
Частые вопросы
Нужно ли обновлять базу на каждом сервере кластера?
Можно ли обновить базу, пока пользователи работают?
Сколько времени займёт обновление серверной базы?
Можно ли перескочить через несколько релизов сразу?
.cfu. Если её нет, обновляйтесь по цепочке промежуточных релизов.