このモニターは、サブスクリプションのレプリケーション マージ エージェント サービスの状態を確認します。SQL Server エージェント Windows サービスはどのエディションの SQL Server Express でもサポートされていないことにご注意ください。したがって、SQL Server Express の場合にはこのモニターを適用できません。
レプリケーション マージ エージェントは、データベース テーブルに保持されている最初のスナップショットをサブスクライバーに適用する実行可能ファイルです。最初のスナップショットの作成後、パブリッシャーで発生したデータの追加変更もマージします。エージェントは構成済みのルールを使用して競合を調整するか、カスタム競合回避モジュールを使用します。SQL Server エージェント Windows サービスはどのエディションの SQL Server Express でもサポートされていないことにご注意ください。したがって、SQL Server Express の場合にはこのモニターを適用できません。
マージ エージェントは、次の理由で失敗する場合があります。
マージ エージェントがパブリッシャー データベースに接続できません (プル サブスクリプション)
マージ エージェントがサブスクライバー データベースに接続できません (プッシュ サブスクリプション)
マージ エージェントが保有期間内に同期しなかったため、サブスクライバーでマージ レプリケーション メタデータが削除されました
サブスクリプションに期限切れのマークが付いています。
クエリのタイムアウト エラー
ネットワーク接続のエラー
非対話性デスクトップ ヒープのためのメモリが不足しており、マージ エージェントを起動できません
不正確なパラメーターがエージェントの実行可能ファイルに渡されました。
この問題は、以下を確認することで解決できます。:
マージ エージェントはパブリッシャーとサブスクライバーの両方には接続できません。パブリッシャーとサブスクライバーの両方のデータベースで、マージ エージェント アカウントの dbo へのアクセスを構成します
サブスクリプションに期限切れのマークが付いている場合、サブスクリプションを再初期化します
マージ エージェントの実行中に、サーバー間のネットワークまたは接続の問題を解決します
パブリッシャーでサブスクリプション メタデータが削除された場合は、サブスクリプションを削除し再作成します。これは、マージ エージェントがサブスクライバーとパブリッシャーに倍の保有期間で同期されなかった場合に発生します。
実行可能ファイルに正しいパラメーターが渡されていることを確認します。
http://support.microsoft.com/kb/949296 の説明に従って、デスクトップ ヒープを大きくします。
ディストリビューション データベース上の msmerge_agents テーブルと msmerge_history テーブルをクエリして、エージェントの失敗に関する詳細を取得します。Msrepl_errors テーブルには、エージェントのすべての障害に関する情報も含まれています。
デスクトップ ヒープの問題
http://support.microsoft.com/kb/949296
レプリケーション マージ エージェント
http://msdn.microsoft.com/library/ms147839.aspx
名前 | 説明 | 既定値 |
アラートの優先順位 | アラートの優先度を定義します。 | 標準 |
アラートの重大度 | アラートの重要度を定義します。 | エラー |
有効 | ワークフローを有効または無効にします。 | はい |
推定ジョブ期間 | ジョブ スケジュールの遵守状況の検査に使用するしきい値 | 15 |
アラートを生成する | ワークフローがアラートを生成するかどうかを定義します。 | はい |
間隔 (秒) | ワークフローを実行する定期的な実行間隔 (秒)。 | 300 |
不明な状態のジョブを表示 | 不明な状態のジョブを含めて、出力とアラートのコンテキストを監視します。正常性に影響します。 | いいえ |
同期時刻 | 同期時刻 |
|
タイムアウト (秒) | ワークフローが終了して失敗とマークされるまでの、ワークフローの許容実行時間を指定します。 | 200 |
データベース接続のタイムアウト (秒) | 指定された期間中にデータベースにアクセスできない場合、ワークフローは失敗し、イベントが登録されます。 | 15 |
Target | Microsoft.SQLServer.Replication.Windows.Subscription | ||
Parent Monitor | System.Health.PerformanceState | ||
Category | PerformanceHealth | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.Replication.Windows.MonitorType.ReplicationAgentState | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Microsoft.SQLServer.Core.RunAs.Monitoring |
<UnitMonitor ID="Microsoft.SQLServer.Replication.Windows.Monitor.SubscriptionMergeAgentState" Accessibility="Public" Enabled="true" Target="SQLReplWD!Microsoft.SQLServer.Replication.Windows.Subscription" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Replication.Windows.MonitorType.ReplicationAgentState" ConfirmDelivery="false" RunAs="SqlCoreLib!Microsoft.SQLServer.Core.RunAs.Monitoring">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Replication.Windows.Monitor.SubscriptionMergeAgentState.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/Property[@Name='Message']$</AlertParameter1>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Health" MonitorTypeStateID="Health" HealthState="Success"/>
<OperationalState ID="Error" MonitorTypeStateID="Error" HealthState="Error"/>
<OperationalState ID="Warning" MonitorTypeStateID="Warning" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<MachineName>$Target/Host/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/MachineName$</MachineName>
<NetbiosComputerName>$Target/Host/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Host/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/InstanceName$</InstanceName>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<ConnectionString>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Core.GenericSubscription']/Distributor$</ConnectionString>
<MonitoringType>$Target/Host/Host/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<XPathName>Merge$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Core.GenericSubscription']/Distributor$$Target/Host/Property[Type='MSRL!Microsoft.SQLServer.Replication.Core.GenericSubscriber']/ConnectionString$$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Core.GenericSubscription']/SubscriptionName$</XPathName>
<ShowJobsWithUnknownState>false</ShowJobsWithUnknownState>
<EstimatedJobDuration>15</EstimatedJobDuration>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>200</TimeoutSeconds>
<CheckMachineAndInstanceName>false</CheckMachineAndInstanceName>
</Configuration>
</UnitMonitor>