Dieser Monitor überprüft den Status der Verteilungs-Agents für alle Veröffentlichungen, die von diesem Verteiler verarbeitet werden.
Fehler mindestens eines Verteilungs-Agents.
Fehler beim Verteilungs-Agent können verschiedene Ursachen haben, beispielsweise:
Das Abonnement wurde nicht initialisiert, und die Momentaufnahme ist nicht verfügbar.
Der Verteilungs-Agent wird unter einem Konto ausgeführt, das nicht über ausreichende Berechtigungen verfügt.
Abfragetimeouts
Verletzung des Primärschlüssels oder Fehler des Typs “Zeile nicht gefunden” auf dem Abonnenten.
Es kann keine Verbindung mit der Verteilungs- oder den Abonnentendatenbanken hergestellt werden.
Speichererschöpfung für den nicht interaktiven Desktopheap. http://support.microsoft.com/kb/949296
Fehler des Verteilungs-Agents beim Erstellen temporärer Dateien im Verzeichnis "C:\Programme\Microsoft SQL Server\100\COM" (gilt für SQL 2008 und SQL 2008 R2) http://support.microsoft.com/kb/956032
Der Verteilungs-Agent kann die Momentaufnahmedateien nicht anzeigen.
Der SQL Agent-Dienst verfügt nicht über die erforderlichen Berechtigungen.
An den Verteilungs-Agent wurden falsche Parameter übergeben.
Der Verteilungs-Agent wird unter einem Konto ausgeführt, das unzureichende Berechtigungen aufweist.
Wenn mehrere Server an der Replikationstopologie beteiligt sind, müssen SQL Server-Agents unter einem Domänenkonto ausgeführt werden.
Das Konto des Verteilungs-Agents muss Mitglied der festen Rolle [db_owner] für die Verteilungs- und Abonnentendatenbanken sein.
Abfragetimeout
Überprüfen Sie, ob eine Blockierung auf dem Verteiler und Abonnenten vorliegt oder der Verteilungs-Agent blockiert ist. Beheben Sie die Blockierung, und starten Sie den Agent neu.
Verwenden Sie für das Abfragetimeout des Verteilungs-Agents einen größeren Wert.
Verletzung des Primärschlüssels oder Fehler des Typs “Zeile nicht gefunden” auf dem Abonnenten.
Überprüfen Sie die Artikeleigenschaften, um zu bestätigen, dass alle Einfügungen repliziert werden. Aktualisieren und löschen Sie Befehle, damit nichts übersprungen wird.
Vergewissern Sie sich, dass Benutzer keinen Schreibzugriff auf die Abonnentendatenbank besitzen.
Konfigurieren Sie den Verteiler-Agent so, dass der Parameter "-skiperrors" zum Ignorieren dieser Fehler verwendet wird (verwenden Sie diese Vorgehensweise als vorübergehende Problembehandlung, und beheben Sie das zugrunde liegende Problem).
Es kann keine Verbindung mit der Verteilungs- oder Abonnentendatenbank hergestellt werden.
Das Konto des Verteilungs-Agents muss Mitglied der festen Rolle [db_owner] für die Verteilungs- und Abonnentendatenbanken sein. Stellen Sie sicher, dass eine Verbindung aus SQL Server Management Studio mit den Verteilungs- und Abonnentendatenbanken hergestellt werden kann.
Aktivieren Sie auf dem Verteiler und dem Verleger die von SQL Server verwendeten TCP- und UDP-Ports in der Firewall.
Ausschöpfung des Speichers für den nicht interaktiven Desktopheap.
Verwenden Sie eine der folgenden Problemumgehungen aus diesem KB-Artikel, um das Problem zu beheben.
Fehler des Verteilungs-Agents beim Erstellen temporärer Dateien im Verzeichnis "C:\Programme\Microsoft SQL Server\100\COM" (gilt für SQL 2008 und SQL 2008 R2)
Verwenden Sie die Problemumgehung aus diesem KB-Artikel, um das Problem zu beheben.
Der Verteilungs-Agent kann die Momentaufnahmedateien nicht lesen.
Verwenden Sie einen UNC-Pfad zum Speichern des Momentaufnahmeordners. Geben Sie den Ordner frei, und erteilen Sie dem Konto des Verteilungs-Agents Leseberechtigungen.
Der SQL Agent-Dienst verfügt nicht über die erforderlichen Berechtigungen.
Befolgen Sie http://msdn.microsoft.com/library/ms143504.aspx, und stellen Sie sicher, dass die SID des SQL Agent-Diensts über die folgenden Rechte verfügt:
Als Dienst anmelden (SeServiceLogonRight)
Token auf Prozessebene ersetzen (SeAssignPrimaryTokenPrivilege)
Traversierungsüberprüfung umgehen (SeChangeNotifyPrivilege)
Speicherkontingente für einen Prozess anpassen (SeIncreaseQuotaPrivilege)
An den Befehl des Verteilungs-Agents wurden falsche Parameter übergeben.
Überprüfen Sie die Parameter, die an die Befehlszeile des Verteilungs-Agents übergeben werden.
Der Vorgang konnte kein Massenkopieren in die Tabelle ausführen.
Verringern Sie den an den Parameter "-BCPBatchSize" im Auftrag des Verteilungs-Agents übergebenen Wert.
Führen Sie den Verteilungs-Agent erneut aus, und fügen Sie den Parameter "-OutputVerboseLevel 2" hinzu. Auf diese Weise werden weitere Details zur fehlerhaften Anweisung abgerufen.
Nur Mitglieder der Rollen "sysadmin" oder "db_owner" können diesen Vorgang ausführen.
Wenn sich die Verteilungsdatenbank und der Abonnent in verschiedenen Domänen befinden und keine Vertrauensstellung zwischen den Domänen vorhanden ist (insbesondere wenn die Abonnentendomäne der Verteilungsdomäne nicht vertraut), muss ein spezifisch benanntes Konto verwendet werden.
Untersuchen Sie die Fehlerdetails des SQL Server-Agents auf dem Abonnenten. Der Abonnentenname ist der erste Teil des angezeigten "Abonnements".
Überprüfen Sie auf dem Abonnenten, ob dieses Agent-Anmeldekonto für die Anmeldung gültig ist.
Überprüfen Sie auf dem Abonnenten, ob das Agent-Anmeldekonto entweder die Rolle "sysadmin" oder die Rolle "db_owner" für die zu replizierende Datenbank besitzt.
http://technet.microsoft.com/library/ms147328.aspx
Name | Beschreibung | Standardwert |
Warnungspriorität | Definiert die Warnungspriorität. | Normal |
Warnungsschweregrad | Definiert den Warnungsschweregrad. | Fehler |
Aktiviert | Aktiviert oder deaktiviert den Workflow. | Ja |
Geschätzte Auftragsdauer | Schwellenwert, der zum Überprüfen der Kompatibilität des Auftragszeitplans verwendet wird. | 15 |
Generiert Warnungen | Definiert, ob der Workflow eine Warnung generiert. | Ja |
Intervall (Sekunden) | Gibt das Wiederholungsintervall in Sekunden für die Ausführung des Workflows an. | 300 |
Aufträge mit unbekanntem Status anzeigen | Aufträge mit unbekanntem Status in die Monitorausgabe und den Warnungskontext einschließen. Wirkt sich auf die Integrität aus. | Nein |
Synchronisierungszeit | Synchronisierungszeit |
|
Timeout (Sekunden) | Gibt an, wie lange der Workflow ausgeführt werden kann, bevor er geschlossen und als fehlerhaft markiert wird. | 200 |
Timeout für Datenbankverbindung (Sekunden) | Es tritt ein Fehler beim Workflow auf, und ein Ereignis wird registriert, wenn der Workflow nicht innerhalb des angegebenen Zeitraums auf die Datenbank zugreifen kann. | 15 |
Target | Microsoft.SQLServer.Replication.Windows.Distributor | ||
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.DistributionAgentState" Accessibility="Public" Enabled="true" Target="SQLReplWD!Microsoft.SQLServer.Replication.Windows.Distributor" 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.DistributionAgentState.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/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/MachineName$</MachineName>
<InstanceName>$Target/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/InstanceName$</InstanceName>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<ConnectionString>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Core.GenericDistributor']/ConnectionString$</ConnectionString>
<MonitoringType>$Target/Host/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<XPathName>Distribution$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Core.GenericDistributor']/ConnectionString$</XPathName>
<ShowJobsWithUnknownState>false</ShowJobsWithUnknownState>
<EstimatedJobDuration>15</EstimatedJobDuration>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>200</TimeoutSeconds>
<CheckMachineAndInstanceName>true</CheckMachineAndInstanceName>
</Configuration>
</UnitMonitor>