Коллега переименовал 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.
Другой вариант: