AFTER トリガーと BEFORE トリガー
Oracle データベースで AFTER トリガーと BEFORE トリガーによるログオンとログオフの記録をテーブルに格納する方法を紹介します。なお、ここで紹介する方法は、簡単なものしか紹介していませんが、Oracle のマニュアルにある「イベント属性」などを組み合わせて精度の高いものを作成することもできます。
記録用の表を作成
まず、ユーザーのログオンやログオフを記録していくための表を作成します。ここでは、SCOTT スキーマを対象に記載していきます。
SQL> CREATE TABLE users_log (user_name VARCHAR2(30), activity VARCHAR2(20), event_date TIMESTAMP);
ログオン・トリガーの作成
SCOTT スキーマに接続すると、このトリガーによりLOGONイベント・レコードが users_log 表に挿入されます。これはAFTERトリガーで命令します。
CREATE OR REPLACE TRIGGER users_logon_trigger AFTER LOGON ON SCOTT.SCHEMA BEGIN INSERT INTO users_log VALUES (USER, 'LOGON', CURRENT_TIMESTAMP); END; /
ログオフ・トリガーの作成
SCOTT スキーマへの接続が切断されると、ログオフした情報が users_log 表に挿入されます。これはBEFOREトリガーで命令します。
SQL> CREATE OR REPLACE TRIGGER users_logoff_trigger BEFORE LOGOFF ON SCOTT.SCHEMA BEGIN INSERT INTO users_log VALUES (USER, 'LOGOFF', CURRENT_TIMESTAMP); END; /
記録内容の確認
一度、SCOTT ユーザーでログオン/ログオフした後に users_log 表を参照します。
SQL> SELECT * FROM scott_users_log; USER_NAME ACTIVITY EVENT_DATE ------------------------------ -------------------- ------------------------------ SCOTT LOGON 09-08-25 16:02:30.125000 SCOTT