Logování DB operací z APEXu

V předchozím příspěvku o logování jsem se věnoval možnostem, které nabízí APEX k logování činností APEX aplikací. Dnes k tomu přidávám příspěvek, který se zaobírá logováním uživatelských operací. K napsání jsem se inspiroval v dnešním APEX quizu na www.plsqlchallenge.com, který se zaoberá jednoduchou implementací logování INSERTů do DB.

Jako zadání můžeme vnímat nasledující:

  • označit každou INSERT operaci z APEXu uživatelem, který je aktuálně přihlášen do APEXu
  • označit každou INSERT operaci z databáze uživatelem, který je aktuálně přihlášen do databázy
  • minimálně zatěžovat databázi pro získání informace o uživateli
  • všechny události uchovávat ve sloupci CREATED_BY tabulky, do které je záznam vkládán

Jako první krok si vytvoříme sloupec CREATED_BY do tabulky:

ALTER TABLE MY_TABLE ADD COLUMN CREATED_BY VARCHAR2(32):

V dalším kroku vytvoříme PACKAGE s názvem CONST_PKG, která bude obsahovat veřejnou proměnnou G_USER kde budeme uchovávat požadovanou hodnotu přihlášeného uživatele:

CREATE OR REPLACE PACKAGE CONST_PKG IS

G_USER VARCHAR2(64) NOT NULL;

END CONST_PKG;

V těle package pak vytvoříme základní proces, který naplní proměnnou G_USER aktuálně přihlášeným uživatelem:

CREATE OR REPLACE PACKAGE BODY CONST_PKG IS

BEGIN
CONST_PKG.G_USER := NVL(v(‚APP_USER‘), USER);
END CONST_PKG;

V proměnné CONST_PKG.G_USER již máme hodnotu uživatele, který bude pracovat s daty. Umístněním v těle package zabezpečíme to, že táto proměnná bude naplněna jenom jednou – po vytvoření session. Když bude session vytvořená z APEXu, bude hodnota v CONST_PKG.G_USER obsahovat hodnotu právě přihlášeného uživatele, když bude session vytvořená připojením z Oracle klienta (SQL Plus, SQL Developer, PL/SQL developer, Toad a pod.), bude hodnota v CONST_PKG.G_USER obsahovat username přihlášeného uživatele.
Posledním krokem bude vytvoření TRIGGERu, který bude zaznamenávat autora operace do tabulky:
CREATE OR REPLACE TRIGGER MY_TABLE_TRG
 BEFORE INSERT ON MY_TABLE
 FOR EACH ROW
BEGIN
 :NEW.CREATED_BY := CONST_PKG.G_USER;
END;

U každého záznamu tak budeme mat uchováno, kdo daný záznam vytvořil.

Kamil Schvarcz

jednatel, zakladatel společnosti, senior programátor, školitel

Komentáře

avatar
  Odběr  
Upozornit na