Перезапуск SQL-сервера — стандартная процедура для администрирования баз 1С:Предприятие, но её неправильное выполнение может привести к сбоям в работе учётных систем. Чаще всего перезагрузка требуется после обновления конфигурации, изменения настроек сервера или при возникновении ошибок блокировок. В этой статье разберём, когда именно нужно перезапускать SQL, какие методы существуют (от ручного через Службы Windows до автоматизированного через PowerShell), и как избежать типичных ошибок.
Многие администраторы 1С сталкиваются с дилеммой: перезагружать только службу SQL Server (MSSQLSERVER) или весь сервер целиком? Ответ зависит от причины. Например, при ошибке "Не удалось установить соединение с сервером базы данных" часто хватает рестарта службы, тогда как после установки критичных обновлений Windows может потребоваться полная перезагрузка ОС. Важно также учитывать, что в кластерных конфигурациях (например, 1С:Управление холдингом) процедура имеет нюансы — об этом поговорим отдельно.
В статье вы найдёте:
- 🔹 Признаки, что SQL-сервер требует перезапуска (с примерами ошибок из 1С).
- 🔹 4 способа перезагрузки: от простого к сложному, с командами и скриншотами.
- 🔹 Чек-лист подготовки к рестарту, чтобы не потерять данные.
- 🔹 Разбор ошибок, которые могут возникнуть после перезапуска (и как их исправить).
Когда требуется перезапуск SQL-сервера для 1С
Неопытные администраторы часто перезагружают SQL "на всякий случай", что может нарушить работу пользователей. На самом деле есть чёткие признаки, что сервер нуждается в рестарте:
- 🛑 Ошибки подключения в 1С:
"Не удалось установить соединение с сервером базы данных (SQLState: '08001')"или"Сетевая ошибка или ошибка, специфичная для экземпляра". Часто возникают после длительной работы сервера без перезагрузки. - 🔄 Зависание запросов: в SQL Server Management Studio (SSMS) видно, что запросы от 1С выполняются дольше 30 секунд без видимой причины.
- 🔒 Блокировки: в журнале событий 1С появляются сообщения о блокировках объектов (
"Объект заблокирован другим пользователем"), которые не снимаются автоматически. - 📦 После обновлений: установка патчей для MS SQL Server или конфигурации 1С (например, переход на новую версию платформы).
Перезапуск также может потребоваться при изменении настроек памяти (параметры max server memory или min server memory) или после дефрагментации индексов, если она выполнялась вручную. В кластерных средах (например, при использовании Always On Availability Groups) рестарт планируют на время минимальной нагрузки, так как он может инициировать переключение ролей.
⚠️ Внимание: Если в вашей инфраструктуре используется 1С:Документооборот с полнотекстовым поиском, перезапуск SQL-сервера приведёт к временной недоступности поискового индекса. Перед рестартом проверьте, не выполняются ли в данный момент операции индексирования.
Подготовка к перезапуску: чек-лист для администратора 1С
Неподготовленный рестарт SQL может привести к потере несохранённых данных или повреждению транзакций. Перед перезапуском обязательно выполните следующие шаги:
Уведомить пользователей о плановом простое (за 15-30 минут)
Проверить, что все пользователи вышли из 1С (через Администрирование → Активные пользователи)
Закрыть фоновые задачи (регламентные задания, обмены данными)
Создать резервную копию баз данных (особенно если планируются изменения конфигурации)
Отключить автоматический запуск регламентных заданий в 1С на время перезагрузки-->
Для проверки активных соединений с базой 1С можно использовать запрос в SSMS:
SELECT
session_id,
login_name,
host_name,
program_name,
login_time,
last_request_start_time,
last_request_end_time
FROM sys.dm_exec_sessions
WHERE program_name LIKE '%1C%'
AND is_user_process = 1;
Если в результате запроса выводятся активные сессии, попробуйте завершить их принудительно (но только после согласования с пользователями!):
KILL [номер_сессии];
Для баз с высокой нагрузкой (например, 1С:ERP или 1С:Управление торговлей) рекомендуется использовать скрипт для "мягкого" отключения пользователей, который сначала блокирует новые подключения, а затем завершает существующие сессии с задержкой. Пример такого скрипта можно найти в документации Microsoft.
⚠️ Внимание: Если ваша база 1С работает в режиме управляемого блокирования (начиная с платформы 8.3.10), принудительное завершение сессий может привести к неконсистентности данных. В этом случае используйте штатные механизмы 1С для завершения работы пользователей.
Способ 1: Перезапуск через "Службы Windows" (самый простой метод)
Это стандартный метод для большинства администраторов 1С, не требующий знания командной строки. Подходит для MS SQL Server 2012 и новее, включая SQL Server 2019/2022.
Инструкция:
- Откройте
Пуск → Панель управления → Администрирование → Службы(или нажмитеWin + R, введитеservices.msc). - Найдите службу SQL Server (MSSQLSERVER) (или SQL Server (имя_экземпляра), если используется именованный экземпляр).
- Щёлкните правой кнопкой и выберите
Перезапустить. - Дождитесь завершения процесса (статус службы должен смениться на
Работает).
Для SQL Server Express (часто используется в небольших компаниях для 1С) имя службы может отличаться — ищите SQL Server (SQLEXPRESS). Если служб несколько (например, для разных версий SQL), перезапускайте только ту, которая используется вашей базой 1С.
| Тип SQL-сервера | Имя службы | Примечание |
|---|---|---|
| SQL Server (стандартный) | MSSQLSERVER |
Экземпляр по умолчанию |
| SQL Server Express | MSSQL$SQLEXPRESS |
Используется в малом бизнесе |
| Именованный экземпляр | MSSQL$ИМЯ_ЭКЗЕМПЛЯРА |
Например, MSSQL$SQL2019 |
| SQL Server Agent | SQLSERVERAGENT |
Перезапускается отдельно, если нужно |
Если после перезапуска служба не запускается, проверьте журнал событий Windows (Просмотр событий → Журналы Windows → Приложение). Частые ошибки:
- 🚫 Недостаточно прав: запускайте "Службы" от имени администратора.
- 🚫 Порт 1433 занят: проверьте, не блокирует ли его антивирус или брандмауэр.
- 🚫 Повреждение системных баз: может потребоваться восстановление
masterилиmodel.
Если служба SQL не запускается после перезагрузки сервера, попробуйте временно отключить антивирус (например, Kaspersky Endpoint Security или ESET NOD32) — они иногда блокируют файлы sqlservr.exe.
Способ 2: Перезапуск через SQL Server Configuration Manager
SQL Server Configuration Manager — специализированный инструмент для управления службами SQL, который даёт больше возможностей, чем стандартные "Службы Windows". Например, здесь можно изменить учётные данные службы или параметры запуска.
Как перезапустить:
- Откройте
Пуск → Все программы → Microsoft SQL Server 20XX → Конфигурация → SQL Server Configuration Manager. - Перейдите в раздел
Службы SQL Server. - Выберите нужную службу (например,
SQL Server (MSSQLSERVER)) и нажмите правой кнопкой →Перезапустить. - Подтвердите действие в диалоговом окне.
Преимущество этого метода в том, что здесь видно состояние всех зависимых служб (например, SQL Server Agent или SQL Server Browser). Если вы используете 1С:Управление холдингом с распределённой базой, в Configuration Manager можно сразу проверить состояние служб на всех узлах кластера.
Если служба не перезапускается, проверьте:
- 🔌 Зависимости: в свойствах службы (правая кнопка →
Свойства → Зависимости) указаны службы, которые должны быть запущены до SQL Server. Например,SQL Server VSS Writer. - 📁 Права на папки: учётная запись службы (обычно
NT Service\MSSQLSERVER) должна иметь права на папкиDATA,LOGиBACKUP.
Что делать, если SQL Server Configuration Manager не открывается?
Если при запуске SQL Server Configuration Manager появляется ошибка "Cannot connect to WMI provider", это означает, что повреждён провайдер WMI. Исправляется перерегистрацией библиотеки:
1. Откройте командную строку от имени администратора.
2. Выполните:
mofcomp "%programfiles(x86)%\Microsoft SQL Server\150\Shared\sqlmgmproviderxpsp2up.mof"
(замените 150 на вашу версию SQL, например, 140 для SQL 2017).
3. Перезагрузите сервер.
Способ 3: Перезапуск через командную строку (CMD)
Этот метод полезен для автоматизации или удалённого управления. Команды работают в Windows Server 2012 R2 и новее.
Основные команды:
:: Остановка службы SQL Server
net stop MSSQLSERVER
:: Запуск службы SQL Server
net start MSSQLSERVER
:: Перезапуск (остановка + запуск)
net stop MSSQLSERVER & net start MSSQLSERVER
Для именованного экземпляра (например, SQLEXPRESS) используйте:
net stop MSSQL$SQLEXPRESS
net start MSSQL$SQLEXPRESS
Если служба не останавливается, добавьте ключ /y для принудительного завершения:
net stop MSSQLSERVER /y
Для проверки текущего состояния службы:
sc query MSSQLSERVER
В результате вы увидите статус: RUNNING, STOPPED или PAUSED.
⚠️ Внимание: Принудительная остановка (/y) может привести к потере несохранённых транзакций. Используйте её только в крайнем случае, когда служба "зависла" и не реагирует на стандартную команду.
Если вы администрируете 1С:Управление производственным предприятием (УПП) с большим количеством фоновых задач, перед перезапуском через CMD рекомендуется выполнить скрипт для "мягкого" отключения пользователей (см. раздел "Подготовка").
Способ 4: Перезапуск через PowerShell (для автоматизации)
PowerShell позволяет гибко управлять службами SQL, включая проверку их состояния и логирование действий. Это удобно для написания скриптов планового перезапуска (например, раз в неделю в нерабочее время).
Базовый скрипт для перезапуска:
# Остановка службы
Stop-Service -Name "MSSQLSERVER" -Force
Пауза 10 секунд (на случай, если служба долго останавливается)
Start-Sleep -Seconds 10
Запуск службы
Start-Service -Name "MSSQLSERVER"
Проверка статуса
Get-Service -Name "MSSQLSERVER" | Select-Object Name, Status
Для именованного экземпляра:
Stop-Service -Name "MSSQL`$SQLEXPRESS" -Force
Start-Service -Name "MSSQL`$SQLEXPRESS"
Чтобы проверить, какие базы 1С используют данный экземпляр SQL, можно использовать следующий скрипт:
$sqlInstance = "ИМЯ_СЕРВЕРА\ИМЯ_ЭКЗЕМПЛЯРА"
$query = @"
SELECT name AS DatabaseName
FROM sys.databases
WHERE name LIKE '1C%'
OR name LIKE '%1C%'
OR name LIKE '%УТ%'
OR name LIKE '%БП%'
"@
Invoke-Sqlcmd -ServerInstance $sqlInstance -Query $query
Этот скрипт выведет все базы, в именах которых есть префиксы, типичные для 1С (1C, УТ для "Управление торговлей", БП для "Бухгалтерия предприятия").
Используйте PowerShell для создания плановых задач перезапуска SQL через Task Scheduler. Например, можно настроить еженедельную перезагрузку в 3:00 ночи, когда в 1С нет пользователей.
Типичные ошибки после перезапуска и их решения
Даже после корректного перезапуска SQL-сервера могут возникнуть проблемы. Рассмотрим самые распространённые:
| Ошибка | Причина | Решение |
|---|---|---|
Login failed for user '1C_v8' |
Сброс пароля учётной записи 1С в SQL | Восстановите пароль через ALTER LOGIN или пересоздайте пользователя в базе. |
Database 'ИМЯ_БАЗЫ' is in recovery |
База не завершила восстановление после аварийного завершения | Дождитесь завершения процесса (может занять до 30 минут) или выполните RESTORE DATABASE ... WITH RECOVERY. |
TCP Provider: No connection could be made |
Порт 1433 заблокирован или служба SQL Browser не запущена | Проверьте брандмауэр и запустите службу SQL Server Browser. |
The database is in single-user mode |
База была переведена в однопользовательский режим (например, после восстановления) | Выполните ALTER DATABASE ИМЯ_БАЗЫ SET MULTI_USER. |
Если после перезапуска 1С выдаёт ошибку "Недостаточно лицензий", это может быть связано с тем, что сервер лицензий 1С:Предприятия также требует перезагрузки. В этом случае:
- Перезапустите службу
1C:Enterprise 8.3 Server Agent. - Проверьте, что в
лицензиях(через консоль администрирования 1С) отображаются все доступные лицензии.
Для баз с репликацией (например, в 1С:Управление холдингом) после перезапуска SQL может потребоваться синхронизация реплик. Используйте команду:
EXEC sp_restart
⚠️ Внимание: Если после перезапуска SQL-сервера в журналах 1С появляются ошибки вида"Ошибка СУБД: Виртуальный файл не может быть создан", это указывает на нехватку места на диске для файлов.ldf(журналов транзакций). Очистите место или расширьте диск.
FAQ: Частые вопросы по перезапуску SQL для 1С
Можно ли перезапускать SQL-сервер днём, когда в 1С работают пользователи?
Не рекомендуется. Перезапуск разрывает все активные соединения, что может привести к потере несохранённых данных (например, непроведённые документы или незакрытые формы). Оптимальное время — ночью или в обеденный перерыв. Если перезапуск срочно необходим, предварительно:
- Уведомите пользователей за 15-30 минут.
- Дождитесь, пока все выйдут из 1С (проверяйте через
Администрирование → Активные пользователи). - Завершите регламентные задания.
Для баз с терминальным доступом (например, через 1С:Тонкий клиент) можно использовать скрипт для "мягкого" отключения пользователей.
Как перезапустить SQL-сервер на Linux (если 1С работает под Ubuntu/CentOS)?
Для SQL Server на Linux (актуально для 1С на серверах с PostgreSQL или MS SQL for Linux) используйте команды:
# Остановка
sudo systemctl stop mssql-server
Запуск
sudo systemctl start mssql-server
Перезапуск
sudo systemctl restart mssql-server
Проверка статуса
sudo systemctl status mssql-server
Если 1С использует PostgreSQL, команды будут другими:
sudo service postgresql restart
После перезапуска проверьте, что порт 5432 (для PostgreSQL) или 1433 (для MS SQL) прослушивается:
sudo netstat -tulnp | grep 1433
Что делать, если после перезапуска SQL-сервера 1С пишет "Не найдена база данных"?
Эта ошибка возникает, если:
- База была отсоединена (detached) при остановке SQL.
- Изменилось имя экземпляра SQL-сервера.
- Файлы базы (
.mdf,.ldf) были перемещены или повреждены.
Решение:
- Проверьте в SSMS, отображается ли база в списке (
Databases). - Если базы нет, подключите её вручную:
CREATE DATABASE [ИМЯ_БАЗЫ] ON
(FILENAME = 'C:\Path\To\ИМЯ_БАЗЫ.mdf'),
(FILENAME = 'C:\Path\To\ИМЯ_БАЗЫ.ldf')
FOR ATTACH;
Если файлы повреждены, восстановите базу из резервной копии.
Как автоматизировать перезапуск SQL-сервера для 1С (например, раз в неделю)?
Для автоматизации используйте Планировщик заданий Windows (Task Scheduler):
- Создайте новый задачу (
Create Task). - В триггере укажите расписание (например, каждую субботу в 3:00).
- В действии выберите
Запустить программуи укажите:
Программа: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Аргументы: -Command "Restart-Service -Name MSSQLSERVER -Force"
Для надёжности добавьте в скрипт:
- Проверку, что все пользователи вышли из 1С.
- Логирование действий (например, запись в файл
C:\Logs\SQL_Restart.log). - Уведомление по email (через
Send-MailMessage) об успехе/неудаче.
Пример полного скрипта:
Полный скрипт для автоматического перезапуска
$activeSessions = Invoke-Sqlcmd -Query "SELECT COUNT(*) FROM sys.dm_exec_sessions WHERE program_name LIKE '%1C%'" -ServerInstance "localhost" if ($activeSessions -gt 0) { # Отправляем предупреждение Send-MailMessage -From "admin@domain.com" -To "support@domain.com" -Subject "Перезапуск SQL отменён: есть активные пользователи" -Body "Обнаружено $activeSessions активных сессий 1С." -SmtpServer "smtp.domain.com" exit } Restart-Service -Name MSSQLSERVER -Force $logMessage = "SQL Server перезапущен в $(Get-Date)" $logMessage | Out-File -Append -FilePath "C:\Logs\SQL_Restart.log" Send-MailMessage -From "admin@domain.com" -To "support@domain.com" -Subject "SQL Server перезапущен" -Body $logMessage -SmtpServer "smtp.domain.com"# Проверяем активные сессии 1С
Перезапускаем службу
Логируем действие
Отправляем уведомление
Может ли перезапуск SQL-сервера повредить базу 1С?
Сам по себе корректный перезапуск не повреждает базу, но есть риски:
- Если SQL был принудительно остановлен (например, через Диспетчер задач), это может привести к незавершённым транзакциям.
- Если на диске не хватает места, база может перейти в режим
SUSPECT. - Если использовался некорректный скрипт для отключения пользователей, возможны блокировки.
Чтобы минимизировать риски:
- Всегда используйте штатные методы остановки службы (
net stop,Stop-Service). - Перед перезапуском проверяйте свободное место на диске (минимум 20% от размера базы).
- После перезапуска запустите проверку целостности базы:
DBCC CHECKDB ('ИМЯ_БАЗЫ') WITH NO_INFOMSGS;