2016-10-19 1 views
0

zu schaffen, ist das Szenario. Auf einer meiner primären SSMS-Boxen habe ich ungefähr 100 Replikationsstapeljobs. Diese Batch-Jobs replizieren eine Reihe von statischen Daten aus einer "Master" -Datenbank in jede einzelne DB. Es gibt also einen Batch-Job pro DB. Wenn eine neue Datenbank erstellt wird, wird ein neuer Stapeljob erstellt.Also hier eine konsolidierte E-Mail-Benachrichtigung für SQL Batch-Job Ausfälle

Der Batch-Job folgt eine Namenskonvention, ist unten ein Beispiel

PG-APP03-ORIGINS_Master-PG-APP03-100 

So können wir doesn den Server ist PG-APP03 und dass es die ORIGINS_Master Database, aber der Rest des Auftrags Namen‘ Lassen Sie mich schnell die betroffene Datenbank sehen. Wenn ich in die Schritte dieser Job bohren, ich sehe daraus die folgenden

-Subscriber [PG-APP03] -SubscriberDB [ORIGINS_9107L1] 
-Publisher [PG-APP03] 
-Distributor [PG-APP03] 
-DistributorSecurityMode 1 
-PublisherDB [ORIGINS_Master] 

so kann ich die „Teilnehmer“ sehen, ist ein Datenbanknamen, die ich erkennen.

Jedoch habe ich gelegentlich bis zu 20 dieser Arbeitsplätze nicht als erstes am Morgen haben kann. Ich habe die einzelnen E-Mail-Benachrichtigungen deaktiviert, weil die Jobnamen nicht identifizierbar sind. Also komme ich jeden Morgen herein, sehe die Jobausfälle und muss in Schritt 2 jedes Jobs bohren, um den Namen des Abonnenten zu finden.

Ich bin auf der Suche nach Möglichkeiten, wo ich zusammen alle Ausfälle sammeln können, identifizieren sie von dem Abonnenten, und dass mir in einer E-Mail senden.

Nicht nur kann ich dies verwenden, um dann durch die Beseitigung der Probleme schneller arbeiten, kann ich diese E-Mail an einige Schlüsselpersonen als eine Benachrichtigung senden, dass die DB nicht korrekt sind, bis die Replikation behoben ist.

Ich habe im DB einige Routing-Tabellen um und Orte finden, wo die Arbeitsplätze vorhanden ist, wo ich die Schritte sehen, aber ich bin wirklich kämpfen, diese alle zusammen zu setzen.

Jede Hilfe wäre willkommen. Hier

+0

OK, also habe ich ein Skript erstellt, für die die Ausgabe im Grunde ist das, was ich will. Ich habe es an einen Kollegen weitergegeben, der unsere Sys-Pakete erledigt, und er sagt, dass er es automatisch für mich laufen lassen und die Ergebnisse in eine E-Mail schicken kann. Also denke ich könnte es sortiert haben! – Daniel

+0

Der Code ist etwas chaotisch, aber incase jemand stolpert über die Frage hier ist, was ich tat – Daniel

Antwort

0

ist der Code, den ich schrieb, die mir die Ausgabe gab erforderlich

USE MSDB 
GO 

DECLARE @time INT 
SET @time = cast(convert(varchar(8), getdate(), 112) as int) 

SELECT DISTINCT 
    a.Name, 
    b.server, 
    CASE WHEN c.step_name ='Run Agent.' THEN 'Replication' END AS 'Step Name', 
    CASE WHEN c.run_status ='0' THEN 'Failed' END AS 'Run Status', 
    c.run_date, 
    CASE WHEN b.subsystem ='Distribution' THEN SUBSTRING(b.command,38,15) 
    ELSE '' END AS 'Subscriber' 
FROM sysjobs AS a 
INNER JOIN sysjobsteps AS b 
ON a.job_id = b.job_id 
INNER JOIN sysjobhistory AS c 
ON a.job_id=c.job_id 
WHERE c.run_status ='0' 
AND c.step_id ='2' 
AND c.run_date = @time 
AND b.subsystem = 'Distribution' 

Also ich die Spalte Abonnent haben, wo ich in der Lage, was Db in Frage zu entziffern ist ein Replikationsproblem

Result

Verwandte Themen