Ansicht
Dokumentation

BAL_CH_DELETE -

BAL_CH_DELETE -

SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

|---------------------------------------------------------------------|
| Protokolle auf der Datenbank löschen |
|---------------------------------------------------------------------|

Überblick
=======================================================================

Damit die Datenbanktabellen des Application Logs nicht überlaufen, müssen Protokolle auch gelöscht werden. Dies kann auf zwei Arten geschehen:

  • Durch die Standard-Transaktion SLG2 zum Löschen von Protokollen. Diese Transaktion verfolgt eine bestimmte Logik beim Löschen von Protokollen, die weiter unter erläutert wird.
  • Durch Funktionsbausteine des Application Logs, die von der Anwendung aufgerufen werden (z.B. beim Löschen eines Anwendungsobjektes oder in einer eigenen Anwendungs-Transaktion)

Funktionsbausteine
BAL_DB_DELETE Löscht Protokolle auf der Datenbank

Transaktion SLG2: Löschen von Protokollen
=======================================================================

Diese Transaktion ist ein Report, auf dessen Selektionsbild angegeben werden kann, welche Protokolle gelöscht werden sollen. Dieser Report kann Online (Programm -> Ausführen (F8)) oder z.B. auch im Hintergrund ausgeführt werden (Programm->Im Hintergrund ausführen (F9)). Letzteres kann auch als regelmäßiger Job eingeplant werden.

  • Optionen
  • Nur Anzahl ermitteln
    Der Report liest keine Daten von der Datenbank sondern ermittelt nur, wie viele Protokolle löschbar sind. Dies geht besonders schnell und ist die Default-Option.

  • Liste erzeugen
    Die Protokolle werden nicht gelöscht, sondern es erscheint eine Liste der löschbaren Protokolle. Der User kann hier nun auswählen, welche der Protokolle er löschen möchte.
    Sind mehr als 100 löschbare Protokolle vorhanden, dann werden nur die ersten 100 angezeigt, die nächsten 100 auf Anforderung, usw.

  • Sofort löschen
    Alle löschbaren Protokolle werden sofort auf der Datenbank gelöscht (sinnvoll im Batch-Fall).

  • Selektionsbedingungen
    Die Menge der zu löschenden Protokolle läßt sich durch die Selektionsbedingungen vorgeben. Hier kann Application Log-Objekt/Subobjekt, die externe Nummer, die Protokollnummer, die Problemklasse sowie Datum/Uhrzeit der Erstellung vorgegeben werden.
  • Verfalldatum
    Nun ist aber nicht jedes Protokoll, das den obigen Selektionsbedingungen genügt, wirklich löschbar.
    Ein Protokoll kann nur gelöscht werden wenn es verfallen ist.
    Das bedeutet: Das Verfalldatum des Protokolls wurde erreicht oder überschritten. Das Verfalldatum wird beim Erzeugen eines Protokolls mit Funktiosbaustein BAL_LOG_CREATE in den Protokollkopfdaten (Struktur BAL_S_LOG) vorgegeben durch das Feld ALDATE_DEL.
    Nun wird dieses Feld ALDATE_DEL nur in relativ wenigen Fällen wirklich gefüllt. Es wird dann vom Application Log standardmäßig auf 31.12.2098 gesetzt. Solche Protokolle würden daher praktisch niemals gelöscht werden und würden daher ewig im System verweilen.
    Aus diesem Grunde besitzt der Report in der Rubrik "Verfalldatum" die folgenden Optionen:
  • Nur Protokolle löschen, deren Verfalldatum wirklich erreicht ist
    Dies ist die Standard-Option, die aber gerade jene Protokolle, bei denen kein Verfalldatum angegeben wurde, nicht löscht.

  • Auch Protokolle, bei denen das Löschen vor dem Verfall erlaubt ist
    Diese Option sorgt dafür, daß auch jene Protokolle gelöscht werden, bei denen das Verfalldatum zwar noch nicht erreicht ist, bei denen aber das Flag DEL_BEFORE initial ist. DEL_BEFORE kann ebenso wie ALDATE_DEL beim Eröffnen eines Protokolls mitgegeben werden. Es ist standardmäßig initial, d.h. "Löschen vor Verfall" ist erlaubt.

Der User kann beim Löschen von Protokollen also zweistufig vorgehen:

  • Im ersten Schritt versucht er, nur die wirklich verfallenen Protokolle zu löschen.
  • Ist Schritt1 nicht effektiv, weil einige Protokolle hartnäckig sind und weiterhin im System verweilen, dann kann er versuchen, auch jene zu löschen, bei denen das Löschen vor dem Verfall erlaubt ist. Bei diesem Schritt könnte er vielleicht noch gezielt auf einige Objekte/Subobjekte einschränken.

Für den Anwendungsentwickler ergeben sich nun verschiedene Möglichkeiten, wie das Verfalldatum ALDATE_DEL und das Flag DEL_BEFORE zu wählen sind, wenn der Funktionsbaustein BAL_LOG_CREATE aufgerufen wird. Hier einige Beispiele:

  • Mein Protokoll soll möglichst früh gelöscht werden
    ALDATE_DEL = sy-datum.
    DEL_BEFORE = space.
    Das Protokoll darf bereits am Entstehungstag gelöscht werden.
  • Mein Protokoll soll in 100 Tagen löschbar sein, aber nicht füher
    ALDATE_DEL = sy-datum + 100.
    DEL_BEFORE = "X".
    Die Residenzzeit von 100 Tagen muß von der Applikation hart vorgegeben werden. Zur Zeit gibt es im Application Log kein Customizing, in dem man die Residenzzeiten (z.B. abhängig vom Application Log Objekt/Subobjekt) einstellen kann.
  • Mein Protokoll soll möglichst lange im System bleiben
    ALDATE_DEL = "20981231". (oder initial)
    DEL_BEFORE = space.
    Auf diese Weise bleibt ein Protokoll zunächst im System, wenn die Löschtransaktion SLG2 mit der Standard-Option "Nur Protokolle, die wirklich verfallen sind" gestartet wird. Erst wenn die Option "Auch Protokolle, bei denen das Löschen vor Verfall erlaubt ist" gewählt wird, wird das Protokoll gelöscht.
  • Mein Protokoll darf auf keinen Fall von der Standard-Transaktion gelöscht werden
    ALDATE_DEL = "20981231". (oder initial)
    DEL_BEFORE = "X".
    Ein derartiges Protokoll muß explizit durch die Applikation gelöscht werden (siehe nächstes Kapitel).

==>Hinweis
Vor Release 4.6A gab es Transaktion SLG2 nicht. In diesen Releases wurde das Löschen von Protokollen durch den Report RSSLG200 vorgenommen. Dieser Report war unparametrisiert und hat alle Protokolle gelöscht, die wirklich verfallen waren. Mit RSSLG210 ließ sich dieser Report als Job einplanen.
Wollte man Protokolle löschen, bei denen das Löschen vor dem Verfalldatum erlaubt war, so mußte Report RSSLGK90 genutzt werden, der auch Selektionsbedingungen bzgl. Application-Log-Objekt/Subobjekt, etc. enthielt.

Löschen von Protokollen über Funktionsbausteine
=======================================================================

Funktionalität

Möchte man aus der Applikation heraus Protokolle löschen, so steht zu diesem Zweck der Funktionsbaustein BAL_DB_DELETE zur Verfügung.

Die zu löschenden Protokolle können dem Funktionsbaustein auf drei verschiedene Arten übergeben werden (nur alternativ):

  • I_T_LOG_HANDLE: Tabelle mit Protokollhandles.
    Diese Angabe eignet sich besonders, wenn man in der eigenen Anwendung das LOG_HANDLE aufbewahrt hat.
  • I_T_LOGNUMBER: Tabelle mit Protokollnummern.
    Diese Tabelle kann genutzt werden, wenn man in der Anwendungstabelle als Referenz auf das Protokoll nicht das LOG_HANDLE sondern die Protokollnummer LOGNUMBER stehen hat (vielleicht noch aus älteren Releases)
  • I_T_LOGS_TO_DELETE: Tabelle mit Protokollköpfen.
    Diese Tabelle ist der Rückgabewert des Funktionsbausteins BAL_DB_SEARCH. Diesen Funktionsbaustein nutzt man, wenn man in seiner Anwendungstabelle keine Referenz auf das Protokoll hat, sondern die Verbindung über das Feld EXTNUMBER im Protokollkopf hergestellt wird. In diesem Fall ist das Application Log Objekt/Subobjekt und die externe Nummer im dem Filter für BAL_DB_SERACH anzugeben.

BAL_DB_DELETE arbeitet mandantenübergreifend:

  • Bei Angabe von I_T_LOG_HANDLE werden Protokolle auch in anderen Mandanten gelöscht (dies ist unkritisch, da das Protokollhandle eindeutig ist)
  • Bei Angabe von I_T_LOGNUMBER wird in dem Mandanten I_CLIENT gelöscht. Wird I_CLIENT nicht angegeben, dann wird im aktuellen Mandanten gelöscht
  • Bei Angabe von I_T_LOG_HEADER wird der im Feld MANDANT anegebene Mandant berücksichtigt (wird von Funktionsbaustein BAL_DB_SEARCH automatisch gefüllt).

Weitere Parameter:

Der Parameter I_IN_UPDATE_TASK im Funktionsbaustein BAL_DB_DELETE gibt an, ob das Löschen in Update Task durchgeführt werden soll.

Der Parameter I_WITH_COMMIT_WORK gibt an, ob der Funktionsbaustein BAL_DB_DELETE einen COMMIT WORK auslösen soll. Dies ist von Vorteil, wenn man sehr viele Protokolle mit sehr vielen Daten löschen will. Bei den Datenbanken gibt es normalerweise Begrenzungen bezüglich des Rollback-Segments bzw. der Anzahl der DB-Sperren für zu löschende Tabelleneinträge. Um diese Grenzen nicht zu überschreiten, arbeitet BAL_DB_DELETE blockweise, wenn I_WITH_COMMIT_WORK = "X" ist.

Hinweise:

Der Funktionsbaustein BAL_DB_DELETE führt keine Prüfungen durch, ob ein Protokoll löschbar ist (Verfalldatum, etc.). Diese Prüfungen müssen in der Applikation erfolgen.

Man kann sich verschiedene Szenarien vorstellen beim Löschen von Protokollen aus der Applikation heraus vorstellen:

  • Das Protokoll muß auf jeden Fall gelöscht werden, weil mein Objekt, das auf des Protokoll zeigt, gelöscht wird.
    In diesem Fall kann man dem Löschbaustein direkt LOG_HANDLE, LOGNUMBER, etc. übergeben.
  • Es muß zunächst überprüft werden, ob das Protokoll löschbar ist.
    Die wichtigsten Protokollkopfdaten können direkt mit BAL_DB_SEARCH gelesen werden. Die Tabelle E_T_LOG_HEADER kann überprüft und die löschbaren Protokolle dann BAL_DB_DELETE übergeben werden.
  • Die Daten aus BAL_DB_SEARCH reichen zur Überprüfung nicht aus.
    Diese Vorgehensweise ist etwas aufwendiger und sollte eher die Ausnahme darstellen:
  • Das Protokoll wird mit BAL_DB_LOAD in den Hauptspeicher geladen (mit der Option I_DO_NOT_LOAD_MESSAGES = "X" werden nur alle Protokollkopfdaten geladen).

  • Mit BAL_LOG_HDR_READ können nun die Protokollkopfdaten gelesen, überprüft und die löschbaren Protokolle ermittelt werden.

  • Die geladenen Protokolle werden mit BAL_LOG_REFRESH wieder aus dem Hauptspeicher entfernt ...

  • ... und die löschbaren Protokolle schließlich mit BAL_DB_DELETE auf der Datenbank gelöscht.

==>Hinweis
Vor Release 46A war Funktionsbaustein BAL_DB_DELETE nicht vorhanden. Statt dessen gab es die Funktionsbausteine APPL_LOG_DELETE und APPL_LOG_DELETE_WITH_LOGNUMBER.
Diese Funktionsbausteine löschten ebenfalls Protokolle, allerdings nur jene, die verfallen waren oder bei denen das Löschen vor dem Verfall erlaubt war.

==>Hinweis
Beim Löschen von Protokollen wird auch eine Rücksprung-Routine angesprungen, in der man eigene Tabellen, die man an ein Protokoll gehängt hat, löschen kann (Näheres siehe hier).






BAL Application Log Documentation   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 13574 Date: 20240511 Time: 170317     sap01-206 ( 172 ms )