Freigeben über


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

Dieser Artikel hilft Ihnen bei der Behandlung von Problemen, die bestimmte Data Warehouse-Aufträge in System Center Service Manager hängen.

Originalproduktversion: 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 hängen geblieben sind:

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

Symptome von hängenen Data Warehouse-Aufträgen umfassen die folgenden:

  • Der Auftrag hat den Status " Ausführen" in der Dienst-Manager-Konsole oder in den PowerShell-Ergebnissen. Der Auftrag wird jedoch lange ausgeführt (z. B. mehr als mehrere Stunden).
  • Die Start- und Endzeit des Auftrags sind inkonsistent.
  • In Ihren Berichten werden keine Daten oder neue Daten angezeigt. Dies kann darauf hindeuten, dass Extraktions-, Transformations- und Load-Aufträge (ETL) nicht ausgeführt werden.

Probleme, die in diesem Artikel nicht behandelt werden:

  • Fehler, die mit einzelnen Modulen auftreten
  • Transform.Common Fehler, die auftreten, wenn ein bestimmtes Modul fehlschlägt oder ein Zeitüberschreitung auftritt
  • Management Pack-Synchronisierungsfehler
  • Probleme bei der Cubeverarbeitung
  • Probleme mit der Datenintegrität

Grundlegendes zur 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 ProcessName . B. und ProcessId.

  • Infra.ProcessModule

    Speichert Informationen zu den ProcessModules, z VertexName . B. (Name des ProcessModule), ProcessModuleIdund ModuleConfig.

  • Infra.ProcessCategory

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

  • Infra.Batch

    Speichert Informationen zu allen Batches, z BatchId. B. , BatchStartTimeund BatchEndTime.

  • Infra.WorkItem

    Speichert Informationen zu allen Stapeln WorkItems . Sie können alle Fehler für einen Batch WorkItems in dieser Tabelle sehen.

  • Infra.Status

    Speichert Informationen zu den jeweiligen StatusIds. Hier sind die daten, die aus der Infra.Status Tabelle zurückgegeben werden.

    StatusId StatusName Beschreibung
    1 Erfolgreich Erfolgreich
    2 Fehler Fehler
    3 Nicht gestartet Nicht gestartet
    4 Wird ausgeführt Wird ausgeführt
    5 Beendet Beendet
    6 Abgeschlossen Abgeschlossen
    7 Wartet Wartet

    Der häufigste Grund für einen hängen gebliebenen Data Warehouse-Auftrag besteht darin, dass der Data Warehouse-Verwaltungsserver die Kommunikation mit Microsoft SQL Server verloren hat. Es tritt auf, wenn SQL Server ohne Wissen des Dienst-Managers aktualisiert wurde. Sie können das Operations Manager-Ereignisprotokoll auf dem Data Warehouse-Verwaltungsserver überprüfen, um festzustellen, ob es sich um den Grund handelt.

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

Vorbereitung

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

    Um die SQL Server-Instanz zu finden, ü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 ihren aktuellen Status abzurufen:

    $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")
    

Alle Auftragspläne deaktivieren

Verwenden Sie den folgenden Befehl, um alle Auftragspläne zu deaktivieren und zu überprüfen, ob 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 aufträge, die ausgeführt werden:

Get-SCDWJob

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

Notiz

Um sicherzustellen, dass Sie keinen aktuell ausgeführten Auftrag beeinträchtigen, lassen Sie alle Aufträge fertig stellen, bevor Sie zum nächsten Schritt gehen, es sei denn, die Aufträge scheinen für immer zu fixieren oder auszuführen.

Beenden des HealthService-Diensts

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

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

  2. Benennen Sie den Ordner "Integritätsdienst Status" 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ängen gebliebenen Aufträge auf "Abgeschlossen" (StatusId = 6)

  1. Suchen Sie den BatchId hängen gebliebenen Auftrag im Ergebnis des Get-SCDWJob Cmdlets.

    Hier ist eine Beispielausgabe:

    BatchId Name Status CategoryName StartTime EndTime IsEnabled
    8806 Load.Common Wird ausgeführt Einlesen 12.02.2016 7:44:00 Uhr Richtig
  2. Führen Sie in SQL Server Management Studio die folgenden Anweisungen aus:

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

Erstellen eines neuen Batches für den hängen gebliebenen Auftrag

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

    EXEC Infra.CreateBatch '<JobName>'
    
  2. Führen Sie den Vorgang erneut ausGet-SCDWJob, stellen Sie sicher, dass der Auftrag über einen neuen BatchId Auftrag verfügt und der Status "Nicht gestartet" lautet.

Alle Sperren freigeben

  1. Führen Sie die folgende SQL Server-Anweisung aus, um die Sperren abzurufen:

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

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

Ü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:

    Ausgabe des Befehls

    Stellen Sie sicher, dass der betroffene Auftrag über eine neue Batch-ID verfügt und alle Aufträge den Wert "True " haben IsEnabled. Wenn für einen Auftrag "False" IsEnabledangezeigt wird, führen Sie die folgende SQL Server-Anweisung aus:

    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.

Alle Auftragspläne aktivieren und den HealthService-Dienst neu starten

  1. Verwenden Sie den folgenden Befehl, um alle Auftragspläne zu aktivieren und zu überprüfen, ob 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 durch Ausführen des Befehls

    Notiz

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

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

  3. Überprüfen Sie, ob das Aufgetretene nicht mehr auftritt. Bei Berichten von Problemen kann es mehrere Stunden dauern, bis der Bericht mit den aktuellen Ergebnissen aktualisiert wird.