Назад | Перейти на главную страницу

Переименован SQL Server, однако планы обслуживания по-прежнему имеют старое название

Коллега переименовал SQL-сервер, однако во всех планах обслуживания по-прежнему есть ссылки на «OLD_NAME» как на «Подключение к локальному серверу».

Текстовые поля, содержащие имена серверов для подключений к локальному серверу, неактивны и не могут быть изменены.

Есть ли способ изменить эти значения, кроме экспорта всех пакетов SSIS, изменения в Visual Studio и повторного добавления их снова?

Приведенная выше ссылка Microsoft не относится к именам серверов «Подключение к локальному серверу» в планах обслуживания. Эти запросы позволяют вам проверить строки подключения плана обслуживания. Все используют базу данных msdb.

(SQL 2008, также SQL 2005, если sysssispackages изменен на sysdtspackages90)

SELECT  x.*,
        LocalServerConnectionString = cm.n.value('declare namespace  DTS="www.microsoft.com/SqlServer/Dts";(DTS:ObjectData/DTS:ConnectionManager/DTS:Property[@DTS:Name="ConnectionString"])[1]', 'varchar(1000)')
FROM (
    SELECT  id, name, packageXML = CAST(CAST(packagedata AS VARBINARY(MAX)) AS XML)
    FROM dbo.sysssispackages
    WHERE id IN (SELECT id FROM dbo.sysmaintplan_plans)
) x
CROSS APPLY packageXML.nodes('declare namespace DTS="www.microsoft.com/SqlServer/Dts";/DTS:Executable/DTS:ConnectionManager[DTS:Property[@DTS:Name="ObjectName"]="Local server connection"]') cm(n)

(SQL 2012)

SELECT  x.*,
        LocalServerConnectionString = cm.value('declare namespace DTS="www.microsoft.com/SqlServer/Dts";DTS:ObjectData[1]/DTS:ConnectionManager[1]/@DTS:ConnectionString', 'varchar(1000)')
FROM (
    SELECT  id, name, packageXML = CAST(CAST(packagedata AS VARBINARY(MAX)) AS XML)
    FROM dbo.sysssispackages
    WHERE id IN (SELECT id FROM dbo.sysmaintplan_plans)
) x
CROSS APPLY packageXML.nodes('declare namespace DTS="www.microsoft.com/SqlServer/Dts";/DTS:Executable/DTS:ConnectionManagers/DTS:ConnectionManager[@DTS:ObjectName="Local server connection"]') p(cm)

Если вы изучите packageXML и определите, что можно безопасно заменить каждый экземпляр OldServerName на NewServerName, это сделает это:

UPDATE dbo.sysssispackages SET packagedata = CAST(CAST(REPLACE(CAST(CAST(packagedata AS VARBINARY(MAX)) AS VARCHAR(MAX)), 'OldServerName', 'NewServerName') AS XML) AS VARBINARY(MAX))
WHERE id = 'package GUID'

При необходимости вы можете внести изменения вручную. Вы также можете уничтожить пакет, если не будете осторожны.

DECLARE @packageXML XML;
SET @packageXML = 'Copy and paste the packageXML data, then edit it manually';
UPDATE dbo.sysssispackages SET packagedata = CAST(@packageXML AS VARBINARY(MAX))
WHERE id = 'package GUID'

Как коллега переименовал сервер? Выполнили ли они эту процедуру:

http://msdn.microsoft.com/en-us/library/ms143799.aspx

Если нет, то они должны это сделать. Процедура должна быть одинаковой независимо от версии SQL.

Другой вариант:

  1. для экспорта пакета SSIS плана обслуживания
  2. откройте экспортированный файл пакета в блокноте
  3. замените «старое имя сервера» на «новое имя сервера» и сохраните изменения
  4. переименовать существующий план обслуживания, т. е. старый план обслуживания
  5. импортировать пакет SSIS, сохраненный из # 3