복제 게시자가 가입자 시스템에 연결하지 못하면 SQL Server가 오류 메시지를 이메일로 보내는 방법

StackOverflow https://stackoverflow.com/questions/1824939

문제

SQL Server 2005 복제를 설정 한 몇 가지 원격 위치가 있습니다. 때로는 출판사가 다음과 같은 여러 가지 이유로 복제되지 않습니다.

1) 네트워크 문제,

2) 가입자의 부적절한 종료,

3) 도메인 암호 변경,

4) SQL 암호 변경,

5) 가입자 시스템을 켜지 못한다.

SQL Server가 관리자에게 이메일을 보내면서 이메일을 보내도록 할 수있는 방법이 있습니까?

감사합니다, 차크.

도움이 되었습니까?

해결책

내가 일반적으로 이것을 처리하는 방식은 복제 에이전트를 시작/실행하는 일을 담당하는 SQL 에이전트 작업을 수정하는 것입니다 (복제 토폴로지에 따라 잠재적으로 다른 장소에 다양한 것을 가질 수 있습니다). 해당 단계가 완료/실패한 경우/시기에 실행되는 "실행 에이전트"단계 (즉, 로그 리더 에이전트, 유통 에이전트, 병합 에이전트, 대기열 에이전트 등)에 적절한 에이전트 작업에 작업 단계를 추가하기 만하면됩니다. 연속 일정을 사용하는지 여부에 따라).

예를 들어, 트랜잭션 Uni-Directional Push Publication Setup이있는 경우 유통 에이전트가 유통 업체에서 실행됩니다. 유통 업체에 연결 하고이 출판물의 유통 에이전트를 실행할 책임이있는 SQL 에이전트 작업을 찾으면 작업을 수정하고 "실행 에이전트"단계가 실패/완료되면 특정 그룹에 이메일을 보내는 단계를 추가 할 수 있습니다. 연속 복제 스케줄을 사용하는 경우 "런 에이전트"단계가 마무리되면 이메일에 단계를 추가하겠습니다 (에이전트가 어떤 이유로 멈추는 경우에 알림을 받으려고합니다). 연속적 인 일정을 사용하는 경우 대신 "런 에이전트"단계의 실패에 대해서만 이메일 단계를 실행할 수 있습니다. 이 "이메일"단계를 구성하여 이메일을 보내고 잠시 멈추고 약간의 일시 정지를 한 다음 에이전트를 자동으로 다시 시작해보십시오 (성공시 "1 단계로 이동하기위한 단계를 구성하는 것").

다음은 위의 개요와 같이 구성된 분배 에이전트의 작업 단계가 어떻게 보이는지를 나타내는 스크린 샷입니다.

distribution agent configured with notify, pause, restart step

위의 그림에서 에이전트가 중지 될 때마다 실행되는 "Notify, Pause, Retry"라는 단계를 추가했다는 것을 알 수 있습니다 (성공 또는 실패 - 연속 복제 일정을 사용하고 단순히 원하는 경우 의도적입니다. 유통 에이전트가 어떤 이유로 든 실행되지 않을 때마다 알기). 이 단계는 기본적으로 이메일을 특정 그룹으로 보내고 1 ~ 2 분 동안 기다린 다음 에이전트를 다시 시작합니다. 코드를 추가하여 로깅을 포함하여 원하는대로 작업을 수행 할 수 있습니다. 특정 시간 슬라이스 등에 특정 시간에 특정 횟수 만 다시 시작할 수 있습니다. 수의 에이전트, 간행물 등에 쉽게 스크립트하고 반복 할 수 있습니다 (새로운 보장을위한 스크립트가 있습니다. 모든 유형의 토폴로지의 복제 에이전트에는 이러한 유형의 구성이 포함됩니다. 그러면 환경에 배포하는 방법에 따라 릴리스 도구에 추가하거나 실행을 예약하는 문제입니다).

다른 팁

에이전트 문제를 감지하는 한 Logreader와 유통 업체가 언제 중지되는지 알고 싶습니다. 광산은 또한 Chadhoc과 같은 지속적인 복제이지만 에이전트가 중지되는지 알려주는 경고를 사용하는 것이 더 쉽다는 것을 알았습니다.

USE [msdb] 
GO 
EXEC msdb.dbo.sp_add_alert  
    @name=N'Distribution agent stopped',   
    @message_id=0,  
    @severity=0,  
    @enabled=1,   
    @delay_between_responses=2160, 
    @include_event_description_in=1,   
    @category_name=N'[Uncategorized]',  
    @performance_condition=N'MSSQL$MYDATABASE:Replication Agents|Running|Distribution|=|0', 
    @job_id=N'00000000-0000-0000-0000-000000000000' 
GO 
EXEC msdb.dbo.sp_update_notification 
    @alert_name=N'Distribution agent stopped',   
    @operator_name=N'Amit',  
    @notification_method = 1 

유효성 검사/동기 오류는 그렇게 간단하지 않습니다. 야간 작업을 설정하여 실행할 수 있습니다 sp_publication_validation "유효성 검사 실패"에 대한 또 다른 경고를 설정합니다.

나는 구체적으로 복제에 대해 많이 모른다 SP_READERRORLOG 데이터베이스 인스턴스 내에서 DB 로그에 액세스 할 수있는 매우 유용한 저장 프로 시저입니다. 필요한 경우 에이전트 작업의 성공/실패 분기보다는 특정 오류 메시지를 기반으로 더 적절하게 응답 할 수 있습니다. 물론 저장된 Proc에서 직접 이메일을 보낼 수 있으며, 오류에 가장 잘 대응할 수있는 사람 (예를 들어 주 시간/야간 교대 코디네이터)에 따라 수신자를 사용자 정의 할 수 있습니다.

또한 잠재적 실패에 네트워크 단절성이 포함 된 경우 작업이 실패하지 않고 성공하면 이메일을 보내는 것이 더 적절할까요? 이받은 편지함을 모니터링하기 위해 교환 규칙을 설정하고 예상되는 성공 메시지를받지 못하면 관리자에게 오류 알림을 발사 할 수 있습니다 ... 인간은 일정한 자극과 부족을 필터링하는 데 매우 능숙합니다. 성공 메시지는 쉽게 놓칠 수 있습니다. 반면에 교환은 항상 (보통) 경계입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top