同僚がSQLサーバーの名前を変更しましたが、すべてのメンテナンスプランには、「ローカルサーバー接続」として「OLD_NAME」への参照があります。
ローカルサーバー接続のサーバー名を含むテキストボックスはグレー表示され、変更できません
すべてのSSISパッケージをエクスポートし、Visual Studioで変更して再度追加する以外に、これらの値を変更する方法はありますか?
同僚はどのようにしてサーバーの名前を変更しましたか?彼らはこの手順に従いましたか?
http://msdn.Microsoft.com/en-us/library/ms143799.aspx
そうでない場合は、次のようにする必要があります。SQLのバージョンに関係なく、手順は同じである必要があります。
上記の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'
別のオプションは次のとおりです。