Обновление 1С на MS SQL Server: порядок действий администратора
Содержание
Чтобы обновить SQL базу 1С, сделайте полную резервную копию средствами SQL Server, заблокируйте начало сеансов в консоли кластера, при необходимости поставьте новую версию сервера 1С, затем в Конфигураторе примените файл обновления .cfu и выполните «Обновить конфигурацию
базы данных». Последний шаг — первый запуск в режиме 1С:Предприятие, где отрабатывают обработчики обновления.
Частое заблуждение: «база на SQL — значит, обновляется так же, как файловая, только дольше». На деле отличий три. Копию быстрее и надёжнее снимать самим SQL Server, а не выгрузкой .dt. Пользователей выгоняют через кластер серверов
, а не по телефону. А версия платформы на сервере и на всех клиентах должна совпадать до последней цифры.
Что подготовить до начала обновления базы
Начните с инвентаризации. Пять минут на неё избавляют от ночного отката.
- 🧾 Версии. Выпишите текущий релиз конфигурации (
Справка → О программе) и версию платформы на сервере. В описании нового релиза конфигурации указан минимальный номер платформы — проверьте, что ваша версия не ниже. - 🧩 Цепочка релизов. Файл
.cfuставится только на определённые предыдущие релизы. Если база отстала на несколько версий, обновляйтесь последовательно, через промежуточные релизы. - 🛠️ Доработки. Если конфигурация снята с поддержки или изменена, обновление пойдёт через сравнение и объединение. Это отдельная работа программиста, заложите на неё время.
- 💾 Место на дисках. Реструктуризация больших таблиц раздувает журнал транзакций и
tempdb. Ориентир — свободное место не меньше размера самой базы на томе с журналом. - 🔑 Доступы. Нужны: пароль администратора кластера (если задан), логин пользователя 1С с полными правами, права
sysadminилиdb_backupoperatorв SQL Server.
Резервная копия средствами SQL Server
Для базы на сотни гигабайт выгрузка .dt идёт часами и требует монопольного режима. Нативный бэкап 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 не ломает цепочку ваших плановых бэкапов. CHECKSUM проверяет страницы при записи. Сжатие доступно не во всех редакциях SQL Server: если команда ругается на COMPRESSION, уберите этот параметр.
Сразу проверьте, что файл читается:
RESTORE VERIFYONLY
FROM DISK = N'D:\Backup\buh_prod_before_update.bak'
WITH CHECKSUM;
Дополнительно сохраните конфигурацию в файл: в Конфигураторе Конфигурация → Сохранить конфигурацию в файл. Файл .cf весит мало и выручит, если нужно вернуть только конфигурацию, а данные уже ушли вперёд.
Не начинайте обновление, пока копия не проверена. Это единственная точка возврата.
Как выгнать пользователей и закрыть вход в базу
Обновление структуры базы данных требует монопольного доступа. Пока висит хотя бы один сеанс, Конфигуратор не применит изменения.
Блокировка в консоли кластера
- Откройте «Администрирование серверов 1С Предприятия».
- Раскройте кластер → «Информационные базы» → нужная база → «Свойства».
- Включите флажок «Блокировка начала сеансов включена».
- Задайте время начала и окончания блокировки, текст сообщения и код разрешения (например,
upd777). - Отметьте «Блокировка регламентных заданий включена», чтобы фоновые обмены не захватили базу посреди обновления.
- В той же базе откройте «Сеансы» и завершите оставшиеся сеансы.
Код разрешения пропускает в базу только того, кто его знает. Для Конфигуратора он передаётся параметром /UC.
Завершение сеанса в консоли обрывает работу пользователя без сохранения. Предупредите людей заранее и выбирайте окно, когда в базе никто не проводит документы.
Блокировка средствами самой конфигурации
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть штатная блокировка: раздел Администрирование → Обслуживание, группа обновления версии программы, команда блокировки работы пользователей. Она показывает людям предупреждение за несколько минут и закрывает их сеансы аккуратнее, чем принудительное завершение.
Чем отличаются способы
| Способ | Когда подходит | Риски |
|---|---|---|
| Консоль кластера | Всегда, в том числе если база «зависла» | Резкий обрыв сеансов |
| Блокировка в конфигурации | Плановое обновление в рабочее время | Не закроет зависшие сеансы и COM-соединения |
Пакетный запуск с /C "ЗавершитьРаботуПользователей" | Ночные скрипты | Нужно не забыть снять блокировку после |
Регламентные задания, веб-сервисы и внешние соединения тоже держат сеансы. Если сеанс «воскресает» после завершения — ищите, какой сервис к базе подключается: обмен с сайтом, мобильные клиенты, интеграции.
Смена версии платформы на сервере 1С
Обновлять платформу нужно не каждый раз. Только если новый релиз конфигурации требует номер платформы выше текущего или вы сознательно переходите на свежую версию.
Порядок установки
- Скачайте дистрибутив сервера нужной разрядности (обычно 64-бит) с портала обновлений.
- Запустите установку компонентов «Сервер 1С:Предприятия» и «Администрирование сервера» в новый каталог. Новые версии ставятся рядом со старыми в
C:\Program Files\1cv8\<номер версии>\. - Остановите службу агента сервера старой версии. Это обрывает все сеансы всех баз кластера — делайте в окне обслуживания.
- Зарегистрируйте службу новой версии.
- Запустите новую службу, откройте консоль и проверьте, что кластер и список баз на месте.
- Перерегистрируйте консоль администрирования на новую версию:
radmin.dllиз каталогаbinновой версии.
Если установщик не создал службу, зарегистрируйте её вручную из каталога bin новой версии:
"C:\Program Files\1cv8\8.3.xx.xxxx\bin\ragent.exe" -instsrvc -usr ".\USR1CV8" -pwd "Пароль" -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
Каталог srvinfo (параметр -d) указывайте тот же, что у старой службы. В нём лежит реестр кластера со списком баз. Порты тоже оставьте прежними: клиенты обращаются к агенту на 1540, менеджер кластера слушает 1541, рабочие процессы берут порты из диапазона, заданного у рабочего сервера.
Консоль регистрируется так (командная строка от имени администратора):
regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\radmin.dll"
Две версии агента не могут одновременно слушать одни и те же порты. Старую службу перед запуском новой обязательно остановите, а после проверки — переведите в ручной запуск, чтобы она не стартовала после перезагрузки сервера.
Клиенты
Клиентское приложение должно иметь ту же версию, что и сервер. Поставьте новую версию платформы на рабочие места и терминальные серверы до того, как откроете базу. Если у пользователя после смены версии появляются странные ошибки интерфейса, помогает запуск с параметром /ClearCache.
Обновление конфигурации SQL базы через Конфигуратор
Платформа на месте, пользователи отключены. Дальше — сама конфигурация.
Шаг 1. Загрузка обновления
- Запустите Конфигуратор для базы. Если включена блокировка, добавьте в строку запуска
/UC upd777или введите код в окне. - Откройте
Конфигурация → Поддержка → Обновить конфигурацию. - Укажите файл
.cfuнового релиза (из каталога шаблонов или вручную). - Если конфигурация на поддержке без изменений — обновление встанет сразу. Если с доработками — откроется окно сравнения и объединения; решения по каждому изменённому объекту принимает программист.
На этом этапе меняется только основная конфигурация. База данных ещё работает со старой структурой.
Шаг 2. Обновление конфигурации базы данных
Выполните Конфигурация → Обновить конфигурацию базы данных (клавиша F7). Платформа покажет список изменений структуры и попросит подтвердить реструктуризацию.
На SQL это самый долгий и нагруженный этап. Платформа создаёт новые таблицы, переливает данные и пересоздаёт индексы. Для базы на 100–200 ГБ это может занять от десятков минут до нескольких часов — зависит от того, какие таблицы затронул релиз.
Шаг 3. Обработчики обновления
Запустите базу в режиме 1С:Предприятие под администратором. Типовая конфигурация увидит новую версию и выполнит обработчики обновления данных. Часть из них отложенные — они дорабатывают в фоне уже при работе пользователей. Ход отложенной обработки смотрите в разделе Администрирование → Обслуживание, в результатах обновления программы.
Пакетное обновление через 1cv8.exe
Ночью и для десятка баз удобнее скрипт. 1cv8.exe в режиме DESIGNER умеет всё то же, что Конфигуратор в окне.
@echo off
set V8="C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe"
set BASE=/S "srv1c\buh_prod"
set USR=/N "Администратор" /P "Пароль"
set LOG=D:\Logs\buh_update.log
rem 1. Закрыть вход и завершить сеансы (механизм БСП)
%V8% ENTERPRISE %BASE% %USR% /C "ЗавершитьРаботуПользователей" /UC upd777 /DisableStartupDialogs
rem 2. Применить обновление и обновить структуру БД
%V8% DESIGNER %BASE% %USR% /UC upd777 /UpdateCfg "D:\Updates\1Cv8.cfu" /UpdateDBCfg /Out %LOG% /DisableStartupDialogs
rem 3. Запустить обработчики обновления
%V8% ENTERPRISE %BASE% %USR% /C "ЗапуститьОбновлениеИнформационнойБазы" /UC upd777 /DisableStartupDialogs
rem 4. Открыть вход
%V8% ENTERPRISE %BASE% %USR% /C "РазрешитьРаботуПользователей" /UC upd777 /DisableStartupDialogs
Что здесь важно:
/S— сервер и имя базы в кластере, как в строке подключения./UpdateCfgзагружает.cfuтолько для конфигурации на поддержке без изменений. Доработанную конфигурацию так не обновить — сравнение и объединение требуют человека./UpdateDBCfgвыполняет реструктуризацию./Outпишет протокол. Читайте его после каждого прогона: скрипт может «успешно» завершиться с ошибкой внутри лога.- Параметры
/C— команды подсистемы стандартных подсистем, они работают в типовых конфигурациях на БСП.
Дополнительные ключи у /UpdateCfg и /UpdateDBCfg зависят от версии платформы. Полный список смотрите в документации по параметрам командной строки к вашей версии, а не копируйте из чужих скриптов.
Если вход в базу по доменной авторизации, а пользователь с паролем не заведён, создайте отдельного служебного пользователя 1С с полными правами. Хранить его пароль в bat-файле открытым текстом — плохая практика: держите скрипт в каталоге с доступом только у администраторов.
Если обновление сломалось: диагностика и откат
Модель восстановления на время обновления
Если база в модели FULL, журнал растёт на объём всех переписанных таблиц. Один из рабочих вариантов — перевести базу в SIMPLE на время реструктуризации и вернуть FULL после:
ALTER DATABASE [buh_prod] SET RECOVERY SIMPLE;
-- обновление
ALTER DATABASE [buh_prod] SET RECOVERY FULL;
BACKUP DATABASE [buh_prod] TO DISK = N'D:\Backup\buh_prod_after_update.bak' WITH CHECKSUM;
После возврата в FULL сразу снимите полный бэкап: цепочка журналов прервана, и без новой полной копии восстановление на момент времени работать не будет.
Полный откат на копию
Если база не поднимается и разбираться некогда, восстановите копию, снятую перед обновлением:
- В консоли кластера включите блокировку начала сеансов и завершите все сеансы.
- Восстановите базу:
ALTER DATABASE [buh_prod] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
RESTORE DATABASE [buh_prod]
FROM DISK = N'D:\Backup\buh_prod_before_update.bak'
WITH REPLACE, STATS = 10;
ALTER DATABASE [buh_prod] SET MULTI_USER;
- Если меняли платформу — остановите новую службу агента, запустите старую и верните старую версию на клиенты. Данные после восстановления рассчитаны на старый релиз, а не на платформу; проблема бывает, только если новый релиз требовал более новую платформу.
ROLLBACK IMMEDIATE откатывает открытые транзакции и отключает всех от базы в SQL — поэтому шаг 1 обязателен.
После успешного обновления
Реструктуризация меняет таблицы и индексы. Обновите статистику, иначе первые дни отчёты могут формироваться заметно медленнее:
USE [buh_prod];
EXEC sp_updatestats;
Лучше запустить это ночью или сразу после обновления, пока пользователи не вошли.
Частые вопросы
Можно ли обновить конфигурацию, не выгоняя пользователей?
.cfu в основную конфигурацию — да. А вот применить изменения к базе данных при реструктуризации нужно монопольно. Без реструктуризации платформа иногда предлагает динамическое обновление, но для релизов типовых конфигураций надёжнее окно обслуживания.Нужно ли обновлять SQL Server вместе с 1С?
Хватит ли выгрузки .dt вместо бэкапа SQL?
RESTORE VERIFYONLY.Сколько держать старую версию платформы на сервере?
ragent.exe -rmsrvc из каталога старой версии.