게시자에 대한 구독 상태

Microsoft.SQLServer.Replication.Windows.Monitor.PublisherSubscriptionsMonitor (UnitMonitor)

이 모니터는 모든 게시에 대해 비활성 구독이 있는지 여부를 확인합니다.

Knowledge Base article:

요약

구독은 지정된 보존 기간 내에 동기화되지 않은 경우 비활성화되거나 만료될 수 있습니다. 발생하는 동작은 복제 유형 및 초과된 보존 기간에 따라 다릅니다.

원인

구독이 보존 기간 내에 성공적으로 동기화되지 않았습니다.

트랜잭션:

구독이 최대 배포 보존 기간(기본값: 72시간) 내에 동기화되지 않은 경우 구독자에 배달되지 않은 배포 데이터베이스에 변경 내용이 있으면 배포자에서 실행되는 배포 정리 작업에 의해 구독이 비활성화된 것으로 표시됩니다. 이 경우 구독을 다시 초기화해야 합니다.

병합:

게시 보존 기간이 14일인 경우 구독이 14일 이내에 동기화되지 않으면 만료될 수 있습니다. 게시자에서 SQL Server 2005 이상 버전을 실행하고 구독 에이전트를 SQL Server 2005 이상 버전에서 가져온 경우에는 해당 구독의 파티션 데이터가 변경되지 않은 경우에만 구독이 만료됩니다. 예를 들어 구독자가 독일에 있는 고객에 대한 고객 데이터만 받는 것으로 가정해 보겠습니다. 보존 기간이 14일로 설정되어 있으면 지난 14일 동안 독일 고객 데이터가 변경된 경우에만 14일째가 되는 날 구독이 만료됩니다.

해결 방법

배포/병합 에이전트가 오류로 인해 실패했는지 확인합니다. 작업 기록을 확인하고 자세한 정보를 가져옵니다.

비활성화된 구독의 경우 배포 데이터베이스의 Msrepl_errors 테이블에서 모든 오류를 확인합니다. 오류를 해결하고 구독을 다시 초기화합니다.

트랜잭션 복제에 대한 오류가 없는 경우 MSdistribution_history 테이블에서 구독이 비활성화된 원인을 확인하고, 병합 복제에 대한 오류가 없는 경우 msmerge_history 테이블에서 구독이 비활성화된 원인을 확인합니다.

재정의 가능한 매개 변수

이름

설명

기본값

경고 우선 순위

알림 우선 순위를 정의합니다.

보통

경고 심각도

알림 심각도를 정의합니다.

경고

사용

워크플로 사용하거나 사용하지 않도록 설정합니다.

알림 생성

워크플로에서 알림을 생성하는지 여부를 정의합니다.

간격(초)

워크플로를 실행하는 반복 시간 간격(초)입니다.

900

동기화 시간

동기화 시간

 

시간 제한(초)

닫히고 실패한 것으로 표시되기 전에 워크플로를 실행할 수 있는 시간을 지정합니다.

300

데이터베이스 연결 시간 제한(초)

워크플로는 지정된 기간 동안 데이터베이스에 액세스할 수 없으면 실패하며 이벤트를 등록합니다.

15

Element properties:

TargetMicrosoft.SQLServer.Replication.Windows.Publisher
Parent MonitorSystem.Health.ConfigurationState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.Replication.Windows.MonitorType.PublisherSubscriptionsMonitor
RemotableTrue
AccessibilityPublic
Alert Message
Windows의 MSSQL 복제: 게시자에 대한 비활성 구독이 검색되었습니다.
게시자(이름: '{0}', 서버: '{1}')에서 비활성 구독을 발견했습니다.
정보:
{2}
RunAsMicrosoft.SQLServer.Core.RunAs.Monitoring

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.Replication.Windows.Monitor.PublisherSubscriptionsMonitor" Accessibility="Public" Enabled="true" Target="SQLReplWD!Microsoft.SQLServer.Replication.Windows.Publisher" ParentMonitorID="Health!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Replication.Windows.MonitorType.PublisherSubscriptionsMonitor" ConfirmDelivery="false" RunAs="SqlCoreLib!Microsoft.SQLServer.Core.RunAs.Monitoring">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Replication.Windows.Monitor.PublisherSubscriptions.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/InstanceName$</AlertParameter1>
<AlertParameter2>$Target/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/ConnectionString$</AlertParameter2>
<AlertParameter3>$Data/Context/Property[@Name='Message']$</AlertParameter3>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Health" MonitorTypeStateID="Health" HealthState="Success"/>
<OperationalState ID="Warning" MonitorTypeStateID="Warning" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<MachineName>$Target/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/MachineName$</MachineName>
<NetbiosComputerName>$Target/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/InstanceName$</InstanceName>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<ConnectionString>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Core.GenericPublisher']/Distributor$</ConnectionString>
<MonitoringType>$Target/Host/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<DistributorDbName>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Core.GenericPublisher']/DistributorDatabaseName$</DistributorDbName>
<PublisherServerName>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Core.GenericPublisher']/ConnectionString$</PublisherServerName>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
<CheckMachineAndInstanceName>false</CheckMachineAndInstanceName>
</Configuration>
</UnitMonitor>