서버 이름을 변경한 후 SQL Server 유지 관리 계획이 실행 오류가 발생할 때의 대응
소개
클라우드 환경에서 SQL Server를 설치 한 Windows 서버를 복사하여 별도의 서버로 시작할 때 SQL Server의 서버 이름 변경을 제대로 수행했음에도 불구하고 유지 관리 계획이 실행 오류가되는 사건을 만나서 빠져 버렸습니다. 그래서 그때의 작업 메모.
구현 환경은 SQL Server 2016.
1. 전제 작업
SQL Server ServerName 변경
SQL Server에서 보유한 ServerName을 새 서버 이름으로 변경
확인 SQL
SELECT @@SERVERNAME AS 'Server Name';
select * from sys.servers;
설정 변경 SQL
sp_dropserver '旧サーバー名';
GO
sp_addserver '新サーバー名', local;
GO
원격 로그인 삭제(사용하는 경우)
//既定のインスタンスの場合は、次のプロシージャを実行します。
sp_dropremotelogin old_name;
GO
//名前付きインスタンスの場合は、次のプロシージャを実行します。
sp_dropremotelogin old_name\instancename;
GO
Reporting Services 설정 변경(사용하는 경우)
이쪽을 참고로 실시
htps : // v.ぁsss d. jp/아 r c/s/sql-r rょr/
2. 이 상태에서 유지 보수 계획을 실행하면 어떻게됩니까?
SQL Management Studio에서 유지 관리 계획을 실행한 후 다음 오류로 인해 실패했습니다.
"Execute method on the task returned error code 0x80131904 (SQL Server에 대한 연결을 설정할 때 네트워크 관련 또는 인스턴스 관련 오류가 발생했습니다. 서버를 찾을 수 없거나 액세스할 수 없습니다. 그리고 SQL Server가 원격 연결을 허용하도록 구성되어 있는지 확인하십시오."
오류 메시지는 작업 내역에서 볼 수 있습니다.
3. 유지보수 계획 실행이 실패하는 이유
유지 보수 계획의 연결 정의를 보면 오래된 서버 이름으로 남아 있으며 이것으로 인해 실행에 실패하고 있음을 알 수 있습니다.
4. 대처법
두 가지 방법이 있습니다.
"방법 1"SQL을 사용하여 유지 보수 계획 정의의 서버 이름 바꾸기
방법 2 유지 보수 계획 정의를 Export → 수정 → Import
방법 1 SQL을 사용하여 유지 관리 계획 정의의 서버 이름 바꾸기
(1) 유지 보수 계획의 ID 확인
use msdb
go
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)
go
(2) 정의 업데이트 실행
use msdb
go
UPDATE dbo.sysssispackages
SET packagedata = CAST(
CAST(
REPLACE(
CAST(CAST(packagedata AS VARBINARY(MAX)) AS VARCHAR(MAX)),'旧サーバー名','新サーバー名'
) AS XML
) AS VARBINARY(MAX)
)
WHERE id = '手順1で確認したID';
go
방법 2 유지보수 계획 정의를 Export→수정→Import
(1) SQL Server Management Studio에서 Integration Services에 연결
(2) 대상 유지 보수 계획을 마우스 오른쪽 버튼으로 클릭하여 내보내기
(3) Export 된 파일을 텍스트 편집기에서 열어 서버 이름을 수정
||
DTS:CreatorComputerName="旧サーバー名"
||
<DTS:ConnectionManagers>
<DTS:ConnectionManager
DTS:ConnectionString="Data Source=旧サーバー名;Integrated Security=True ・・・・・
(4) Import
5. 확인
3에 기재된 순서로 유지 보수 계획의 실행 목적지 서버 명이 변경되었는지를 확인한 후, 유지 보수 계획을 실행한다. 정상 종료하면 OK.
참고 URL
SQL Server ServerName 변경
SQL Server에서 보유한 ServerName을 새 서버 이름으로 변경
확인 SQL
SELECT @@SERVERNAME AS 'Server Name';
select * from sys.servers;
설정 변경 SQL
sp_dropserver '旧サーバー名';
GO
sp_addserver '新サーバー名', local;
GO
원격 로그인 삭제(사용하는 경우)
//既定のインスタンスの場合は、次のプロシージャを実行します。
sp_dropremotelogin old_name;
GO
//名前付きインスタンスの場合は、次のプロシージャを実行します。
sp_dropremotelogin old_name\instancename;
GO
Reporting Services 설정 변경(사용하는 경우)
이쪽을 참고로 실시
htps : // v.ぁsss d. jp/아 r c/s/sql-r rょr/
2. 이 상태에서 유지 보수 계획을 실행하면 어떻게됩니까?
SQL Management Studio에서 유지 관리 계획을 실행한 후 다음 오류로 인해 실패했습니다.
"Execute method on the task returned error code 0x80131904 (SQL Server에 대한 연결을 설정할 때 네트워크 관련 또는 인스턴스 관련 오류가 발생했습니다. 서버를 찾을 수 없거나 액세스할 수 없습니다. 그리고 SQL Server가 원격 연결을 허용하도록 구성되어 있는지 확인하십시오."
오류 메시지는 작업 내역에서 볼 수 있습니다.
3. 유지보수 계획 실행이 실패하는 이유
유지 보수 계획의 연결 정의를 보면 오래된 서버 이름으로 남아 있으며 이것으로 인해 실행에 실패하고 있음을 알 수 있습니다.
4. 대처법
두 가지 방법이 있습니다.
"방법 1"SQL을 사용하여 유지 보수 계획 정의의 서버 이름 바꾸기
방법 2 유지 보수 계획 정의를 Export → 수정 → Import
방법 1 SQL을 사용하여 유지 관리 계획 정의의 서버 이름 바꾸기
(1) 유지 보수 계획의 ID 확인
use msdb
go
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)
go
(2) 정의 업데이트 실행
use msdb
go
UPDATE dbo.sysssispackages
SET packagedata = CAST(
CAST(
REPLACE(
CAST(CAST(packagedata AS VARBINARY(MAX)) AS VARCHAR(MAX)),'旧サーバー名','新サーバー名'
) AS XML
) AS VARBINARY(MAX)
)
WHERE id = '手順1で確認したID';
go
방법 2 유지보수 계획 정의를 Export→수정→Import
(1) SQL Server Management Studio에서 Integration Services에 연결
(2) 대상 유지 보수 계획을 마우스 오른쪽 버튼으로 클릭하여 내보내기
(3) Export 된 파일을 텍스트 편집기에서 열어 서버 이름을 수정
||
DTS:CreatorComputerName="旧サーバー名"
||
<DTS:ConnectionManagers>
<DTS:ConnectionManager
DTS:ConnectionString="Data Source=旧サーバー名;Integrated Security=True ・・・・・
(4) Import
5. 확인
3에 기재된 순서로 유지 보수 계획의 실행 목적지 서버 명이 변경되었는지를 확인한 후, 유지 보수 계획을 실행한다. 정상 종료하면 OK.
참고 URL
유지 보수 계획의 연결 정의를 보면 오래된 서버 이름으로 남아 있으며 이것으로 인해 실행에 실패하고 있음을 알 수 있습니다.
4. 대처법
두 가지 방법이 있습니다.
"방법 1"SQL을 사용하여 유지 보수 계획 정의의 서버 이름 바꾸기
방법 2 유지 보수 계획 정의를 Export → 수정 → Import
방법 1 SQL을 사용하여 유지 관리 계획 정의의 서버 이름 바꾸기
(1) 유지 보수 계획의 ID 확인
use msdb
go
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)
go
(2) 정의 업데이트 실행
use msdb
go
UPDATE dbo.sysssispackages
SET packagedata = CAST(
CAST(
REPLACE(
CAST(CAST(packagedata AS VARBINARY(MAX)) AS VARCHAR(MAX)),'旧サーバー名','新サーバー名'
) AS XML
) AS VARBINARY(MAX)
)
WHERE id = '手順1で確認したID';
go
방법 2 유지보수 계획 정의를 Export→수정→Import
(1) SQL Server Management Studio에서 Integration Services에 연결
(2) 대상 유지 보수 계획을 마우스 오른쪽 버튼으로 클릭하여 내보내기
(3) Export 된 파일을 텍스트 편집기에서 열어 서버 이름을 수정
||
DTS:CreatorComputerName="旧サーバー名"
||
<DTS:ConnectionManagers>
<DTS:ConnectionManager
DTS:ConnectionString="Data Source=旧サーバー名;Integrated Security=True ・・・・・
(4) Import
5. 확인
3에 기재된 순서로 유지 보수 계획의 실행 목적지 서버 명이 변경되었는지를 확인한 후, 유지 보수 계획을 실행한다. 정상 종료하면 OK.
참고 URL
use msdb
go
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)
go
use msdb
go
UPDATE dbo.sysssispackages
SET packagedata = CAST(
CAST(
REPLACE(
CAST(CAST(packagedata AS VARBINARY(MAX)) AS VARCHAR(MAX)),'旧サーバー名','新サーバー名'
) AS XML
) AS VARBINARY(MAX)
)
WHERE id = '手順1で確認したID';
go
||
DTS:CreatorComputerName="旧サーバー名"
||
<DTS:ConnectionManagers>
<DTS:ConnectionManager
DTS:ConnectionString="Data Source=旧サーバー名;Integrated Security=True ・・・・・
3에 기재된 순서로 유지 보수 계획의 실행 목적지 서버 명이 변경되었는지를 확인한 후, 유지 보수 계획을 실행한다. 정상 종료하면 OK.
참고 URL
Reference
이 문제에 관하여(서버 이름을 변경한 후 SQL Server 유지 관리 계획이 실행 오류가 발생할 때의 대응), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sugenuma/items/467b8bf0a214309ae6b2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)