クライアントが2日前にDev Serverの名前を変更した
サーバー名の変更後、サーバー名が一致しないため、すべてのメンテナンスジョブと他のジョブが失敗します。
sql server 2012 versionとserver 2008 OSを使用しています。
今日の朝、私はSQL Server 2012の名前を更新された名前に変更し、テーブルを作成し、手順を更新しました
メンテナンスジョブでローカルサーバー接続を更新しようとしましたが、編集できません。次に、新しいサーバー接続を追加しましたが、ジョブの実行中にまだエラーが発生していません。
ジョブプロパティオプションのターゲットページで試した後、ターゲットサーバーのみが選択され、複数のターゲットサーバーが無効になっています。
以下のエラー
ユーザーとして実行:NT Service\SQLSERVERAGENT。 Microsoft(R)SQL Server Execute Package Utilityバージョン11.0.2100.60(64ビット版)Copyright(C)Microsoft Corporation。全著作権所有。
開始:12:01:28 AMエラー:2013-12-16 00:01:43.98コード:0xC00291ECソース:{410F7661-F71A-4B68-9584-BA422AB00F02} SQLタスクの実行
説明:接続「ローカルサーバー接続」の取得に失敗しました。接続が正しく構成されていないか、この接続に対する適切な権限がない可能性があります。終了エラー
エラー:2013-12-16 00:02:00.00
コード:0xC0024104
出典:Territory_Update
説明:タスクのExecuteメソッドがエラーコード0x80131904を返しました(SQL Serverへの接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからなかったか、アクセスできませんでした。インスタンスを確認してください名前が正しく、SQL Serverがリモート接続を許可するように構成されている(プロバイダー:名前付きパイププロバイダー、エラー:40-SQL Serverへの接続を開けませんでした)。 Executeメソッドは成功し、「out」パラメータを使用して結果を示す必要があります。終了エラー
エラー:2013-12-16 00:02:15.00
コード:0xC0024104
出典:{4E2AF328-0B8D-4905-83BE-839FDDEFC09C}
説明:タスクのExecuteメソッドがエラーコード0x80131904を返しました(SQL Serverへの接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからなかったか、アクセスできませんでした。インスタンスを確認してください名前が正しく、SQL Serverがリモート接続を許可するように構成されている(プロバイダー:名前付きパイププロバイダー、エラー:40-SQL Serverへの接続を開けませんでした)。 Executeメソッドは成功し、「out」パラメータを使用して結果を示す必要があります。
終了エラーDTExec:パッケージの実行によりDTSER_FAILURE(1)が返されました。
開始:12:01:28 AM
終了:12:02:15 AM
経過:46.641秒。
パッケージの実行に失敗しました。
ステップが失敗しました。
この人たちで私を助けてください、事前にありがとう
メンテナンスプランは、MSDBに格納されているSSISパッケージを利用します。これらのパッケージは、サーバーの名前変更後に変更されない接続文字列を使用します。
方法:SQL Serverのスタンドアロンインスタンスをホストするコンピューターの名前を変更する のコメントに NancySon によって投稿されたスクリプト(以下で再現)を使用して、これらの接続文字列を変更します。または、メンテナンスプランを再作成します。
保守計画では、接続が新しいサーバー名に変更されないため、切断される可能性があります。名前を変更した後、既存のメンテナンスプランを削除または名前変更できない場合があるため、サーバーの名前を変更する前に削除してから再作成するか、次のスクリプトを実行して修正してください。
use msdb DECLARE @oldservername as varchar(max) SET @oldservername='<server name>\<instance name>' -- set the new server name to the current server name declare @newservername as varchar(max) set @newservername=@@servername declare @xml as varchar(max) declare @packagedata as varbinary(max) -- get all the plans that have the old server name in their connection string DECLARE PlansToFix Cursor FOR SELECT id FROM sysssispackages WHERE (CAST(CAST(packagedata AS varbinary(MAX)) AS varchar(MAX)) LIKE '%server=''' + @oldservername + '%') OPEN PlansToFix declare @planid uniqueidentifier fetch next from PlansToFix into @planid while (@@fetch_status<>-1) -- for each plan begin if (@@fetch_status<>-2) begin select @xml=cast(cast(packagedata as varbinary(max)) as varchar(max)) from sysssispackages where id= @planid -- get the plan's xml converted to an xml string declare @planname varchar(max) select @planname=[name] from sysssispackages where id= @planid -- get the plan name print 'Changing ' + @planname + ' server from ' + @oldservername + ' to ' + @newservername -- print out what change is happening set @xml=replace(@xml,'server=''' + @oldservername + '''','server=''' + @newservername +'''') -- replace the old server name with the new server name in the connection string select @packagedata=cast(@xml as varbinary(max)) -- convert the xml back to binary UPDATE sysssispackages SET packagedata = @packagedata WHERE (id= @planid) -- update the plan end fetch next from PlansToFix into @planid -- get the next plan end close PlansToFix deallocate PlansToFix
----- This will also handle the packages that have a tag such as ----- <DTS:Property DTS:Name="ConnectionString">Data Source=servername;Integrated Security=SSPI;Connect Timeout=30;</DTS:Property> DECLARE @oldservername as varchar(max) SET @oldservername='<server name>\<instance name>'-- set the new server name to the current server name declare @newservername as varchar(max) set @newservername = @@servername declare @xml as varchar(max) declare @packagedata as varbinary(max)-- get all the plans that have the old server name in their connection string DECLARE PlansToFix Cursor FOR SELECT id FROM sysssispackages WHERE (CAST(CAST(packagedata AS varbinary(MAX)) AS varchar(MAX)) LIKE '%Data Source=' + @oldservername + '%') OPEN PlansToFix declare @planid uniqueidentifier fetch next from PlansToFix into @planid while (@@fetch_status<>-1) -- for each plan begin if (@@fetch_status<>-2) begin select @xml=cast(cast(packagedata as varbinary(max)) as varchar(max)) from sysssispackages where id= @planid -- get the plan's xml converted to an xml string declare @planname varchar(max)select @planname=[name] from sysssispackages where id= @planid -- get the plan name print 'Changing ' + @planname + ' server from ' + @oldservername + ' to ' + @newservername -- print out what change is happening set @xml=replace(@xml,'Data Source=' + @oldservername,'Data Source=' + @newservername) -- replace the old server name with the new server name in the connection string select @packagedata=cast(@xml as varbinary(max)) -- convert the xml back to binary UPDATE sysssispackages SET packagedata = @packagedata WHERE (id= @planid) -- update the plan end fetch next from PlansToFix into @planid -- get the next plan end close PlansToFix deallocate PlansToFix
私はこのコードを this answer からServer Faultの質問 SQL Serverの名前を変更しましたが、保守計画にはまだ古い名前があります :
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)
名前を変更するには:
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'
SQL Serverの名前を変更する場合(つまり、Windows NetBIOS名を変更する場合)、SQL Server内でこの小さな手動の手順を実行して、内部で名前を変更する必要もあります。 このMSKB記事 の詳細。
私はこれが古いスレッド/質問であることを知っていますが、今日同様の問題があり、上記のスクリプトを適用することで解決しました。@ AhsenBに感謝します。そして、プロセスでこれを解決する別の方法を見つけました:データソースの下のジョブのステップを編集し、ローカルサーバー接続を確認して、データソース=サーバー名の部分を編集します。そして出来上がり!