USF's Activity Log Table for Portal Logging

USF's Activity Log Table for Portal Logging

For all of USF's portlets, we have a custom logging table that we insert into every time the portlet is accessed. This table allows us to track who is viewing what and when. The DDL below is for the table to be recreated in an oracle database. Other DB's may require some tweaks. I also attached the SQL to this page along with a presentation we did at Gettysburg College on activity logging, as well as a custom database package used to further expand our logging capabilities to log every screen access and report run from Banner.

Essentially, the obj_id and objtype columns in this table are loose pointers to allow us to relate an activity log entry to arbitrary objects. The objtype is a 3 letter acronym of what the entry is attached to, and the obj_id is the primary key into the table. For purposes of our portlet logging, we use an objtype of "SPR" to represent the spriden banner object, and the spriden_pidm of the user logged in is put into the obj_id column.

Every unique event gets its own event code to group the event. i.e., PAYFAIL - Online payment failed. Or for purposes of our student schedule portlet, PORTSTUSCH is inserted as the event code to track every time that portlet is loaded.

The event note just contains specific details about that individual event. i.e., "Card declined, over limit". You may use this to track the term a schedule is loaded for, or anything else you want to track.

CREATE SEQUENCE USFBANNER.ACT_SEQ START WITH 26883747 MAXVALUE 2000000000 MINVALUE 1 NOCYCLE CACHE 20 NOORDER; CREATE PUBLIC SYNONYM ACT_SEQ FOR USFBANNER.ACT_SEQ; GRANT SELECT ON USFBANNER.ACT_SEQ TO PUBLIC; CREATE TABLE USFBANNER.ACTIVITY_LOG ( ACT_ID NUMBER(15) NOT NULL, OBJ_ID NUMBER(15) NOT NULL, OBJTYPE VARCHAR2(3 CHAR) NOT NULL, ACT2QUE NUMBER(15), EVENT_CODE VARCHAR2(50 BYTE) NOT NULL, EVENT_NOTE VARCHAR2(2000 CHAR), EVENT_DATE TIMESTAMP(0) WITH TIME ZONE DEFAULT sysdate NOT NULL, EVENT_USER VARCHAR2(50 CHAR) DEFAULT user NOT NULL, BUS_PROC_CD VARCHAR2(10 CHAR) DEFAULT 'DEFAULT' NOT NULL, RULE_EVAL_IND VARCHAR2(1 CHAR) DEFAULT 'N' NOT NULL, UPDATE_COUNT NUMBER(15) DEFAULT 0 NOT NULL, ACTIVE_IND VARCHAR2(1 CHAR) DEFAULT 'Y' NOT NULL, ADD_USER VARCHAR2(50 CHAR) DEFAULT user NOT NULL, ADD_DATE TIMESTAMP(0) WITH TIME ZONE DEFAULT sysdate NOT NULL, MOD_USER VARCHAR2(50 CHAR) DEFAULT user NOT NULL, MOD_DATE TIMESTAMP(0) WITH TIME ZONE DEFAULT sysdate NOT NULL ) TABLESPACE DEVELOPMENT PCTUSED 0 PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) LOGGING NOCOMPRESS NOCACHE NOPARALLEL MONITORING ENABLE ROW MOVEMENT; CREATE INDEX USFBANNER.ACT_OBJTYPE_ID ON USFBANNER.ACTIVITY_LOG (OBJTYPE, OBJ_ID) LOGGING TABLESPACE DEVELOPMENT PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) NOPARALLEL; CREATE INDEX USFBANNER.ACT_ACT2QUE ON USFBANNER.ACTIVITY_LOG (ACT2QUE) LOGGING TABLESPACE DEVELOPMENT PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) NOPARALLEL; CREATE INDEX USFBANNER.ACT_RULE_EVAL_IND ON USFBANNER.ACTIVITY_LOG (RULE_EVAL_IND) LOGGING TABLESPACE DEVELOPMENT PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) NOPARALLEL; CREATE UNIQUE INDEX USFBANNER.ACT_PK ON USFBANNER.ACTIVITY_LOG (ACT_ID) LOGGING TABLESPACE DEVELOPMENT PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) NOPARALLEL; CREATE INDEX USFBANNER.ACT_EVENT_CODE_DATE ON USFBANNER.ACTIVITY_LOG (EVENT_CODE, SYS_EXTRACT_UTC("EVENT_DATE")) LOGGING TABLESPACE DEVELOPMENT PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) NOPARALLEL; CREATE INDEX USFBANNER.ACT_EVENT_DATE_CODE ON USFBANNER.ACTIVITY_LOG (SYS_EXTRACT_UTC("EVENT_DATE"), EVENT_CODE) LOGGING TABLESPACE DEVELOPMENT PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) NOPARALLEL; CREATE OR REPLACE TRIGGER USFBANNER."BI_ACT_TRIG" BEFORE INSERT ON USFBANNER.ACTIVITY_LOG REFERENCING OLD AS o NEW AS n FOR EACH ROW BEGIN IF :n.act_ID IS NULL THEN select act_seq.nextval into :n.act_ID from dual; END IF; IF :n.ADD_USER IS NULL THEN :n.ADD_USER := user; END IF; IF :n.ADD_DATE IS NULL THEN :n.ADD_DATE := sysdate; END IF; IF :n.MOD_USER IS NULL THEN :n.MOD_USER := user; END IF; IF :n.MOD_DATE IS NULL THEN :n.MOD_DATE := sysdate; END IF; IF :n.UPDATE_COUNT IS NULL THEN :n.UPDATE_COUNT := 0; END IF; END; / CREATE OR REPLACE TRIGGER USFBANNER."BU_ACT_TRIG" BEFORE UPDATE ON USFBANNER.ACTIVITY_LOG REFERENCING OLD AS o NEW AS n FOR EACH ROW BEGIN IF :n.MOD_USER IS NULL THEN :n.MOD_USER := user; END IF; IF :n.MOD_DATE IS NULL THEN :n.MOD_DATE := sysdate; END IF; :n.update_count := :o.update_count+1; END; / DROP PUBLIC SYNONYM ACTIVITY_LOG; CREATE PUBLIC SYNONYM ACTIVITY_LOG FOR USFBANNER.ACTIVITY_LOG; ALTER TABLE USFBANNER.ACTIVITY_LOG ADD ( CONSTRAINT ACT_PK PRIMARY KEY (ACT_ID) USING INDEX TABLESPACE DEVELOPMENT PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 )); GRANT INSERT, SELECT ON USFBANNER.ACTIVITY_LOG TO PUBLIC;