Переименование сервера Windows, на котором развернут SQL Server 2014, — процедура технически сложная и часто приводящая к неожиданным сбоям в регламентных операциях. Одной из самых распространенных проблем является отказ планов обслуживания (Maintenance Plans). В этой статье мы подробно разберем, почему это происходит и как восстановить работоспособность системы без полной переустановки SQL Server.
Когда мы меняем имя хоста в операционной системе, SQL Server автоматически не обновляет свои внутренние метаданные. Даже после выполнения стандартных процедур по переименованию экземпляра, планы обслуживания могут продолжать ссылаться на старое имя сервера. Это связано с тем, что в SQL Server 2014 планы обслуживания технически реализованы как пакеты SSIS (SQL Server Integration Services), хранящиеся в базе данных msdb. Внутри этих пакетов жестко прописаны строки подключения и идентификаторы безопасности (SID), которые перестают быть актуальными после смены имени компьютера.
Прежде всего, нам необходимо убедиться, что сам SQL Server осознает свое новое имя. Рассмотрим стандартную процедуру проверки. Выполним следующий запрос в SQL Server Management Studio (SSMS):
SELECT @@SERVERNAME AS 'CurrentName', SERVERPROPERTY('ServerName') AS 'ActualName';
Если значения в этих колонках различаются, значит, системная переменная @@SERVERNAME все еще хранит старое имя. Проанализируем ситуацию: SQL Server обращается к внутренним таблицам для запуска заданий агента, и если имя не совпадает, задачи будут завершаться с ошибкой. Исправим это, выполнив следующие команды:
EXEC sp_dropserver 'СтароеИмяСервера';
GO
EXEC sp_addserver 'НовоеИмяСервера', 'local';
GO
После выполнения этих команд обязательно перезапустим службу SQL Server и службу SQL Server Agent, чтобы изменения вступили в силу.
Разберем ситуацию, когда при попытке добавить администратора с новым именем сервера система выдает ошибку: "Пользователь уже существует". Это происходит из-за того, что в системной таблице sys.server_principals сохраняется запись, привязанная к старому имени, но имеющая тот же SID, что и новый аккаунт. Выясним причину, изучив список логинов:
SELECT * FROM sys.server_principals WHERE type_desc = 'WINDOWS_LOGIN';
Для решения этой проблемы нам необходимо сменить владельца всех планов обслуживания на встроенную учетную запись sa. Это считается лучшей практикой (best practice), так как sa является системной записью SQL и не зависит от изменений в именах Windows-аккаунтов или доменов. Посмотрим, как массово изменить владельца заданий агента, которые запускают наши планы:
USE msdb;
GO
UPDATE sysjobs SET owner_sid = SUSER_SID('sa');
GO
После этого мы сможем корректно удалить старые упоминания администратора и добавить новые, если это потребуется для других задач.
Даже если мы обновили @@SERVERNAME, задания SQL Agent (Jobs), созданные старыми планами обслуживания, могут содержать поле originating_server со старым именем. Рассмотрим, как это проверить и исправить. Проанализируем таблицу sysjobs в базе данных msdb:
SELECT name, originating_server FROM msdb.dbo.sysjobs;
Если в колонке originating_server мы видим старое имя, планы не будут запускаться вручную или по расписанию. Обновим это поле для всех заданий:
USE msdb;
GO
UPDATE dbo.sysjobs SET originating_server = @@SERVERNAME;
GO
Как мы уже выяснили, планы обслуживания — это пакеты SSIS. Внутри пакета хранится "Connection Manager", который может ссылаться на конкретное имя сервера вместо использования локального подключения. Разберем по шагам, что нужно сделать в интерфейсе SSMS:
., localhost или актуальное имя сервера.Важный нюанс: если план все равно выдает ошибку при сохранении или переименовании, это означает, что внутренняя XML-структура пакета повреждена несовпадением имен. В таком случае самым быстрым и надежным решением будет создание нового плана "с нуля" и перенос в него необходимых задач (Backup, Integrity Check, Reindex). Как показывает практика, пересоздание занимает 15 минут, в то время как поиск ошибки в XML-структуре может занять часы.
Проанализируем еще один аспект: отчеты о выполнении планов обслуживания. Часто планы настроены на запись текстовых логов в определенную папку. Если в пути к этой папке фигурировало старое имя сервера или если после переименования у учетной записи, под которой работает SQL Agent, изменились права доступа, план будет завершаться с ошибкой.
Проверим настройки отчетов в плане обслуживания:
Мы рассмотрели комплекс мер по восстановлению планов обслуживания SQL Server 2014. Подведем итоги наших действий:
sp_addserver.sa, чтобы избежать конфликтов SID.originating_server в системных таблицах базы msdb.В будущем, при развертывании новых серверов, старайтесь сразу задавать корректное имя хоста до установки SQL Server. Если же переименование неизбежно, всегда используйте sa в качестве владельца планов обслуживания — это значительно упростит процесс миграции и смены конфигурации.