Sql

重命名 SQL Server,但維護計劃仍使用舊名稱

  • October 7, 2021

一位同事重命名了 SQL 伺服器,但所有維護計劃仍將“OLD_NAME”引用為“本地伺服器連接”。

包含本地伺服器連接的伺服器名稱的文本框顯示為灰色且無法更改

有沒有辦法更改這些值,而不是導出所有 SSIS 包,在 Visual Studio 中更改並再次重新添加它們?

同事是怎麼重命名伺服器的?他們是否遵循以下程序:

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

如果不是,他們需要,無論 SQL 版本如何,程序都應該是相同的。

上面給出的 Microsoft 連結未解決維護計劃中的“本地伺服器連接”伺服器名稱。這些查詢讓您檢查維護計劃連接字元串。都使用 msdb 數據庫。

(如果 sysssispackages 更改為 sysdtspackages90,則 SQL 2008 和 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'

引用自:https://serverfault.com/questions/289995