Problembehandlung bei hängen gebliebenen Data Warehouse-Aufträgen in System Center Service Manager

Dieser Artikel hilft Ihnen bei der Problembehandlung, dass bestimmte Data Warehouse-Aufträge in System Center Service Manager hängen.

Ursprüngliche Produktversion:   System Center 2016 Service Manager, System Center 2012 R2 Service Manager, System Center 2012 Service Manager
Ursprüngliche KB-Nummer:   4040022

Zusammenfassung

Dieser Artikel hilft Ihnen bei der Problembehandlung, wenn die folgenden Data Warehouse-Aufträge nicht mehr unterstützt werden:

  • MPSyncJob
  • DWMaintenance
  • Extrahieren von Aufträgen für die Service -Manager-Verwaltungsgruppe und die Data Warehouse-Verwaltungsgruppe
  • Transform.Common
  • Load.Common
  • Load.CMDWDataMart
  • Load.OMDWDataMart

Zu den Symptomen des Aufhängens von Data Warehouse-Aufträgen gehören die folgenden:

  • Der Auftrag hat den Status "Ausgeführt" in der Service -Manager-Konsole oder in den PowerShell-Ergebnissen. Der Auftrag wird jedoch lange ausgeführt (z. B. länger als mehrere Stunden).
  • Die Start- und Endzeit des Auftrags sind inkonsistent.
  • Sie sehen keine Daten oder neuen Daten in Ihren Berichten. Dies kann darauf hinde deuten, dass die Aufträge "Extrahieren", "Transformieren" und "Laden" (ETL) nicht ausgeführt werden.

Probleme, die in diesem Artikel nicht behandelt werden:

  • Fehler, die bei einzelnen Modulen auftreten
  • Transform.Common Fehler, die auftreten, wenn ein bestimmtes Modul ausfällt oder ein Zeitausfall auftritt
  • Fehler bei der Management Pack-Synchronisierung
  • Probleme bei der Cubeverarbeitung
  • Probleme mit der Datenintegrität

Verstehen der Staging- und Konfigurationsdatenbank

Die DWStagingAndConfig Datenbank ist die Datenbank, die bei der Problembehandlung verwendet werden soll. Hier ist eine Liste der Tabellen in der Datenbank:

  • Infra.Process

    Speichert Informationen zu den Aufträgen, z. B. ProcessName und ProcessId .

  • Infra.ProcessModule

    Speichert Informationen über das ProcessModules , z. VertexName B. (Name des ProcessModule ) und ProcessModuleId ModuleConfig .

  • Infra.ProcessCategory

    Speichert Informationen zu den Prozesskategorien, z. B. ProcessCategoryName und IsEnabled . Der Wert von IsEnabled 1 muss 1 sein, damit ein Prozess in dieser Kategorie ausgeführt werden kann.

  • Infra.Batch

    Speichert Informationen zu allen Batches, z. B. BatchId BatchStartTime , und BatchEndTime .

  • Infra.WorkItem

    Speichert Informationen zu allen WorkItems Batches. In dieser Tabelle werden fehlerde Fehler WorkItems eines Batches angezeigt.

  • Infra.Status

    Speichert Informationen zu den entsprechenden StatusIds . Hier sind die von der Tabelle zurückgegebenen Infra.Status Daten.

    StatusId StatusName Beschreibung
    1 Erfolg Erfolg
    2 Fehlgeschlagen Fehlgeschlagen
    3 Nicht gestartet Nicht gestartet
    4 Wird ausgeführt Wird ausgeführt
    5 Beendet Beendet
    6 Abgeschlossen Abgeschlossen
    7 Warten Warten

Der häufigste Grund für einen hängen gebliebenen Data Warehouse-Auftrag ist, dass der Data Warehouse Management Server die Kommunikation mit Microsoft SQL Server. Er tritt auf, SQL Server ohne Wissen des Service -Manager-Administrators aktualisiert wurde. Sie können das Operations Manager-Ereignisprotokoll auf dem Data Warehouse Management Server überprüfen, um festzustellen, ob dies der Grund ist.

Aus anderen Gründen können Sie Windows PowerShell cmdlets und SQL Server zur Problembehandlung verwenden. Im folgenden Lösungsprozess werden alle PowerShell-Cmdlets auf dem Data Warehouse-Verwaltungsserver ausgeführt, und die SQL Server-Anweisungen werden für die Datenbank DWStagingAndConfig ausgeführt.

Vorbereitung

  1. Starten SQL Server Management Studio, und stellen Sie sicher, dass Sie eine Verbindung mit dem SQL Server herstellen können, der die Datenbank DWStagingAndConfig hostet.

    Wenn Sie die SQL Server suchen, überprüfen Sie die Registrierung, oder geben Sie den folgenden Befehl ein:

    $sql = Get-ItemProperty -path "HKLM:\SOFTWARE\Microsoft\System Center\2010\Common\Database";$sql.StagingSQLInstance
    
  2. Verwenden Sie den folgenden Befehl, um die Liste der Aufträge und deren aktuellen Status zu erhalten:

    $jobs = Get-SCDWJob;$jobs | ft -autosize
    

    Wenn keine Ergebnisse zurückgegeben werden oder ein Fehler auftritt, verwenden Sie den folgenden Befehl, um das Data Warehouse-Cmdlets-Modul zu laden, und führen Sie dann den vorherigen Befehl erneut aus:

    import-module (((Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\System Center\2010\Common\Setup").InstallDirectory)+ "Microsoft.EnterpriseManagement.Warehouse.Cmdlets.psd1")
    

Deaktivieren aller Auftragszeitpläne

Verwenden Sie den folgenden Befehl, um alle Auftragszeitpläne zu deaktivieren und sicherzustellen, dass alle Zeitpläne deaktiviert sind ( ScheduleEnabled = False):

foreach($job in $jobs){Disable-SCDWJobSchedule -jobname $job.name};Get-SCDWJobSchedule | ft -autosize

Warten, bis alle ausgeführten Aufträge abgeschlossen sind

Führen Sie den folgenden Befehl wiederholt aus, bis alle Ausgeführten Aufträge abgeschlossen sind:

Get-SCDWJob

Wenn bestimmte Aufträge scheinbar für immer ausgeführt werden, führen Sie die nächsten Schritte aus, um die Aufträge zurückzusetzen.

Hinweis

Um sicherzustellen, dass Sie keinen derzeit ausgeführten Auftrag stören, lassen Sie alle Aufträge fertig stellen, bevor Sie mit dem nächsten Schritt beginnen, es sei denn, die Aufträge scheinen zu fixieren oder für immer ausgeführt zu werden.

Beenden des Integritätsdiensts

  1. Verwenden Sie Service Control Manager (Services.msc), um den Microsoft Monitoring Agent Service (HealthService.exe) zu beenden.

    Sie können auch den Befehl oder das Cmdlet verwenden, Net Stop HealthService um den Dienst zu Stop-Service beenden.

  2. Benennen Sie den Statusordner des Integritätsdiensts um.

    Verwenden Sie den folgenden Befehl, um den Ordnerspeicherort zu finden:

    $dir = Get-ItemProperty -path "HKLM:\SOFTWARE\Microsoft\System Center\2010\Common\Setup";$dir.installdirectory
    

Festlegen des Status aller Module der hängenden Aufträge auf "Abgeschlossen" (StatusId = 6)

  1. Suchen Sie im Ergebnis des Cmdlets nach dem BatchId auftragsverklebten Get-SCDWJob Auftrag.

    Hier ist eine Beispielausgabe:

    BatchId Name Status CategoryName StartTime EndTime IsEnabled
    8806 Load.Common Wird ausgeführt Laden 2.12.2016 07:44:00 Richtig
  2. Führen SQL Server Management Studio folgenden Anweisungen aus:

    UPDATE Infra.WorkItem SET StatusId = 6 WHERE BatchId = '<BatchId>'
    UPDATE Infra.Batch SET StatusId = 6 WHERE BatchId = '<BatchId>'
    
  3. Führen Sie den Get-SCDWJob Status erneut aus, um den Status zu überprüfen.

Erstellen eines neuen Batches für den nicht verkn nnten Auftrag

  1. Führen Sie die folgende SQL Server aus:

    EXEC Infra.CreateBatch '<JobName>'
    
  2. Führen Sie erneut aus, stellen Sie sicher, dass der Auftrag einen neuen hat und Get-SCDWJob der Status nicht gestartet BatchId ist.

Alle Sperren los lassen

  1. Führen Sie die folgende SQL Server aus, um die Sperren zu erhalten:

    SELECT * FROM LockDetails
    
  2. Wenn das Ergebnis nicht leer ist, führen Sie die folgende Anweisung aus, um die Sperre frei zu lassen:

    EXEC dbo.ReleaseLock
    @ResourceName = '<ResourceName>',
    @LockRequester = '<LockRequester>'
    
  3. Wiederholen Sie die Schritte 1 und 2, bis alle Sperren freigegeben sind.

Überprüfen des Auftragsstatus

  1. Führen Sie den folgenden Befehl aus:

    Get-SCDWJob
    
  2. Stellen Sie sicher, dass die Ausgabe ähnlich dem folgenden Screenshot angezeigt wird:

    Auftragsausgabe

    Stellen Sie sicher, dass der betroffene Auftrag eine neue BatchId hat und alle Aufträge den Wert True für IsEnabled haben. If any job shows False for IsEnabled , run the following SQL Server statement:

    UPDATE infra.ProcessCategory SET IsEnabled = 1 WHERE IsEnabled = 0
    

Testen, ob der betroffene Auftrag ordnungsgemäß ausgeführt wird

Verwenden Sie den folgenden Befehl, um den betroffenen Auftrag zu starten:

Start-SCDWJob -jobname \<JobName>

Wenn der Auftrag erfolgreich abgeschlossen wurde, fahren Sie mit dem nächsten Schritt fort.

Aktivieren aller Auftragszeitpläne und Neustarten des Integritätsdiensts

  1. Verwenden Sie den folgenden Befehl, um alle Auftragszeitpläne zu aktivieren und sicherzustellen, dass alle Zeitpläne aktiviert sind (ScheduleEnabled=True):

    foreach($job in $jobs){Enable-SCDWJobSchedule -jobname $job.name};Get-SCDWJobSchedule | ft -autosize
    
  2. Starten Sie den Microsoft Monitoring Agent-Dienst (HealthService.exe).

Überprüfen des Auftragsstatus

  1. Führen Sie den folgenden Befehl aus:

    Get-SCDWJob
    

    Die Ausgabe sollte dem folgenden Screenshot ähneln:

    Ausgabe der Überprüfung des Auftragsstatus

    Hinweis

    Möglicherweise werden Sie sehen, dass einige Prozesskategorien deaktiviert sind. Dies ist normal, da Prozesse für die DWMaintenance MPSyncJob Synchronisierung möglicherweise deaktiviert werden.

  2. Überwachen Sie die Aufträge eine Weile, um sicherzustellen, dass sie ordnungsgemäß ausgeführt werden.

  3. Stellen Sie sicher, dass das Problem, das aufting, nicht mehr auftritt. Bei Berichtsproblemen kann es mehrere Stunden dauern, bis der Bericht mit den aktuellen Ergebnissen aktualisiert wurde.