Ce moniteur vérifie l'état des services de l'agent de distribution de réplication pour l'abonnement. Notez que le service Windows SQL Server Agent n'est pris en charge par aucune édition de SQL Server Express. Par conséquent, ce moniteur ne s'applique pas aux cas SQL Server Express.
L'agent de distribution de réplication est un exécutable utilisé dans la réplication d'instantané et transactionnelle. L'agent déplace les instantanés et les transactions contenus dans les tables de base de données de distribution vers les tables de destination sur les abonnés. Notez que le service Windows SQL Server Agent n'est pris en charge par aucune édition de SQL Server Express. Par conséquent, ce moniteur ne s'applique pas aux cas SQL Server Express.
L'Agent de distribution est en cours d'exécution sous un compte dont les autorisations sont insuffisantes.
Dépassement du délai d'attente de la requête.
Il existe des violations de clé primaire ou une erreur de type « Ligne introuvable » sur l'abonné.
L'Agent ne peut pas se connecter aux bases de données de distribution ou d'abonné.
Épuisement de la mémoire pour le segment de Bureau non-interactif. http://support.microsoft.com/kb/949296
L’Agent de distribution n’a pas pu créer de fichiers temporaires dans le répertoire « C:\Program Files\Microsoft SQL Server\100\COM » (applicable pour SQL 2008 et SQL 2008 R2) http://support.microsoft.com/kb/956032
L'Agent de distribution ne peut pas voir les fichiers de capture instantanée
L'Agent de distribution n'a pas le privilège requis.
Paramètres incorrects passés à la commande de l'Agent de distribution.
Le processus n'a pas pu copier en bloc dans la table.
Assurez-vous que l’Agent de distribution s’exécute sous un compte disposant des autorisations requises. Pour identifier les autorisations requises, consultez cet article.
Si plusieurs serveurs sont impliqués dans la topologie de réplication, les agents SQL Server doivent s'exécuter sous un compte de domaine.
Le compte de l'Agent de distribution doit être membre du rôle fixe [db_owner] sur les bases de données de distribution et d'abonné.
La requête dépasse le délai d'expiration.
Recherchez un éventuel blocage sur le serveur de distribution et l’abonné, et vérifiez si quelque chose bloque l’Agent de distribution. Le cas échéant, résolvez le blocage, puis redémarrez l’Agent.
Augmenter la valeur du délai de requête de l’Agent de distribution ou la définir sur 0 (attente infinie)
Il existe une violation de clé primaire ou une erreur de type « Ligne introuvable » sur l'abonné.
Vérifiez les propriétés de l'article pour confirmer que toutes les commandes d'insertion, de mise à jour et de suppression sont répliquées.
Vérifiez que les utilisateurs n'ont pas d'accès en écriture à la base de données d'abonné.
Utiliser le paramètre -skiperrors de l’Agent de distribution pour ignorer ces erreurs (utiliser cette solution comme correctif temporaire, puis résoudre le problème sous-jacent)
Impossible de se connecter à la base de données de distribution ou à la base de données de l'abonné.
Veillez à ce que le compte de l'Agent de distribution soit membre du rôle fixe [db_owner] sur les bases de données d'abonné et de distribution. Vérifiez la connexion de Management Studio aux bases de données d'abonné et de distribution.
Sur les serveurs de distribution et de publication, activez les ports TCP et UDP que SQL Server utilise dans le pare-feu (le port 1433 est utilisé par défaut).
Épuisement de la mémoire pour le segment de Bureau non-interactif.
Utilisez les solutions de contournement décrites dans KB pour résoudre le problème.
L’Agent de distribution n’a pas pu créer de fichiers temporaires dans le répertoire « C:\Program Files\Microsoft SQL Server\100\COM » (applicable pour SQL 2008 et SQL 2008 R2). Pour résoudre le problème, utilisez cette solution : KB.
L’Agent de distribution ne peut pas voir les fichiers de capture instantanée. Pour archiver le dossier de captures instantanées, utilisez des chemins d’accès UNC. Partagez et octroyez des autorisations d’accès en lecture au compte de l’Agent de distribution.
Le client ne dispose pas du privilège requis. Suivez le lien http://msdn.microsoft.com/library/ms143504.aspx et assurez-vous que l’ID de sécurité du service SQL Agent dispose des droits suivants :
Ouvrir une session en tant que service (SeServiceLogonRight)
Remplacer un jeton de niveau processus (SeAssignPrimaryTokenPrivilege)
Ignorer la vérification transversale (SeChangeNotifyPrivilege)
Ajuster les quotas de mémoire pour un processus (SeIncreaseQuotaPrivilege)
Des paramètres transmis à la commande de l’Agent de distribution sont incorrects. Vérifiez les paramètres transmis à la ligne de commande de l’Agent de distribution.
Réduisez la valeur transmise au paramètre -BCPBatchSize dans le travail de l'Agent de distribution
Réexécutez l'Agent de distribution, et ajoutez le paramètre -OutputVerboseLevel 2. Vous obtenez ainsi des détails supplémentaires sur l'instruction qui échoue.
Initialisez l'abonné en utilisant une sauvegarde.
http://technet.microsoft.com/library/ms151868.aspx
Nom | Description | Valeur par défaut |
Priorité d'alerte | Définit la priorité de l'alerte. | Normale |
Gravité d'alerte | Définit la gravité de l'alerte. | Erreur |
Activé | Active ou désactive le flux de travail. | Oui |
Durée estimée du travail | Seuil utilisé pour vérifier la conformité de la planification du travail | 15 |
Génère des alertes | Définit si le flux de travail génère une alerte. | Oui |
Intervalle (en secondes) | Intervalle régulier (en secondes) auquel exécuter le flux de travail. | 300 |
Afficher les travaux avec un état inconnu | Incluez les travaux dont l’état est inconnu dans la sortie de l’analyse et le contexte de l’alerte. Cela affecte l’intégrité. | Non |
Heure de synchronisation | Heure de synchronisation |
|
Délai d'attente (secondes) | Spécifie la durée pendant laquelle le flux de travail est autorisé à s'exécuter avant d'être fermé et marqué comme ayant échoué. | 200 |
Délai d’attente pour la connexion de base de données (secondes) | Le workflow échoue et enregistre un événement s’il ne peut pas accéder à la base de données pendant la période spécifiée. | 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.SubscriptionDistributionAgentState" 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.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>
<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>Distribution$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>