Dann stelle ich mal die erste Frage, damit das neue Forum nicht umsonst eingerichtet wurde:
Folgendes Beispiel-Szenario:
Auf DB-Ebene wird für eine bestimmte Tabelle ein Update-Trigger definiert.
Ziel soll sein, auf DB-Ebene zu protokollieren, welcher R/3-Benutzer die DB-Änderungen vornimmt.
Dazu müsste man auf DB-Ebene (evtl. unter Nutzung von Betriebssystem-Funktionen) herausfinden, welcher SAP-Workprozess auf welchem Applikationsserver den Update initiiert hat.
(Änderungsbelege/DBTABLOG/... mal außen vor gelassen. Es soll eher um Fälle gehen, in denen jemand z.B. ein selbst-geschriebenes Programm startet, das sich nicht an die Regeln hält.)
Kennt jemand eine Möglichkeit, wie man auf DB-Ebene oder OS-Ebene an diese Informationen gelangt?
(Evtl. auch eingeschränkt auf bestimmte SAP-Releases, SAP-Kernel-Patch-Level, Betriebssysteme, bestimmte DBMS oder Fälle, in denen es nicht noch verschiedene Applikationsserver gibt.)
SQL-Audit-Log taugt nicht für die Protokollierung, da nur Zugriffe per Open SQL protokolliert werden können, nicht jedoch Native SQL-Anweisungen zwischen EXEC SQL ... ENDEXEC.
Und als DB-User ein ABAP-Programm zu starten, das alle Workprozesse aller Applikationsserver ausliest und prüft, welche Prozesse gerade mit einem UPDATE auf die jeweilige Tabelle beschäftigt sind, scheint mir etwas zu viel Aufwand zu werden - ganz abgesehen davon, ob man das überhaupt hinbekommt.
Die dazu nötigen R/3-Funktionsbausteine oder Kernel-Funktionen kenne ich zwar.
Problematisch sind aber vermutlich Deadlock-Situationen, wenn z.B. das gerufene Programm erst neu generiert werden muss (inclusive DB-Commit der Generierung), weil die Programm-Load nicht aktuell ist...
Frank