このモニターは、サブスクリプションのレプリケーション ディストリビューション エージェント サービスの状態を確認します。SQL Server エージェントの Windows サービスはどのエディションの SQL Server Express でもサポートされていないことにご注意ください。したがって、SQL Server Express の場合にはこのモニターを適用できません。
レプリケーション ディストリビューション エージェントは、スナップショットおよびトランザクション レプリケーションで使用される実行可能ファイルです。エージェントはディストリビューション データベース テーブルに保持されているスナップショットおよびトランザクションを、サブスクライバーの受信テーブルに移動します。SQL Server エージェントの Windows サービスはどのエディションの SQL Server Express でもサポートされていないことにご注意ください。したがって、SQL Server Express の場合にはこのモニターを適用できません。
ディストリビューション エージェントが実行されているアカウントに十分なアクセス許可がない。
クエリがタイムアウトになりました。
サブスクライバーに主キー違反または「行が見つかりません」というエラーがあります。
エージェントがディストリビューションまたはサブスクライバー データベースに接続できません。
非対話性デスクトップ ヒープのためのメモリが不足している。 http://support.microsoft.com/kb/949296
ディストリビューション エージェントが 'C:\Program Files\Microsoft SQL Server \100\COM' ディレクトリに一時ファイルを作成することに失敗しました (SQL 2008 および SQL 2008 R2 に該当)。 http://support.microsoft.com/kb/956032
ディストリビューション エージェントはスナップショット ファイルを参照できません
ディストリビューション エージェントは必要な権限を保持していません。
不正確なパラメーターがディストリビューション エージェント コマンドに渡されました。
プロセスはテーブルに一括コピーできませんでした
必要なアクセス権があるアカウントでディストリビューション エージェントを実行していることを確認します。必要なアクセス権を確認するには、 この記事を参照してください。
レプリケーション トポロジに多数のサーバーがある場合、SQL Server エージェントはドメイン アカウントで実行する必要があります。
ディストリビューション エージェントのアカウントは、ディストリビューションおよびサブスクライバー データベースの [db_owner] 固定ロールのメンバーである必要があります。
クエリがタイムアウトします。
ディストリビューターおよびサブスクライバーでのブロッキングを確認し、ディストリビューション エージェントをブロックしているものがあるか確認します。ブロッキングを解決し、エージェントを再実行します。
ディストリビューション エージェントのクエリのタイムアウト値を長くするか、0 (無制限待機) にします
サブスクライバーに主キー違反または「行が見つかりません」エラーがあります。
すべての挿入、更新および削除コマンドがレプリケートされていることをアーティクルのプロパティで確認します。
ユーザーがサブスクライバーのデータベースに書き込みアクセス権を持たないことを確認します。
ディストリビューション エージェントの -skiperrors パラメーターを使用し、このエラーを無視します (これは一時的な修正として使用し、根本的な問題を解決してください)
ディストリビューションまたはサブスクライバー データベースに接続できません。
ディストリビューション エージェントのアカウントが、ディストリビューション サブスクライバー データベースの [db_owner] 固定ロールのメンバーであることを確認します。Management Studio からサブスクライバーとディストリビューション データベースの両方に接続できることを確認します。
ディストリビューターおよびパブリッシャーで、SQL Server が使用する TCP および UDP ポートをファイアウォールで有効にします (既定ではポート 1433 が使用されます)。
非対話性デスクトップ ヒープのためのメモリが不足しています。
この KB の次の回避策のいずれかを使用して、問題を解決します。
ディストリビューション エージェントは、'C:\Program Files\Microsoft SQL Server\100\COM' ディレクトリに一時ファイルを作成できませんでした (SQL 2008 と SQL 2008 R2 に該当)。この サポート技術情報を参照して、問題を解決してください。
ディストリビューション エージェントがスナップショット ファイルを参照できません。スナップショット フォルダーの保存には UNC パスを使用します。ディストリビューション エージェントのアカウントに、読み取りのアクセス許可を割り当て付与します。
クライアントが必要な権限を保持していません。 http://msdn.microsoft.com/library/ms143504.aspx にアクセスし、SQL エージェント サービス SID に次の権限があることをご確認ください。
サービスとしてログオンする (SeServiceLogonRight)
プロセス レベルのトークンを置き換える (SeAssignPrimaryTokenPrivilege)
スキャン検査を回避する (SeChangeNotifyPrivilege)
プロセスのメモリ クォータを調整する (SeIncreaseQuotaPrivilege)
正しくないパラメーターがディストリビューション エージェント コマンドに渡されました。ディストリビューション エージェントのコマンド ラインに渡されるパラメーターを調べてください。
ディストリビューション エージェント ジョブの –BCPBatchSize パラメーターに渡される値を減らします。
ディストリビューション エージェントを再実行し、パラメーター -OutputVerboseLevel 2 を追加します。 これにより、失敗したステートメントに関する詳細をさらに得ることができます。
バックアップを使用してサブスクライバーを初期化します。
http://technet.microsoft.com/library/ms151868.aspx
名前 | 説明 | 既定値 |
アラートの優先度 | アラートの優先順位を定義します。 | 中 |
アラートの重要度 | アラートの重大度を定義します。 | エラー |
有効化 | ワークフローを有効または無効にします。 | はい |
推定ジョブ期間 | ジョブ スケジュールの遵守状況の検査に使用するしきい値 | 15 |
警告を生成する | ワークフローがアラートを生成するかどうかを定義します。 | はい |
間隔 (秒) | ワークフローを実行する定期的な実行間隔 (秒)。 | 300 |
不明な状態のジョブを表示 | 不明な状態のジョブを含めて、出力とアラートのコンテキストを監視します。正常性に影響します。 | いいえ |
同期時間 | 同期時間 |
|
タイムアウト (秒) | ワークフローが終了して失敗とマークされるまでの、ワークフローの許容実行時間を指定します。 | 300 |
データベース接続のタイムアウト (秒) | 指定された期間中にデータベースにアクセスできない場合、ワークフローは失敗し、イベントが登録されます。 | 15 |
Target | Microsoft.SQLServer.2012.Replication.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.2012.Replication.MonitorType.ReplicationAgentState | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Microsoft.SQLServer.Replication.Monitoring.RunAs.Monitor |
<UnitMonitor ID="Microsoft.SQLServer.2012.Replication.Monitor.SubscriptionDistributionAgentState" Accessibility="Public" Enabled="true" Target="MS2RD!Microsoft.SQLServer.2012.Replication.Subscription" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2012.Replication.MonitorType.ReplicationAgentState" ConfirmDelivery="false" RunAs="MSRL!Microsoft.SQLServer.Replication.Monitoring.RunAs.Monitor">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2012.Replication.Monitor.SubscriptionDistributionAgentState.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>
<SqlTimeout>15</SqlTimeout>
<ConnectionString>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericSubscription']/Distributor$</ConnectionString>
<XPathName>Distribution$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericSubscription']/Distributor$$Target/Host/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericSubscriber']/ConnectionString$$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericSubscription']/SubscriptionName$</XPathName>
<ShowJobsWithUnknownState>false</ShowJobsWithUnknownState>
<EstimatedJobDuration>15</EstimatedJobDuration>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>