Для стабильной работы любой базы данных 1С:Предприятие на платформе MS SQL Server критически важно регулярно проводить регламентные операции. К ним относятся обновление статистик, дефрагментация и реиндексация таблиц, а также резервное копирование. Стандартно за выполнение этих процессов отвечает служба SQL Server Agent (Агент MS SQL Server). Однако системные администраторы часто сталкиваются с ситуацией, когда эта служба наотрез отказывается запускаться.
В этой статье мы подробно разберем, как локализовать и устранить причины сбоя Агента MS SQL Server без радикального шага в виде переустановки всей СУБД. Также мы рассмотрим полнофункциональный альтернативный вариант настройки обслуживания баз данных с помощью утилиты sqlcmd и встроенного планировщика задач Windows, если запустить Агент по каким-то причинам оперативно не удается.
Прежде чем переходить к обходным путям, попробуем вернуть к жизни штатную службу Агента. Ниже приведены наиболее распространенные причины сбоев и пошаговые инструкции по их устранению.
1. Ошибка настройки учетной записи службы через стандартную оснастку Windows
Очень распространенная ошибка — изменение пароля или учетной записи службы Агента через стандартную консоль управления службами Windows (services.msc). Дело в том, что СУБД требует назначения специфических прав на физические файлы, ветки реестра и DCOM-компоненты. При настройке через services.msc эти права не переопределяются автоматически.
Решение: Всегда управляйте службами MS SQL Server только через специализированную утилиту SQL Server Configuration Manager (Диспетчер конфигурации SQL Server). Откройте эту программу, найдите в списке службу Агента, откройте её свойства и на вкладке «Вход в систему» (Log On) задайте корректные параметры учетной записи. Диспетчер конфигурации самостоятельно назначит все необходимые права в операционной системе.
2. Проблема с правами учетной записи в Windows и внутри SQL Server
Учетная запись, под которой запускается Агент, должна обладать достаточными полномочиями:
secpol.msc) в разделе «Назначение прав пользователя» у данной учетной записи должно быть право «Вход в качестве службы» (Log on as a service).sysadmin.Если для запуска используется системная учетная запись (например, Network Service), попробуйте в диагностических целях временно переключить её на учетную запись локального администратора компьютера через SQL Server Configuration Manager и проверить запуск.
3. Отключение необходимых сетевых протоколов
Агент SQL Server взаимодействует с СУБД локально. Если в конфигурации сетевых протоколов сервера отключены базовые механизмы взаимодействия, служба не сможет авторизоваться и упадет сразу после старта.
Решение: В SQL Server Configuration Manager разверните узел «Сетевая конфигурация SQL Server» (SQL Server Network Configuration) -> «Протоколы для [Имя_Инстанса]» (Protocols for...). Убедитесь, что протоколы Shared Memory (Общая память) и TCP/IP находятся в состоянии «Включено» (Enabled). Если они были отключены, включите их и перезапустите основную службу SQL Server.
4. Проблемы с системной базой данных msdb
Агент хранит все свои задания (Jobs), расписания и журналы в системной базе данных msdb. Если эта база данных повреждена, находится в режиме восстановления (Recovery) или помечена как «под подозрением» (Suspect), Агент не запустится.
Чтобы проверить состояние базы данных, выполним в среде SQL Server Management Studio (SSMS) следующий запрос:
SELECT name, state_desc
FROM sys.databases
WHERE name = 'msdb';
Если статус базы отличается от ONLINE, необходимо заняться восстановлением работоспособности базы msdb из резервной копии или пересоздать её.
---
Если запустить Агент SQL Server не удалось (или вы используете бесплатную редакцию Express Edition, в которой Агент отсутствует по умолчанию), мы можем полностью автоматизировать обслуживание баз данных 1С с помощью встроенного планировщика задач Windows и консольной утилиты командной строки sqlcmd.
Проанализируем ключевой вопрос: как правильно настроить авторизацию в скриптах, если на сервере баз данных используется Windows-аутентификация?
Принцип работы Windows-аутентификации в sqlcmd
Утилита sqlcmd при запуске с параметром -E использует доверительное соединение. Это значит, что авторизация в СУБД происходит под той учетной записью Windows, от имени которой выполняется сам скрипт или запускающий его батник.
Важная деталь: Если в планировщике задач Windows настроить выполнение задачи под системными учетными записями вроде СИСТЕМА (SYSTEM) или Локальная служба (Local Service), то при обращении к MS SQL утилита попытается авторизоваться под учетной записью компьютера. По умолчанию эти учетные записи не имеют прав администратора в SQL Server. В результате вы получите ошибку авторизации (Login failed for user...).
Пошаговый алгоритм настройки обходного решения:
.sql, например, C:\SQL_Scripts\statistics.sql. Внутри напишем стандартный запрос для обновления статистик всех таблиц базы данных:
USE [Имя_Вашей_Базы_1С];
GO
EXEC sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN';
GO
run_maintenance.bat. Пропишем в нем вызов утилиты sqlcmd. Для надежности явно укажем имя сервера СУБД и инстанс с помощью ключа -S, а также задействуем ключ -E для сквозной Windows-авторизации:
sqlcmd -S SERVERNAME\INSTANCE -E -i "C:\SQL_Scripts\statistics.sql" -b -o "C:\SQL_Scripts\maintenance_log.txt"
Здесь параметр -b заставляет батник прерывать работу при возникновении ошибок в SQL-скрипте, а параметр -o перенаправляет весь вывод (включая ошибки) в текстовый лог-файл, что очень удобно для последующего аудита.
run_maintenance.bat.sysadmin на сервере MS SQL Server.---
Использование встроенной системной процедуры sp_msforeachtable для регулярного обслуживания баз данных 1С имеет существенные недостатки. Она последовательно и без разбора обновляет статистики абсолютно на всех таблицах базы данных. На больших рабочих базах 1С это приводит к колоссальной и бесполезной нагрузке на дисковую подсистему и процессор, а также к длительным блокировкам таблиц.
Проанализируем более профессиональное решение, признанное стандартом в сфере администрирования баз данных SQL Server — бесплатный пакет скриптов от Олы Халленгрена (Ola Hallengren's SQL Server Maintenance Solution).
Этот инструмент позволяет выполнять обслуживание интеллектуально. Например, реиндексация будет производиться только для тех таблиц, уровень фрагментации которых превышает заданный порог, а обновление статистик выполнится только для тех данных, которые реально изменялись.
Разберем по шагам, как запустить этот инструмент без использования службы Агента:
MaintenanceSolution.sql с сайта разработчика.master (или любой другой выбранной базе) набор высокоэффективных хранимых процедур, ключевой из которых является IndexOptimize.
sqlcmd -E -S . -Q "EXEC master.dbo.IndexOptimize @Databases = 'USER_DATABASES', @FragmentationLow = 'INDEX_REBUILD_ONLINE', @FragmentationMedium = 'INDEX_REBUILD_ONLINE,INDEX_REORGANIZE', @FragmentationHigh = 'INDEX_REBUILD_ONLINE', @UpdateStatistics = 'ALL'" -b -o "C:\SQL_Scripts\ola_maintenance.log"
Рассмотрим параметры этого вызова подробнее:
@Databases = 'USER_DATABASES' — предписывает обработать все пользовательские базы данных на данном сервере (базы данных 1С).@FragmentationLow = 'INDEX_REBUILD_ONLINE', @FragmentationMedium = 'INDEX_REBUILD_ONLINE,INDEX_REORGANIZE', @FragmentationHigh = 'INDEX_REBUILD_ONLINE' — гибко управляет поведением системы при разном уровне фрагментации индексов, стараясь проводить операции в режиме онлайн без монопольного блокирования таблиц 1С.@UpdateStatistics = 'ALL' — запускает обновление статистик параллельно с оптимизацией индексов.Таким образом, даже при неработающей службе Агента MS SQL Server мы получаем полностью автоматизированную, гибкую и профессиональную систему обслуживания баз данных, которая не уступает штатным планам обслуживания СУБД.