Перезапуск 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-сервера приведёт к временной недоступности поискового индекса. Перед рестартом проверьте, не выполняются ли в данный момент операции индексирования.
📊 Как часто вы перезагружаете SQL-сервер для 1С?
Раз в неделю
Только при ошибках
После обновлений
Никогда не перезагружаю

Подготовка к перезапуску: чек-лист для администратора 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.

Инструкция:

  1. Откройте Пуск → Панель управления → Администрирование → Службы (или нажмите Win + R, введите services.msc).
  2. Найдите службу SQL Server (MSSQLSERVER) (или SQL Server (имя_экземпляра), если используется именованный экземпляр).
  3. Щёлкните правой кнопкой и выберите Перезапустить.
  4. Дождитесь завершения процесса (статус службы должен смениться на Работает).

Для 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". Например, здесь можно изменить учётные данные службы или параметры запуска.

Как перезапустить:

  1. Откройте Пуск → Все программы → Microsoft SQL Server 20XX → Конфигурация → SQL Server Configuration Manager.
  2. Перейдите в раздел Службы SQL Server.
  3. Выберите нужную службу (например, SQL Server (MSSQLSERVER)) и нажмите правой кнопкой → Перезапустить.
  4. Подтвердите действие в диалоговом окне.

Преимущество этого метода в том, что здесь видно состояние всех зависимых служб (например, 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С:Предприятия также требует перезагрузки. В этом случае:

  1. Перезапустите службу 1C:Enterprise 8.3 Server Agent.
  2. Проверьте, что в лицензиях (через консоль администрирования 1С) отображаются все доступные лицензии.

Для баз с репликацией (например, в 1С:Управление холдингом) после перезапуска SQL может потребоваться синхронизация реплик. Используйте команду:

EXEC sp_restart
⚠️ Внимание: Если после перезапуска SQL-сервера в журналах 1С появляются ошибки вида "Ошибка СУБД: Виртуальный файл не может быть создан", это указывает на нехватку места на диске для файлов .ldf (журналов транзакций). Очистите место или расширьте диск.

FAQ: Частые вопросы по перезапуску SQL для 1С

Можно ли перезапускать SQL-сервер днём, когда в 1С работают пользователи?

Не рекомендуется. Перезапуск разрывает все активные соединения, что может привести к потере несохранённых данных (например, непроведённые документы или незакрытые формы). Оптимальное время — ночью или в обеденный перерыв. Если перезапуск срочно необходим, предварительно:

  1. Уведомите пользователей за 15-30 минут.
  2. Дождитесь, пока все выйдут из 1С (проверяйте через Администрирование → Активные пользователи).
  3. Завершите регламентные задания.

Для баз с терминальным доступом (например, через 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) были перемещены или повреждены.

Решение:

  1. Проверьте в SSMS, отображается ли база в списке (Databases).
  2. Если базы нет, подключите её вручную:
CREATE DATABASE [ИМЯ_БАЗЫ] ON

(FILENAME = 'C:\Path\To\ИМЯ_БАЗЫ.mdf'),

(FILENAME = 'C:\Path\To\ИМЯ_БАЗЫ.ldf')

FOR ATTACH;

Если файлы повреждены, восстановите базу из резервной копии.

Как автоматизировать перезапуск SQL-сервера для 1С (например, раз в неделю)?

Для автоматизации используйте Планировщик заданий Windows (Task Scheduler):

  1. Создайте новый задачу (Create Task).
  2. В триггере укажите расписание (например, каждую субботу в 3:00).
  3. В действии выберите Запустить программу и укажите:
Программа: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Аргументы: -Command "Restart-Service -Name MSSQLSERVER -Force"

Для надёжности добавьте в скрипт:

  • Проверку, что все пользователи вышли из 1С.
  • Логирование действий (например, запись в файл C:\Logs\SQL_Restart.log).
  • Уведомление по email (через Send-MailMessage) об успехе/неудаче.

Пример полного скрипта:

Полный скрипт для автоматического перезапуска

# Проверяем активные сессии 1С

$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"

Может ли перезапуск SQL-сервера повредить базу 1С?

Сам по себе корректный перезапуск не повреждает базу, но есть риски:

  • Если SQL был принудительно остановлен (например, через Диспетчер задач), это может привести к незавершённым транзакциям.
  • Если на диске не хватает места, база может перейти в режим SUSPECT.
  • Если использовался некорректный скрипт для отключения пользователей, возможны блокировки.

Чтобы минимизировать риски:

  • Всегда используйте штатные методы остановки службы (net stop, Stop-Service).
  • Перед перезапуском проверяйте свободное место на диске (минимум 20% от размера базы).
  • После перезапуска запустите проверку целостности базы:
DBCC CHECKDB ('ИМЯ_БАЗЫ') WITH NO_INFOMSGS;