已重命名 SQL Server,但维护计划仍使用旧名称

已重命名 SQL Server,但维护计划仍使用旧名称

一位同事重命名了 SQL 服务器,但是所有的维护计划仍然将“OLD_NAME”引用为“本地服务器连接”。

包含本地服务器连接的服务器名称的文本框呈灰色,无法更改

有没有办法改变这些值,而不是导出所有 SSIS 包,在 Visual Studio 中更改并重新添加它们?

答案1

同事如何重命名服务器?他们是否遵循了以下步骤:

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

如果没有,则他们需要,无论 SQL 版本如何,过程都应该相同。

答案2

上面给出的 Microsoft 链接未解决维护计划中的“本地服务器连接”服务器名称问题。这些查询可让您检查维护计划连接字符串。全部使用 msdb 数据库。

(SQL 2008,如果 sysssispackages 更改为 sysdtspackages90,则也适用于 SQL 2005)

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'

答案3

另一个选择是:

  1. 导出维护计划的 SSIS 包
  2. 在记事本中打开导出的包文件
  3. 将“旧服务器名称”替换为“新服务器名称”并保存更改
  4. 重命名现有维护计划,即旧维护计划
  5. 导入从 #3 保存的 SSIS 包

相关内容