1. 1) Create table : LOGON_LOGS
CREATE TABLE SYS.LOGON_LOGS
(
V_SYSDATE
DATE,
V_PROGRAM
VARCHAR2(128 BYTE),
V_MODULE
VARCHAR2(128 BYTE),
V_USERNAME VARCHAR2(128 BYTE),
V_MACHINE
VARCHAR2(128 BYTE),
V_OSUSER
VARCHAR2(128 BYTE)
)
TABLESPACE SYSTEM
RESULT_CACHE (MODE DEFAULT)
NOPARALLEL
/
2.Create Trigger DDL_TRIGGER
CREATE OR REPLACE TRIGGER SYS.DDL_TRIGGER
AFTER DDL
ON DATABASE
DISABLE
DECLARE
sql_text
ora_name_list_t;
stmt
CLOB;
n
NUMBER;
v_terminal
VARCHAR2 (30);
v_action
VARCHAR2 (30);
v_applyflag
VARCHAR2 (1);
BEGIN
SELECT action
INTO v_action
FROM v$session
WHERE sid = (SELECT DISTINCT sid FROM v$mystat);
IF v_action = 'NOLOG'
THEN
v_applyflag := 'X';
ELSE
v_applyflag := '0';
END IF;
SELECT SYS_CONTEXT ('USERENV', 'TERMINAL') INTO v_terminal FROM DUAL;
IF
ora_dict_obj_type IN
('FUNCTION',
'PROCEDURE',
'PACKAGE',
'PACKAGE BODY',
'TRIGGER',
'JAVA CLASS',
'JAVA DATA',
'JAVA RESOURCE',
'JAVA SOURCE',
'LIBRARY')
AND ora_sysevent IN ('CREATE', 'ALTER')
THEN
stmt := NULL;
ELSE
n := ora_sql_txt (sql_text);
IF n > 1000
THEN
2. n := 1000;
END IF;
FOR i IN 1 .. n
LOOP
stmt := stmt || sql_text (i);
END LOOP;
END IF;
INSERT INTO ddl_log
VALUES (ora_database_name,
ora_login_user,
ora_dict_obj_name,
ora_dict_obj_type,
ora_sysevent,
SYSDATE,
stmt,
v_terminal,
v_applyflag,
ora_dict_obj_owner);
END;
/