Обновление платформы 1С:Предприятие и MS SQL Server без потери данных
Содержание
Обновить сервер 1С и SQL безопасно можно только по частям: сначала платформу 1С:Предприятие на сервере и на всех клиентах до одного номера сборки, затем — отдельным окном — MS SQL Server. Делать оба обновления за одну ночь не стоит: если что-то сломается, вы не поймёте, кто виноват.
Типичная боль администратора — после обновления пользователи утром видят ошибку подключения, а откатиться уже нечем. Ниже — порядок, при котором у вас на каждом шаге есть путь назад: проверка совместимости, копии, тестовый прогон, само обновление, настройка кластера и разбор ошибок.
Совместимость версий платформы 1С и SQL Server
Начните не с дистрибутива, а с таблицы версий. У каждой версии платформы есть список поддерживаемых СУБД, и он меняется: новые платформы перестают поддерживать старые SQL Server, а свежий SQL Server может не поддерживаться старой платформой.
Что проверить до начала работ:
- 🔢 Номер платформы на сервере и на клиентах. Клиент подключается к серверу только при совпадении номера сборки — вплоть до последних цифр (
8.3.xx.yyyy). - 🗄️ Версию SQL Server и её уровень обновлений. Посмотреть:
SELECT @@VERSION;в SQL Server Management Studio. - 📋 Системные требования целевой платформы. Там прямо указано, какие версии MS SQL Server поддерживаются. Если вашей версии SQL нет в списке — сначала обновляйте СУБД, потом платформу.
- ⚙️ Режим совместимости конфигурации. Свежая платформа запускает конфигурации со старым режимом совместимости. А вот новая версия типовой конфигурации может требовать платформу не ниже определённого номера — это написано в описании релиза.
- 🔑 Лицензии. Программные лицензии сервера привязаны к оборудованию, а не к номеру платформы. Если меняете железо или переносите сервер на новую машину, лицензии придётся восстанавливать.
Какой порядок выбрать
| Ситуация | Что обновлять первым | Почему |
|---|---|---|
| Новой платформе нужен более свежий SQL | SQL Server | Иначе платформа не подключится к СУБД |
| Новая конфигурация требует новую платформу | Платформу 1С | SQL остаётся рабочим |
| Переезд на новый сервер | Ставить всё с нуля на новой машине | Старый сервер остаётся точкой отката |
| Только плановое обновление сборки платформы | Платформу 1С | SQL не затрагивается вовсе |
Самый спокойный сценарий — переезд на новую машину. Старый сервер продолжает работать, пока вы не убедитесь, что новый готов. Откат — это просто переключить пользователей обратно.
Резервные копии и тестовый стенд перед обновлением
Без двух независимых копий базы к обновлению не приступайте. Одна копия — средствами SQL Server, вторая — выгрузка .dt средствами 1С. Они страхуют от разных бед.
Копия средствами SQL Server
Полная копия с флагом COPY_ONLY не ломает цепочку ваших регулярных бэкапов:
BACKUP DATABASE [buh_main]
TO DISK = N'D:\Backup\buh_main_before_upgrade.bak'
WITH COPY_ONLY, COMPRESSION, CHECKSUM, STATS = 10;
RESTORE VERIFYONLY
FROM DISK = N'D:\Backup\buh_main_before_upgrade.bak'
WITH CHECKSUM;
Сжатие (COMPRESSION) недоступно в редакции Express — там просто уберите этот параметр.
Выгрузка .dt
Выгрузка не зависит от версии SQL Server: её можно загрузить на любую СУБД, включая файловый вариант. Это ваш спасательный круг, если резервную копию SQL не получится восстановить на старой версии.
Делается в Конфигураторе: Администрирование → Выгрузить информационную базу. На время выгрузки лучше отключить пользователей
, чтобы данные были согласованными.
Копия настроек кластера
Скопируйте каталог srvinfo (по умолчанию C:\Program Files\1cv8\srvinfo). В нём лежит реестр кластера: список информационных баз, рабочих серверов, администраторов. Остановите перед копированием службу агента сервера — это оборвёт все сеансы, поэтому делайте это в нерабочее время.
Тестовый прогон
Восстановите копию под другим именем, например buh_test, и зарегистрируйте её в кластере тестового сервера. В свойствах этой базы в консоли кластера включите флажок Блокировка регламентных заданий включена.
Без этого флажка тестовая копия начнёт сама загружать банковские выписки, отправлять письма и обмениваться с ЭДО от имени рабочей организации.
Как обновить платформу 1С:Предприятие на сервере
Платформа ставится рядом со старой, в отдельный каталог C:\Program Files\1cv8\8.3.xx.yyyy\. Старая версия не удаляется — и не удаляйте её, пока не убедитесь, что всё работает.
Пошагово
- Заблокируйте вход. В консоли кластера откройте свойства базы, включите
Блокировка начала сеансов включена, задайте время начала, сообщение для пользователей и код разрешения — с ним вы сами сможете зайти. - Дождитесь завершения сеансов или завершите оставшиеся из консоли. Предупредите пользователей заранее: незаписанные документы пропадут.
- Запустите
setup.exeиз полного дистрибутива платформы для 64-битной Windows. В компонентах отметьтеСервер 1С:Предприятия 8,Администрирование сервера 1С:Предприятияи, если на машине есть веб-публикации,Модули расширения веб-сервера. - Отметьте установку сервера как службы Windows и укажите ту же учётную запись, под которой служба работала раньше. Иначе у неё может не оказаться прав на каталог
srvinfoи на сетевые папки. - Проверьте, на какую версию смотрит служба. Узнайте имя службы и путь к исполняемому файлу:
sc query state= all | findstr /i "1C:Enterprise"
sc qc "1C:Enterprise 8.3 Server Agent (x86-64)"
В строке BINARY_PATH_NAME должен стоять путь к ragent.exe новой версии. Если там старый каталог — установщик не переписал службу, и сервер продолжит работать на прежней сборке.
- Перезапустите службу и откройте консоль кластера. Кластер, базы и администраторы должны подтянуться из
srvinfoбез изменений. - Обновите клиентов до того же номера сборки. На каждом компьютере или через общий дистрибутив — способ зависит от того, как у вас устроена раздача платформы.
- Зайдите в базу с кодом разрешения, проверьте ключевые операции и снимите блокировку сеансов.
Если в списке баз у пользователя в свойствах базы жёстко указана старая версия в поле Версия 1С:Предприятия, клиент будет запускать именно её и не подключится к обновлённому серверу. Поле лучше оставить пустым или указать маску вроде 8.3.
Ключ запуска для нескольких версий
Если на сервере должны работать две версии одновременно (например, для разных баз), им нужны разные порты агента и диапазоны рабочих процессов. Вторую службу создают вручную с параметрами -regport, -port, -range и отдельным каталогом -d. Это уже отдельная задача; для обычного обновления достаточно одной службы.
Миграция и обновление MS SQL Server
Обновить MS SQL Server можно двумя путями. Выбор зависит от того, есть ли у вас запасное железо и окно простоя.
| Способ | Когда подходит | Риски |
|---|---|---|
| Обновление на месте (setup → Upgrade) | Один сервер, нет второй машины | Откат только переустановкой и восстановлением из копий |
| Перенос на новый экземпляр (backup → restore) | Есть второй сервер или виртуалка | Нужно перенести логины и переключить базы в кластере |
| Перенос через .dt | Большой скачок версий, смена СУБД | Долго на больших базах |
Обновление на месте
Мастер установки SQL Server поддерживает прямое обновление не со всех версий. Сверьтесь с матрицей путей обновления Microsoft для целевой версии: с очень старых выпусков придётся идти через промежуточный. Перед запуском остановите службу агента сервера 1С — так никто не будет писать в базы во время обновления СУБД.
Перенос на новый экземпляр
- Установите новый SQL Server. Параметры сортировки сервера —
Cyrillic_General_CI_AS, это стандартный выбор для 1С. - Создайте логин, под которым 1С подключается к СУБД. Ему нужны права на создание баз или роль
sysadmin— по политике вашей компании. - Восстановите базу:
RESTORE DATABASE [buh_main]
FROM DISK = N'D:\Backup\buh_main_before_upgrade.bak'
WITH MOVE N'buh_main' TO N'E:\SQLData\buh_main.mdf',
MOVE N'buh_main_log' TO N'F:\SQLLog\buh_main_log.ldf',
STATS = 10;
Логические имена файлов посмотрите командой RESTORE FILELISTONLY FROM DISK = N'...'; — они не всегда совпадают с именем базы.
- Почините «осиротевшего» пользователя: в восстановленной базе он есть, а связи с логином нового сервера нет.
USE [buh_main];
ALTER USER [user1c] WITH LOGIN = [user1c];
- Обновите статистику и проверьте целостность:
EXEC sp_updatestats;
DBCC CHECKDB ([buh_main]) WITH NO_INFOMSGS;
- Переключите базу в кластере 1С. В консоли кластера откройте свойства информационной базы и в поле
Сервер баз данныхукажите новый сервер. Имя базы, пользователь и пароль СУБД — как на новом экземпляре.
На сервере 1С должен стоять клиентский драйвер для MS SQL Server нужной версии. Если его нет, платформа не сможет подключиться к СУБД, даже если сам SQL работает.
Уровень совместимости базы
После восстановления на новой версии база сохраняет старый уровень совместимости. Посмотреть его можно запросом:
SELECT name, compatibility_level FROM sys.databases;
Поднимать уровень сразу не обязательно. Новый оценщик кардинальности на некоторых запросах 1С работает медленнее старого. Правильный путь — поднять уровень на тестовой копии, прогнать закрытие месяца и тяжёлые отчёты и только потом решать для рабочей базы.
Настройка кластера 1С и производительность после обновления
Сразу после обновления пройдитесь по настройкам, которые обычно сбиваются или так и не были выставлены.
На стороне SQL Server
- 🧮 Максимальная память сервера (
max server memory). Если 1С и SQL на одной машине, оставьте памяти и операционной системе, и рабочим процессам 1С. Ориентир для сервера на 64 ГБ при совместной установке — отдать SQL примерно 40–45 ГБ. - 🔀 Степень параллелизма (
max degree of parallelism). Для нагрузки 1С обычно ставят1:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'max degree of parallelism', 1; RECONFIGURE;
- 💾 Модель восстановления. Если стоит
FULL, а резервное копирование журнала не настроено, файл.ldfбудет расти до заполнения диска. Либо настройте бэкапы журнала, либо переключите базу вSIMPLE. - 🔧 Планы обслуживания. После переезда на новый экземпляр их нужно создать заново: обновление статистики, перестроение индексов, резервные копии.
На стороне кластера 1С
В консоли кластера в свойствах рабочего сервера проверьте параметры Количество ИБ на процесс, Количество соединений на процесс и Безопасный расход памяти за один вызов. После обновления платформы они остаются прежними, но новая версия может вести себя иначе под той же нагрузкой.
В свойствах кластера задайте Интервал перезапуска рабочих процессов (например, раз в сутки) и Допустимый объем памяти. Это страхует от утечек памяти, которые иногда проявляются на новых сборках.
Перезапуск рабочих процессов обрывает сеансы. Новые значения начинают действовать для новых процессов, поэтому проверяйте их вне рабочего времени.
Если веб-клиент или HTTP-сервисы опубликованы через IIS или Apache, переопубликуйте их из новой версии платформы. Модуль веб-сервера должен быть той же сборки, что и сервер.
Ошибки после обновления сервера 1С и SQL и как откатиться
Большинство проблем после обновления повторяются от компании к компании. Найдите свой симптом:
Откат платформы 1С
Откат платформы — самый простой, если старая версия не удалена:
- Заблокируйте начало сеансов и дождитесь отключения пользователей.
- Остановите службу агента сервера.
- Верните путь к
ragent.exeстарой версии — переустановкой старого дистрибутива со службой или правкой пути к исполняемому файлу службы. - Если менялся реестр кластера, восстановите каталог
srvinfoиз копии. - Запустите службу и откатите клиентов на ту же старую сборку.
Откат SQL Server
Резервную копию с новой версии SQL Server нельзя восстановить на старой. Поэтому откат СУБД — это всегда возврат к копии, сделанной до обновления. Все данные, введённые после переключения, придётся переносить вручную.
Если пользователи уже поработали на новом сервере несколько дней, единственный способ вернуть базу на старый SQL с текущими данными — выгрузка .dt с нового сервера и загрузка на старом. Заложите на это время: базе в 100 ГБ может потребоваться несколько часов.
Поэтому переключайте пользователей на новый SQL в начале недели, а не перед закрытием месяца. Проблемы проявятся в первые 1–2 дня, когда откат ещё недорогой.