Questo monitoraggio controlla lo stato degli agenti di distribuzione per tutte le pubblicazioni gestite dal server di distribuzione.
Uno o più degli agenti di distribuzione non sono riusciti.
Alcune cause che possono spiegare gli errori degli agenti di distribuzione sono:
La sottoscrizione non è stata inizializzata e lo snapshot non è disponibile.
L'agente di distribuzione è in esecuzione con un account che non dispone di autorizzazioni sufficienti.
Timeout della query.
Si è verificata una violazione della chiave primaria o un errore di "riga non trovata" nel Sottoscrittore.
Non è possibile stabilire una connessione con i database di distribuzione o sottoscrittore.
Esaurimento della memoria per l'heap del desktop non interattivo. http://support.microsoft.com/kb/949296
L'agente di distribuzione non è riuscito a creare un file temporaneo nella directory 'C:\Programmi\Microsoft SQL Server\100\COM' (applicabile per SQL 2008 e SQL 2008 R2) http://support.microsoft.com/kb/956032
L'agente di distribuzione non riesce a visualizzare i file di snapshot
Il servizio SQL Agent non ha i privilegi necessari.
Parametri non corretti passati all'agente di distribuzione.
L'agente di distribuzione è in esecuzione con un account che non dispone di autorizzazioni sufficienti.
Se nella topologia di replica sono coinvolti più server, le istanze di SQL Server Agent devono essere eseguite in un account di dominio.
L'account dell'agente di distribuzione deve essere membro del ruolo predefinito [db_owner] nei database di distribuzione e sottoscrittore.
Timeout della query.
Controllare eventuali blocchi nel server di distribuzione e nel Sottoscrittore e verificare se l'agente di distribuzione è bloccato. Risolvere il problema relativo al blocco e riavviare l'agente.
Impostare il timeout di query dell'agente di distribuzione su un valore più elevato.
È stata rilevata una violazione della chiave primaria o errori di "riga non trovata" nel Sottoscrittore.
Controllare le proprietà dell'articolo per confermare che tutti gli inserimenti vengano replicati, quindi aggiornare ed eliminare i comandi per non ignorarne nessuno.
Verificare che gli utenti non dispongano di accesso in scrittura al database sottoscrittore.
Configurare l'agente del server di distribuzione in modo da usare il parametro -skiperrors per ignorare gli errori. Usare questa soluzione come correzione temporanea e risolvere il problema sottostante.
Non è possibile stabilire una connessione con il database di distribuzione o il database sottoscrittore.
L'account dell'agente di distribuzione deve essere membro del ruolo predefinito [db_owner] nei database di distribuzione e sottoscrittore. Verificare che sia possibile stabilire una connessione da SQL Server Management Studio a entrambi i database sottoscrittore e di distribuzione.
Nel server di distribuzione e nel server di pubblicazione abilitare le porte TCP e UDP usate da SQL Server nel firewall.
Esaurimento della memoria per l'heap del desktop non interattivo.
Per risolvere il problema, usare una delle soluzioni alternative descritte nell'articolo KB della Microsoft Knowledge Base.
L'agente di distribuzione non è riuscito a creare i file temporanei nella directory 'C:\Programmi\Microsoft SQL Server\100\COM' (applicabile per SQL 2008 e SQL 2008 R2)
Per risolvere il problema, usare la soluzione alternativa descritta nell'articolo KB della Microsoft Knowledge Base.
L'agente di distribuzione non riesce a leggere i file di snapshot.
Usare un percorso UNC per archiviare la cartella degli snapshot. Condividere la cartella e concedere le autorizzazioni di lettura all'account dell'agente di distribuzione.
Il servizio SQL Agent non ha i privilegi necessari.
Seguire la procedura illustrata in http://msdn.microsoft.com/library/ms143504.aspx e assicurarsi che il SID del servizio SQL Agent disponga dei diritti seguenti:
Accesso come servizio (SeServiceLogonRight)
Sostituzione di token a livello di processo (SeAssignPrimaryTokenPrivilege)
Ignorare controllo incrociato (SeChangeNotifyPrivilege)
Regolazione limite risorse memoria per un processo (SeIncreaseQuotaPrivilege)
Sono stati passati parametri non corretti al comando dell'agente di distribuzione.
Controllare i parametri passati alla riga di comando dell'agente di distribuzione.
Il processo non è riuscito a eseguire la copia bulk nella tabella
Ridurre il valore passato al parametro –BCPBatchSize nel processo dell'agente di distribuzione
Eseguire di nuovo l'agente di distribuzione e aggiungere il parametro -OutputVerboseLevel 2. Nell'output verranno quindi visualizzate informazioni dettagliate sull'istruzione che contiene errori.
Solo i membri dei ruoli sysadmin o db_owner possono eseguire questa operazione.
Se il database di distribuzione e il sottoscrittore si trovano in domini diversi e non esiste alcuna relazione di trust tra i domini, in particolare se il dominio sottoscrizione non considera attendibile il dominio di distribuzione, è necessario usare un account denominato in modo specifico.
Esaminare i dettagli dell'errore dell'agente di SQL Server nel Sottoscrittore. Il nome del sottoscrittore sarà costituito dalla prima parte della 'Sottoscrizione' visualizzata.
Nel sottoscrittore controllare che questo account di accesso dell'agente sia un account di accesso valido.
Nel sottoscrittore controllare che l'account di accesso dell'agente disponga del ruolo 'sysadmin' o 'db_owner' per il database in fase di replica.
http://technet.microsoft.com/library/ms147328.aspx
Nome | Descrizione | Valore predefinito |
Priorità avviso | Definisce la priorità dell'avviso. | Normale |
Gravità avviso | Definisce la gravità dell'avviso. | Errore |
Abilitato | Abilita o disabilita il flusso di lavoro. | Sì |
Durata stimata del processo | Soglia usata per controllare la conformità con la pianificazione processo | 15 |
Genera avvisi | Definisce se il flusso di lavoro genera un avviso. | Sì |
Intervallo (secondi) | Intervallo di tempo ricorrente in secondi in cui eseguire il flusso di lavoro. | 300 |
Mostra i processi con stato sconosciuto | Include i processi con stato sconosciuto nell'output del monitoraggio e nel contesto dell'avviso. Ha effetto sull'integrità. | No |
Ora di sincronizzazione | Ora di sincronizzazione |
|
Timeout (secondi) | Specifica il tempo di esecuzione consentito per il flusso di lavoro prima che venga chiuso e contrassegnato come non riuscito. | 300 |
Timeout per la connessione di database (secondi) | Il flusso di lavoro avrà esito negativo e registrerà un evento se non riesce ad accedere al database durante il periodo specificato. | 15 |
Target | Microsoft.SQLServer.2016.Replication.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.2016.Replication.MonitorType.ReplicationAgentState | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Microsoft.SQLServer.Replication.Monitoring.RunAs.Monitor |
<UnitMonitor ID="Microsoft.SQLServer.2016.Replication.Monitor.DistributionAgentState" Accessibility="Public" Enabled="true" Target="MS2RD!Microsoft.SQLServer.2016.Replication.Distributor" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2016.Replication.MonitorType.ReplicationAgentState" ConfirmDelivery="false" RunAs="MSRL!Microsoft.SQLServer.Replication.Monitoring.RunAs.Monitor">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.Replication.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>
<SqlTimeout>15</SqlTimeout>
<ConnectionString>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericDistributor']/ConnectionString$</ConnectionString>
<XPathName>Distribution$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericDistributor']/ConnectionString$</XPathName>
<ShowJobsWithUnknownState>false</ShowJobsWithUnknownState>
<EstimatedJobDuration>15</EstimatedJobDuration>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>