Verarbeitung der DBQueue Prozessor Aufträge durch den Database Agent Service
Für die Verarbeitung der internen Aufträge durch den Database Agent Service, stellen Sie sicher, dass der Database Agent Service installiert und konfiguriert ist. Der Database Agent Service wird über ein Plugin des One Identity Manager Service bereitgestellt. Das Plugin sollte auf dem Jobserver konfiguriert sein, der die Serverfunktion Aktualisierungsserver übernimmt. Für die Datenbankverbindung im Jobprovider muss ein administrativer Benutzer verwendet werden.
Der Database Agent Service übernimmt folgende Aufgaben:
-
Steuerung der Verarbeitung und Verteilung der Aufträge der DBQueue an die einzelnen Slots (zentraler Dispatcher)
-
Prüfen und Starten von zeitgesteuerten Aufträgen
-
Entfernen von bereits verarbeiteten DBQueue Aufträgen
-
Starten von Wartungsarbeiten
-
Befüllen und Aktualisieren der Jobqueue Übersicht
-
Archivieren oder Löschen von verarbeiteten Prozessen aus der Jobqueue
-
Archivieren oder Löschen von Aufzeichnungen aus der Prozessverarbeitung
HINWEIS: Wenn der Database Agent Service nicht arbeitet, wird in allen Administrationswerkzeugen eine Meldung in der Statuszeile angezeigt. Um diese Meldung zu sehen, benötigen die Benutzer mindestens die Berechtigungsebene für Konfigurationsbenutzer.
Verwandte Themen
Steuerung der Verarbeitung von DBQueue Prozessor Aufträgen
Der zentrale Dispatcher übernimmt die Steuerung der Verarbeitung und verteilt die Aufträge der DBQueue an die einzelnen Slots.
Es wird zunächst die Anzahl der aktuell verfügbaren Slots ermittelt, die verwendet werden können. Je mehr Last auf dem Datenbankserver vorhanden ist, desto weniger Slots können aktuell verwendet werden, mindestens werden jedoch 5 Slots verwendet.
Die Anzahl der aktuell verfügbaren Slots ergibt sich aus :
Anzahl aktuell verfügbarer Slots = Anzahl der maximal verfügbaren Slots - Betrag für alle Prozesse der eigenen Datenbank - Betrag für Prozesse auf anderen Datenbanken des Servers
Der zentrale Dispatcher startet die aktuell verfügbaren Slots einmalig. Für jeden Slot ist ein Prozess eingerichtet, der die Aufträge für genau diesen Slot ausführt.
Sobald Aufträge in die DBQueue eingetragen werden, wird der zentrale Dispatcher benachrichtigt. Der zentrale Dispatcher verteilt die Aufträge in die einzelnen Slots und benachrichtigt die Prozesse der Slots, dass Aufträge zur Verarbeitung anstehen. Jeder Prozess verarbeitet die Aufträge, die für seinen Slot eingestellt werden. Nach Beendigung seines Auftrags sendet jeder Prozess eine Benachrichtigung an den zentralen Dispatcher und wartet auf neue Aufträge.
Der zentrale Dispatcher prüft in definierten Abständen, ob die Slots noch aktiv sind und verteilt neue Aufträge an die Slots. Sind keine Aufträge in der DBQueue vorhanden, geht der zentrale Dispatcher in den Wartezustand und wartet auf die Benachrichtigung über neue Aufträge.
Nach Ablauf der Laufzeit werden die Aufträge aktuell verwendeter Slots noch abgearbeitet. Anschließend werden die Slots gestoppt. Weitere Informationen finden Sie unter Kommunikation des zentralen Dispatchers mit den einzelnen Slots.
Abbildung 39: Steuerung der Verarbeitung über SQL Server Agent
Verarbeiten der DBQueue Prozessor Aufträge
Der zentrale Dispatcher ermittelt die Einträge der DBQueue (Tabelle DialogDBQueue) und verschiebt die Aufträge in die Tabelle QBMDBQueueCurrent mit der Zuordnung Auftrag pro Slot.
Beispiel für Einträge in den Tabellen DialogDBQueue und QBMDBQueueCurrent
Tabelle 195: Einträge in Tabelle DialogDBQueue (Auszug)
OrgRoot |
A |
OrgRoot |
B |
ADSAccountInADSGroup |
X |
ADSAccountInADSGroup |
Y |
ADSAccountInADSGroup |
Z |
Tabelle 196: Einträge in Tabelle QBMDBQueueCurrent (Auszug)
001 |
OrgRoot |
A |
001 |
OrgRoot |
B |
002 |
ADSAccountInADSGroup |
X |
002 |
ADSAccountInADSGroup |
Y |
002 |
ADSAccountInADSGroup |
Z |
Jeder Prozess verarbeitet die Aufträge, die für seinen Slot in die Tabelle QBMDBQueueCurrent eingestellt werden. Folgeaufträge, die aus der Verarbeitung resultieren, werden in die Tabelle DialogDBQueue eingestellt.
Wenn ein Prozess seine Aufträge abgearbeitet hat und keine weiteren Aufträge anstehen, wird die Slotnummer in der Tabelle QBMDBQueueCurrent durch den Prozess selbst auf 0 gesetzt. Der Eintrag verbleibt zunächst in der Tabelle QBMDBQueueCurrent, wird jedoch nicht mehr beachtet (da Slot 0 kein aktiver Slot ist).
In regelmäßigen Abständen werden alle Einträge mit Slotnummer 0 aus der Tabelle QBMDBQueueCurrent gelöscht.
Tabelle 197: Bedeutung der Slotnummern in Tabelle QBMDBQueueCurrent
001 - n |
Nummer des Slots, in dem ein Auftrag zu verarbeiten ist. |
0 |
Zustand nach ordnungsgemäßer Erledigung des Auftrags. |
-1 |
Bei der Verarbeitung des Auftrags ist ein Fehler aufgetreten oder Verarbeitung wird zurückgestellt, zum Beispiel wegen laufender Synchronisation. Der zentrale Dispatcher reaktiviert diesen Auftrag.
HINWEIS: Das Zurückstellen von DBQueue Aufträgen wird im Systemprotokoll aufgezeichnet. |
-2 |
Bei der Verarbeitung des Auftrags ist ein Fehler aufgetreten oder Verarbeitung wird zurückgestellt, zum Beispiel wegen Blockierungen. Der zentrale Dispatcher reaktiviert diesen Auftrag. |
-3 |
Bei der Verarbeitung des Auftrags ist ein Fehler aufgetreten oder Verarbeitung wird zurückgestellt, zum Beispiel wegen noch vorhandener Einträge in der Jobqueue. Der zentrale Dispatcher reaktiviert diesen Auftrag. |
Nutzung des DBQueue Puffers
Um Blockaden bei der Verarbeitung der Aufträge in der DBQueue durch langlaufende Aktionen, wie beispielsweise Synchronisationen, zu verhindern, wird ein DBQueue Puffer (Tabelle QBMDBQueuePond) genutzt. Synchronisationen schreiben ihre DBQueue Prozessor Aufträge zunächst in die Tabelle QBMDBQueuePond. Nach Abschluss der Synchronisation werden die Einträge aus der Tabelle QBMDBQueuePond in die Tabelle DialogDBQueue verschoben.
Sollte eine langlaufende Aktion über einen definierten Zeitraum keine weiteren Einträge im DBQueue Puffer erzeugen, weil beispielsweise eine Synchronisation nicht korrekt beendet wurde, werden verbliebene Einträge der Tabelle QBMDBQueuePond in die Tabelle DialogDBQueue verschoben. Der Zeitraum ist im Konfigurationsparameter QBM | DBQueue | BufferTimeout festgelegt (Standard: 120 Minuten). Die Übernahme der Einträge erfolgt innerhalb der täglichen Wartungsaufträge.
Kommunikation des zentralen Dispatchers mit den einzelnen Slots
Die Kommunikation des zentralen Dispatchers mit den einzelnen Slots erfolgt über die Tabelle QBMDBQueueSlot. Die Anzahl der maximal verfügbaren Slots wird während der Initialisierung des DBQueue Prozessor ermittelt. Pro Slot wird ein Eintrag in der Tabelle QBMDBQueueSlot erzeugt. Die Tabelle enthält Informationen über die einzelnen Slots und deren Status sowie die momentan laufenden Aufträge.
Tabelle 198: Bedeutung des Status in Tabelle QBMDBQueueSlot
0 |
Keine Aktivität vorhanden. Initialzustand (gesetzt durch Initialisierung) oder Endzustand (gesetzt durch Prozess). |
1 |
Der Prozess wird zur Arbeit aufgefordert, beispielsweise zur Vorbereitung zentraler temporärer Tabellen. |
2 |
Betriebsbereit. Der Prozess hat die Arbeit aufgenommen, aber es sind momentan keine Aufträge vorhanden. Das ist der Zustand in dem Aufträge eingestellt werden können. |
3 |
Übergabe an die Tabelle QBMDBQueueCurrent. Der Prozess hat die Aufträge zur Verarbeitung bekommen und soll tätig werden. |
4 |
Der Prozess hat die Aufträge erkannt und übernommen. |
5 |
Der Prozess verarbeitet die Aufträge. |
-1 |
Der Prozess wurde zur Beendigung aufgefordert, Stopp-Verhalten nach maximaler Laufzeit oder Abbruch bei Prozessfehlern. |
Stopp-Verhalten nach Ablauf der maximalen Laufzeit
Nach Ablauf der maximalen Laufzeit werden die Aufträge aktuell verwendeter Slots in der Tabelle QBMDBQueueCurrent noch abgearbeitet. Es werden keine neuen Aufträge aus der Tabelle DialogDBQueue übernommen. In der Tabelle QBMDBQueueSlot werden alle Slots mit einem Slotstatus 2 auf den Status -1 gesetzt. Die Prozesse werden damit zur Beendigung aufgefordert und beenden sich selbst. Der zentrale Dispatcher prüft, ob alle Prozesse beendet sind.
Verwandte Themen