2007~2011/SQL Server2010. 12. 9. 09:04

SQL Server 2008 에서 기본적으로 제공되는 Syspolicy_purge_history 예약된 작업이 클러스터 환경에서 실패하는 현상과 관련하여 아래와 같이 정리하였습니다.


[환경]

SQL Server 2008 SP1 failover cluster


[현상]
Syspolicy_purge_history 예약된 작업이 아래와 같은 오류가 발생하며 매번 실패합니다.

날짜                  2010-12-08 오전 2:00:00

로그                  작업 기록 (syspolicy_purge_history)

단계 ID              3

작업 이름                       syspolicy_purge_history
단계 이름                       Erase Phantom System Health Records.
기간                  00:00:37

메시지

다음 사용자로 실행되었습니다: DC\SQLCLUSTER. 작업 스크립트에 다음 오류가 발생했습니다. 이러한 오류로 인해 스크립트가 중지되지는 않았습니다.  작업 단계의 PowerShell 스크립트에 있는 줄 1에 오류가 발생했습니다. 해당 줄은 '(Get-Item SQLSERVER:\SQLPolicy\LAIGODB01\DEFAULT).EraseSystemHealthPhantomRecords()'입니다. 스크립트를 수정하고 작업을 다시 예약하십시오. PowerShell이 반환한 오류 정보는 다음과 같습니다: 'SQL Server PowerShell 공급자 오류: 'LAIGODB01\DEFAULT'에 연결할 수 없습니다. [서버 LAIGODB01에 연결하지 못했습니다. --> SQL Server에 연결을 설정하는 중에 네트워크 관련 또는 인스턴스 관련 오류가 발생했습니다. 서버를 찾을 수 없거나 액세스할 수 없습니다. 인스턴스 이름이 올바르고 SQL Server가 원격 연결을 허용하도록 구성되어 있는지 확인하십시오. (provider: 명명된 파이프 공급자, error: 40 - SQL Server에 대한 연결을 열 수 없습니다.)]  서버 LAIGODB01에 연결하지 못했습니다.  SQL Server에 연결을 설정하는 중에 네트워크 관련 또는 인스턴스 관련 오류가 발생했습니다. 서버를 찾을 수 없거나 액세스할 수 없습니다. 인스턴스 이름이 올바르고 SQL Server가 원격 연결을 허용하도록 구성되어 있는지 확인하십시오. (provider: 명명된 파이프 공급자, error: 40 - SQL Server에 대한 연결을 열 수 없습니다.)  '  작업 단계의 PowerShell 스크립트에 있는 줄 1에 오류가 발생했습니다. 해당 줄은 '(Get-Item SQLSERVER:\SQLPolicy\LAIGODB01\DEFAULT).EraseSystemHealthPhantomRecords()'입니다. 스크립트를 수정하고 작업을 다시 예약하십시오. PowerShell이 반환한 오류 정보는 다음과 같습니다: ''SQLSERVER:\SQLPolicy\LAIGODB01\DEFAULT' 경로는 존재하지 않으므로 찾을 수 없습니다.  '  작업 단계의 PowerShell 스크립트에 있는 줄 1에 오류가 발생했습니다. 해당 줄은 '(Get-Item SQLSERVER:\SQLPolicy\LAIGODB01\DEFAULT).EraseSystemHealthPhantomRecords()'입니다. 스크립트를 수정하고 작업을 다시 예약하십시오. PowerShell이 반환한 오류 정보는 다음과 같습니다: 'null 값 식에서 메서드를 호출할 수 없습니다.  '.  종료 코드 -1을(를) 처리합니다.  단계가 실패했습니다.


[원인]
Syspolicy_purge_history 의 3단계 작업(Erase Phantom System Health Records)에서 사용되는 명령에서 가상서버 이름 대신 컴퓨터 노드 이름이 사용되어 발생하였습니다.


[해결방법] 
참고자료 링크 KB955726 과 같이 Re-create the syspolicy_purge_history job 을 통해 새롭게 작업을 만들면 됩니다. (권장)

또는 아래와 같이 예약된 작업 단계에서 등록된 명령에 포함된  컴퓨터 노드 이름을 가상서버 이름으로 변경합니다.

SSMS 실행 -  SQL Server 에이전트 - 작업 - syspolicy_purge_history - 속성 - 단계 - 3. Erase Phantom System Health Records - 편집


기존 설정값 : (Get-Item SQLSERVER:\SQLPolicy\LAIGODB01\DEFAULT).EraseSystemHealthPhantomRecords()
변경값 : (Get-Item SQLSERVER:\SQLPolicy\LAIGODB\DEFAULT).EraseSystemHealthPhantomRecords()


[분석결과]
작업 실패 오류 로그 확인 결과
'SQLSERVER:\SQLPolicy\LAIGODB01\DEFAULT' 경로는 존재하지 않으므로 찾을 수 없습니다.


[참고자료]
The syspolicy_purge_history SQL Server Agent job may fail in SQL Server 2008
http://support.microsoft.com/kb/955726/en-us


작성자 : Lai Go / 작성일자 : 2010.12.08

Posted by Lai Go