web-dev-qa-db-ja.com

SQL Serverの名前を変更しましたが、メンテナンスプランにはまだ古い名前が付いています

同僚がSQLサーバーの名前を変更しましたが、すべてのメンテナンスプランには、「ローカルサーバー接続」として「OLD_NAME」への参照があります。

ローカルサーバー接続のサーバー名を含むテキストボックスはグレー表示され、変更できません

すべてのSSISパッケージをエクスポートし、Visual Studioで変更して再度追加する以外に、これらの値を変更する方法はありますか?

6
Richard

同僚はどのようにしてサーバーの名前を変更しましたか?彼らはこの手順に従いましたか?

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

そうでない場合は、次のようにする必要があります。SQLのバージョンに関係なく、手順は同じである必要があります。

3
joeqwerty

上記の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'
7
Scott Coleman

別のオプションは次のとおりです。

  1. メンテナンスプランのSSISパッケージをエクスポートする
  2. エクスポートしたパッケージファイルをメモ帳で開きます
  3. 「古いサーバー名」を「新しいサーバー名」に置き換えて、変更を保存します
  4. 既存のメンテナンスプランの名前を変更します。つまり、メンテナンスプランを古いものにします。
  5. #3から保存したSSISパッケージをインポートします
0
bryan