Как обновить клиент-серверную базу 1С на MS SQL Server без потери данных
Содержание
Обновление 1С на SQL-сервере идёт в четыре шага: полная копия базы средствами MS SQL Server, запрет новых сеансов в консоли кластера, применение файла .cfu в Конфигураторе с обновлением конфигурации базы данных, затем первый запуск в режиме «Предприятие», где программа дообрабатывает данные. Бухгалтерия при этом не работает
от 15 минут до нескольких часов: всё зависит от размера базы и от того, меняется ли структура больших таблиц.
Типичная ситуация: вечером пятницы админ ставит свежий релиз БП 3.0 на базу в 80 ГБ, а через час журнал транзакций съедает весь диск и реструктуризация падает. На файловой базе такого не бывает, на клиент-серверной — сплошь и рядом. Ниже процедура для платформы 8.3 и Windows Server 2016 и новее, со всем, что относится именно к связке 1С + MS SQL.
1. Подготовка к обновлению базы 1С на MS SQL: копия и проверка совместимости
Резервная копия средствами SQL, а не только .dt
Выгрузка .dt для базы в десятки гигабайт идёт долго и требует монопольного режима. Бэкап SQL Server делается на ходу и восстанавливается в разы быстрее. Делайте его прямо перед обновлением, уже после того, как пользователи вышли:
BACKUP DATABASE [buh]
TO DISK = N'D:\Backup\buh_before_update.bak'
WITH COPY_ONLY, CHECKSUM, COMPRESSION, STATS = 10;
- 📦
COPY_ONLYне ломает цепочку регулярных бэкапов, которую ведёт план обслуживания. - ✅
CHECKSUMпроверяет страницы при записи: битая копия выявится сразу, а не в момент отката. - 🗜
COMPRESSIONв редакции Express недоступен — уберите параметр, если бэкап ругается.
Проверьте, что копия читается: RESTORE VERIFYONLY FROM DISK = N'D:\Backup\buh_before_update.bak' WITH CHECKSUM;
Что сверить до начала
| Что проверить | Где смотреть | Зачем |
|---|---|---|
| Текущий релиз конфигурации | Конфигуратор → Справка → О программе | Файл .cfu применяется только к релизам из своего списка |
| Требуемая версия платформы | Описание обновления (файл ReadMe в комплекте) | Новый релиз может не запуститься на старой платформе |
| Состояние поддержки | Конфигуратор → Конфигурация → Поддержка → Настройка поддержки | Доработанную конфигурацию придётся сравнивать и объединять |
| Свободное место на дисках SQL | Диски с файлами .mdf, .ldf и tempdb | Реструктуризация раздувает журнал и tempdb |
| Совместимость SQL Server с платформой | Список поддерживаемых СУБД для вашей версии платформы | Свежая платформа может не поддерживать очень старый SQL Server |
Если релиз отстал на несколько версий, промежуточные обновления придётся ставить по цепочке. В описании каждого .cfu перечислены версии, с которых он ставится.
Запас места под журнал транзакций
При модели восстановления FULL реструктуризация пишет в журнал всё, и .ldf может вырасти до размера самых больших таблиц. Текущее заполнение журнала покажет команда:
DBCC SQLPERF(LOGSPACE);
Если места мало, на время обновления переведите базу в модель SIMPLE:
ALTER DATABASE [buh] SET RECOVERY SIMPLE;
После возврата в FULL цепочка бэкапов журнала прерывается. Сразу после обновления выполните ALTER DATABASE [buh] SET RECOVERY FULL; и сделайте полный бэкап, иначе восстановление на момент времени будет невозможно.
2. Каким способом обновлять: интерактивно, пакетно или скриптом
| Способ | Когда подходит | Риски |
|---|---|---|
| Конфигуратор вручную | Одна-две базы, доработанная конфигурация, нужен контроль на каждом шаге | Человеческий фактор, обновление идёт только при админе у экрана |
Пакетный режим 1cv8.exe DESIGNER | Типовая конфигурация без доработок, ночное окно | Ошибка видна только в логе, вопросы диалогов не задаются |
Скрипт: rac + пакетный режим + SQL | Десятки баз, регулярные обновления | Нужен отлаженный сценарий и тестовый прогон |
Доработанную конфигурацию с изменёнными объектами пакетный режим обновлять не стоит: объединение с поставкой требует решений человека. Если доработки вынесены в расширения, базу можно обновлять как типовую, а совместимость расширений проверить после.
3. Ручное обновление конфигурации через Конфигуратор
Шаг 1. Закройте вход в базу
- Откройте консоль администрирования серверов 1С, разверните кластер →
Информационные базы→ свойства нужной базы. - Включите «Блокировка начала сеансов включена» и задайте «Код разрешения», например
upd123. В поле сообщения напишите, когда база снова будет доступна. - Включите «Блокировка регламентных заданий включена» — иначе обмены и загрузка курсов продолжат стучаться в базу.
- В разделе
Сеансытой же базы посмотрите, кто остался, и завершите сеансы.
Завершение сеанса обрывает работу пользователя без сохранения. Предупредите бухгалтерию заранее и делайте это только в согласованное окно.
Шаг 2. Войдите в Конфигуратор с кодом разрешения
В окне запуска выберите базу, нажмите «Конфигуратор» и допишите в строку подключения параметр /UC upd123 (через Изменить → «Дополнительные параметры запуска»). Без кода блокировка не пустит и вас.
Шаг 3. Примените обновление
Конфигурация → Поддержка → Обновить конфигурацию.- Выберите «Выбор файла обновления» и укажите
1cv8.cfuиз каталога шаблонов. - Для типовой конфигурации без изменений программа сразу покажет, что изменится. Для доработанной откроется окно сравнения и объединения — тут решают, чьи изменения сохранить.
- Подтвердите обновление основной конфигурации.
Шаг 4. Обновите конфигурацию базы данных
Конфигурация → Обновить конфигурацию базы данных (F7). Платформа покажет список изменённых объектов и спросит подтверждение реструктуризации.
На этом этапе нужен монопольный доступ: все сеансы, кроме вашего, должны быть закрыты. Здесь же уходит основное время — SQL Server пересоздаёт таблицы, где поменялась структура, и перестраивает индексы.
Шаг 5. Первый запуск в «Предприятии»
Запустите базу в режиме «1С:Предприятие» с тем же /UC upd123. Программа подтвердит легальность обновления и запустит обработчики обновления данных. Часть обработчиков отложенные: они дорабатывают в фоне уже после того, как пользователи вошли. Их прогресс виден в разделе Администрирование → Обслуживание.
Только после этого снимите блокировку сеансов и регламентных заданий в консоли кластера.
4. Если вместе с конфигурацией обновляется платформа на сервере
Новый релиз часто требует платформу новее. Обновление сервера 1С — отдельная операция, и её делают до обновления конфигурации.
- Установите новую версию сервера 1С рядом со старой. Версии платформы 8.3 ставятся в отдельные каталоги и друг другу не мешают.
- Остановите службу агента старой версии.
- Зарегистрируйте службу новой версии с той же учётной записью (обычно
USR1CV8) и тем же каталогомsrvinfo. Тогда кластер, список баз и настройки рабочих процессов подхватятся. - Запустите новую службу и откройте консоль. Если консоль не видит сервер, перерегистрируйте
radmin.dllновой версии:regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\radmin.dll"из командной строки администратора. - Обновите клиентов. В клиент-серверном варианте версия клиента должна совпадать с версией сервера, иначе подключение не пройдёт.
Остановка службы агента отключает всех пользователей всех баз этого сервера. Делайте это в окно, согласованное для всех баз, а не только для обновляемой.
Клиентов проще обновлять не вручную, а через автоматическую установку дистрибутива с общего сетевого ресурса: 1cestart.exe подтянет нужную версию при первом подключении, если путь к дистрибутиву указан в его настройках.
5. Обслуживание SQL Server после обновления 1С
После реструктуризации статистика по пересозданным таблицам устаревает, а оптимизатор SQL продолжает использовать старые планы запросов. Отсюда жалобы «после обновления всё тормозит».
Минимальный набор после каждого крупного обновления:
USE [buh];
EXEC sp_updatestats;
GO
DBCC FREEPROCCACHE;
- 📊
sp_updatestatsобновляет статистику только там, где были изменения строк, поэтому идёт быстро. - 🧹
DBCC FREEPROCCACHEочищает кэш планов всего экземпляра SQL Server. Первые минуты после него процессор будет загружен сильнее: планы строятся заново. - 🔧 Перестроение индексов поставьте в план обслуживания SSMS (
Management → Maintenance Plans, задачи «Rebuild Index» и «Update Statistics») на ночь, а не запускайте днём.
Если перед обновлением переводили базу в SIMPLE — верните FULL и сделайте полный бэкап сейчас, а не утром.
Пользователям, у которых после обновления странно выглядят формы или всплывают старые ошибки, поможет запуск клиента с параметром /ClearCache.
6. Автоматизация обновлений 1С для большого числа баз
Когда баз десятки, ручной проход через консоль превращается в ночь работы. Автоматизируют три вещи: блокировку, само обновление и проверку.
Блокировка через rac
Утилита rac работает через службу ras (по умолчанию порт 1545), её нужно запустить отдельно.
rac cluster list
rac infobase summary list --cluster=<uuid-кластера>
rac infobase update --cluster=<uuid-кластера> --infobase=<uuid-базы> ^
--infobase-user="Администратор" --infobase-pwd="***" ^
--sessions-deny=on --scheduled-jobs-deny=on ^
--permission-code=upd123 --denied-message="Идёт обновление, база доступна с 23:00"
rac session list --cluster=<uuid-кластера> --infobase=<uuid-базы>
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>
После обновления те же параметры выставляются в off. Если какой-то ключ не принимается вашей версией, сверьтесь с rac help infobase.
Обновление в пакетном режиме
set V8="C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe"
%V8% DESIGNER /S "srv1c\buh" /N "Администратор" /P "***" /UC upd123 ^
/UpdateCfg "D:\upd\1cv8.cfu" /UpdateDBCfg ^
/Out "D:\upd\buh_update.log" /DisableStartupDialogs
%V8% ENTERPRISE /S "srv1c\buh" /N "Администратор" /P "***" /UC upd123 ^
/C "ЗапуститьОбновлениеИнформационнойБазы;ЗавершитьРаботуСистемы" ^
/DisableStartupDialogs
Вторая команда нужна для типовых конфигураций на БСП: параметр /C запускает обработчики обновления и закрывает сеанс. Без неё база останется в состоянии «конфигурация обновлена, данные нет», и первый вошедший бухгалтер увидит окно обновления.
Пароль в открытом виде в .bat не держите: заводите отдельного пользователя 1С под обновления и храните учётные данные в защищённом хранилище планировщика.
Что добавить в сценарий
- 💾 Шаг
BACKUP DATABASEчерезsqlcmdперед обновлением и проверку кода возврата. - 📄 Разбор
/Out-лога: наличие слова «ошибка» — стоп, база остаётся заблокированной. - 🧪 Прогон на копии базы: восстановите вчерашний бэкап под другим именем, опубликуйте его в кластере и обновите первым.
Готовые сценарии на OneScript (например, vanessa-runner) закрывают эти шаги, но в них стоит разобраться до того, как доверять им рабочие базы.
7. Проверка после обновления и откат на прежний релиз
Проверка за 10 минут
Справка → О программе: номер релиза совпадает с ожидаемым.- Откройте журналы ключевых документов и перепроведите один-два документа текущего месяца: проведение без ошибок говорит, что обработчики данных отработали.
- Сформируйте оборотно-сальдовую ведомость за прошлый месяц и сравните итоги с теми, что были до обновления.
- Проверьте регламентные задания и обмены: после снятия блокировки они должны отработать без ошибок в журнале регистрации.
- Откройте расширения: при несовместимости программа отключит их и покажет предупреждение.
Когда и как откатываться
Откат нужен, если обновление прошло с ошибкой реструктуризации, база не открывается или учётные данные явно разошлись. Чинить «на живой» в рабочее время дороже.
USE [master];
ALTER DATABASE [buh] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
RESTORE DATABASE [buh]
FROM DISK = N'D:\Backup\buh_before_update.bak'
WITH REPLACE, STATS = 10;
ALTER DATABASE [buh] SET MULTI_USER;
ROLLBACK IMMEDIATE разрывает все подключения к базе, включая рабочие процессы 1С. Всё, что ввели после бэкапа, пропадёт: если пользователи успели поработать, выгрузите эти документы до отката.
Если обновляли и платформу, а новый релиз конфигурации требовал её, откатывать платформу не нужно: старая конфигурация на новой платформе обычно работает. Обратный случай — новая платформа сама вызвала сбой — решается возвратом службы старой версии, каталог srvinfo у них общий.
8. Ошибки при обновлении 1С на SQL и что с ними делать
.ldf или переведите базу в SIMPLE на время обновления, затем повторите F7. Структура не будет обновлена наполовину: незавершённая транзакция откатится.tempdb временные таблицы и сортировки. Освободите диск с tempdb или перенесите её файлы на диск побольше (нужен перезапуск службы SQL Server).9. Частые вопросы об обновлении 1С на сервере SQL
Сколько длится обновление базы 1С на MS SQL?
.cfu занимает минуты. Основное время уходит на реструктуризацию: для базы 20–30 ГБ это обычно до часа, для сотен гигабайт — несколько часов. Точное время покажет только прогон на копии.Можно ли обновлять, пока пользователи работают?
.cfu к основной конфигурации можно. А обновление конфигурации базы данных с изменением структуры требует монопольного доступа, поэтому пользователей придётся отключить.Нужна ли выгрузка .dt, если есть бэкап SQL?
.dt удобен, если базу нужно перенести на другой сервер или другую СУБД.Обязательно ли ставить все промежуточные релизы?
.cfu. Пропускать можно только те релизы, которые файл обновления «перепрыгивает» сам.Что делать с расширениями после обновления?
Администрирование → Печатные формы, отчёты и обработки. Если расширение отключилось из-за несовместимости, его автору нужно адаптировать его к новому релизу.