Journal / Ereignisse
- Dieses Thema hat 2 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 18 Jahre von
Anonym.
-
AuthorPosts
-
27. August 2005 um 19:56 Uhr #2590
AnonymGastHallo Forum,
zunächst kurze Vorstellung, da ich neu hier bin. Arbeite meist auf einer AS400 (neudeutsch iSeries), Alter : 43. Systemprogrammierer.
Nun zu meinem Problem. Ich suche nach einer Möglichkeit, alle INSERT, UPDATE und DELETE Ereignisse aufzuzeichnen. Samt der dazugehörigen Daten natürlich. Auf der iSeries in den Journalen ist das mit RCVJRNE kein Problem. Aber wie mache ich das unter DB/2 Linux ? Die Adapter-Klassen liefern die Ereignisse ja nur für die aktuelle Verbindung. Ich muss aber alle Ereignisse, egal von welchem Benutzer / Job auswerten.THX im voraus.
K.
8. September 2005 um 9:07 Uhr #3026
AnonymInaktivHallo,
ich mache so etwas immer mit einem 3 TRIGGERn
und einer Protokolltabelle.
Beispiel(delimiter ist #):Originaltabelle:
CREATE TABLE DB.RBFDDT
(RBFDD_FELDNR SMALLINT NOT NULL
,RBFDD_MMKTOART CHAR(2 ) NOT NULL
,RBFDD_GILTVON DECIMAL(8 , 0 ) NOT NULL
,RBFDD_GILTBIS DECIMAL(8 , 0 ) NOT NULL
,RBFDD_MMKATEGORIE CHAR(1 ) NOT NULL
,RBFDD_BESCHREIBUNG CHAR(50 ) NOT NULL
,RBFDD_STELLENINT DECIMAL(2 , 0 ) NOT NULL
,RBFDD_STELLENEXT DECIMAL(2 , 0 )NOT NULL
,RBFDD_FORMATINT CHAR(1 ) NOT NULL
,RBFDD_KOMMAINT DECIMAL(1 , 0 ) NOT NULL
,RBFDD_MUMRECHENBAR CHAR(1 ) NOT NULL
,RBFDD_MSUMMIERBAR CHAR(1 ) NOT NULL
,RBFDD_LASTUSER CHAR(8 ) NOT NULL
WITH DEFAULT
,RBFDD_LASTUPDATE TIMESTAMP NOT NULL
WITH DEFAULT
,PRIMARY KEY
(RBFDD_FELDNR
,RBFDD_MMKTOART
,RBFDD_GILTVON
,RBFDD_GILTBIS
)
)
IN RU005D.RBFDDS
CCSID EBCDIC
#Protokolltabelle:
CREATE TABLE DB.RBFDDTP
(RBFDDPSTATUS CHAR(8 ) NOT NULL
,RBFDDPTIMESTAMP TIMESTAMP NOT NULL
,RBFDDPFELDNR SMALLINT NOT NULL
,RBFDDPMMKTOART CHAR(2 ) NOT NULL
,RBFDDPGILTVON DECIMAL(8 , 0 ) NOT NULL
,RBFDDPGILTBIS DECIMAL(8 , 0 ) NOT NULL
,RBFDDPMMKATEGORIE CHAR(1 ) NOT NULL
,RBFDDPBESCHREIBUNG CHAR(50 ) NOT NULL
,RBFDDPSTELLENINT DECIMAL(2 , 0 ) NOT NULL
,RBFDDPSTELLENEXT DECIMAL(2 , 0 )NOT NULL
,RBFDDPFORMATINT CHAR(1 ) NOT NULL
,RBFDDPKOMMAINT DECIMAL(1 , 0 ) NOT NULL
,RBFDDPMUMRECHENBAR CHAR(1 ) NOT NULL
,RBFDDPMSUMMIERBAR CHAR(1 ) NOT NULL
,RBFDDPLASTUSER CHAR(8 ) NOT NULL
WITH DEFAULT
,RBFDDPLASTUPDATE TIMESTAMP NOT NULL
WITH DEFAULT
,PRIMARY KEY
(RBFDDPSTATUS
,RBFDDPTIMESTAMP
,RBFDDPFELDNR
,RBFDDPMMKTOART
,RBFDDPGILTVON
,RBFDDPGILTBIS
)
)
IN RU005D.RBFDDSP
CCSID EBCDIC
#INSERT-Trigger
CREATE TRIGGER DB.RBFDDAI1
AFTER INSERT
ON DB.RBFDDT
REFERENCING NEW AS NEU
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
INSERT INTO DB.RBFDDTP
( RBFDDPSTATUS , RBFDDPTIMESTAMP , RBFDDPFELDNR , RBFDDPMMKTOART ,
RBFDDPGILTVON , RBFDDPGILTBIS , RBFDDPMMKATEGORIE ,
RBFDDPBESCHREIBUNG , RBFDDPSTELLENINT , RBFDDPSTELLENEXT ,
RBFDDPFORMATINT , RBFDDPKOMMAINT , RBFDDPMUMRECHENBAR ,
RBFDDPMSUMMIERBAR , RBFDDPLASTUSER , RBFDDPLASTUPDATE )
VALUES ( ‚INSERT‘ , CURRENT TIMESTAMP , NEU.RBFDD_FELDNR ,
NEU.RBFDD_MMKTOART , NEU.RBFDD_GILTVON , NEU.RBFDD_GILTBIS ,
NEU.RBFDD_MMKATEGORIE , NEU.RBFDD_BESCHREIBUNG ,
NEU.RBFDD_STELLENINT , NEU.RBFDD_STELLENEXT , NEU.RBFDD_FORMATINT ,
NEU.RBFDD_KOMMAINT , NEU.RBFDD_MUMRECHENBAR ,
NEU.RBFDD_MSUMMIERBAR , NEU.RBFDD_LASTUSER , NEU.RBFDD_LASTUPDATE )
; END
#UPDATE-Trigger
,, CREATE TRIGGER DB.RBFDDAU1
AFTER UPDATE
ON DB.RBFDDT
REFERENCING NEW AS NEU
OLD AS ALT
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
INSERT INTO DB.RBFDDTP
( RBFDDPSTATUS , RBFDDPTIMESTAMP , RBFDDPFELDNR , RBFDDPMMKTOART ,
RBFDDPGILTVON , RBFDDPGILTBIS , RBFDDPMMKATEGORIE ,
RBFDDPBESCHREIBUNG , RBFDDPSTELLENINT , RBFDDPSTELLENEXT ,
RBFDDPFORMATINT , RBFDDPKOMMAINT , RBFDDPMUMRECHENBAR ,
RBFDDPMSUMMIERBAR , RBFDDPLASTUSER , RBFDDPLASTUPDATE )
VALUES ( ‚UPDATEA‘ , CURRENT TIMESTAMP , ALT.RBFDD_FELDNR ,
ALT.RBFDD_MMKTOART , ALT.RBFDD_GILTVON , ALT.RBFDD_GILTBIS ,
ALT.RBFDD_MMKATEGORIE , ALT.RBFDD_BESCHREIBUNG ,
ALT.RBFDD_STELLENINT , ALT.RBFDD_STELLENEXT , ALT.RBFDD_FORMATINT ,
ALT.RBFDD_KOMMAINT , ALT.RBFDD_MUMRECHENBAR ,
ALT.RBFDD_MSUMMIERBAR , ALT.RBFDD_LASTUSER , ALT.RBFDD_LASTUPDATE )
;
INSERT INTO DB.RBFDDTP
( RBFDDPSTATUS , RBFDDPTIMESTAMP , RBFDDPFELDNR , RBFDDPMMKTOART ,
RBFDDPGILTVON , RBFDDPGILTBIS , RBFDDPMMKATEGORIE ,
RBFDDPBESCHREIBUNG , RBFDDPSTELLENINT , RBFDDPSTELLENEXT ,
RBFDDPFORMATINT , RBFDDPKOMMAINT , RBFDDPMUMRECHENBAR ,
RBFDDPMSUMMIERBAR , RBFDDPLASTUSER , RBFDDPLASTUPDATE )
VALUES ( ‚UPDATEN‘ , CURRENT TIMESTAMP , NEU.RBFDD_FELDNR ,
NEU.RBFDD_MMKTOART , NEU.RBFDD_GILTVON , NEU.RBFDD_GILTBIS ,
NEU.RBFDD_MMKATEGORIE , NEU.RBFDD_BESCHREIBUNG ,
NEU.RBFDD_STELLENINT , NEU.RBFDD_STELLENEXT , NEU.RBFDD_FORMATINT ,
NEU.RBFDD_KOMMAINT , NEU.RBFDD_MUMRECHENBAR ,
NEU.RBFDD_MSUMMIERBAR , NEU.RBFDD_LASTUSER , NEU.RBFDD_LASTUPDATE )
; END
#
siehe Teil 2
8. September 2005 um 9:08 Uhr #3335
AnonymInaktivDELETE-Trigger
,, CREATE TRIGGER DB.RBFDDAD1
AFTER DELETE
ON DB.RBFDDT
REFERENCING OLD AS ALT
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
INSERT INTO DB.RBFDDTP
( RBFDDPSTATUS , RBFDDPTIMESTAMP , RBFDDPFELDNR , RBFDDPMMKTOART ,
RBFDDPGILTVON , RBFDDPGILTBIS , RBFDDPMMKATEGORIE ,
RBFDDPBESCHREIBUNG , RBFDDPSTELLENINT , RBFDDPSTELLENEXT ,
RBFDDPFORMATINT , RBFDDPKOMMAINT , RBFDDPMUMRECHENBAR ,
RBFDDPMSUMMIERBAR , RBFDDPLASTUSER , RBFDDPLASTUPDATE )
VALUES ( ‚DELETE‘ , CURRENT TIMESTAMP , ALT.RBFDD_FELDNR ,
ALT.RBFDD_MMKTOART , ALT.RBFDD_GILTVON , ALT.RBFDD_GILTBIS ,
ALT.RBFDD_MMKATEGORIE , ALT.RBFDD_BESCHREIBUNG ,
ALT.RBFDD_STELLENINT , ALT.RBFDD_STELLENEXT , ALT.RBFDD_FORMATINT ,
ALT.RBFDD_KOMMAINT , ALT.RBFDD_MUMRECHENBAR ,
ALT.RBFDD_MSUMMIERBAR , ALT.RBFDD_LASTUSER , ALT.RBFDD_LASTUPDATE )
; END
#Jetzt wird jede SQL-Aktivität festgehalten.
Mit TIMESTAMP und den Daten (bei UPDATE Vorher und Nachher).
Wenn Du LOADs protolliert haben möchtest, mußt du den ONLINE-LOAD verwenden.Die ganze Sache muß in Sachen Performance aber mit Vorsicht betrachtet werden, da der Aufwand für DB2 erheblich ist.
Gruß Klaus
-
AuthorPosts
You must be logged in to reply to this topic.