日期:2014-05-17 浏览次数:21140 次
create or replace trigger login_on_info after logon on database Begin insert into login_log(session_id,login_on_time,login_off_time,user_in_db,machine,ip_address,run_program) select AUDSID,sysdate,null,sys.login_user,machine,SYS_CONTEXT('USERENV','IP_ADDRESS'),program from sys.v_$session where AUDSID = USERENV('SESSIONID'); END;
--你直接sys用户登入然后执行那个语句就可以了。 --假设你建立触发器的用户是test grant select any dictionary to test; grant select on v_$session to test; --我在test用户下测试了一下,没有报错。 [TEST@myorcl] SQL>CREATE TABLE LOGIN_LOG( 2 SESSION_ID VARCHAR2(20), 3 LOGIN_ON_TIME DATE, 4 LOGIN_OFF_TIME DATE, 5 USER_IN_DB VARCHAR2(20), 6 MACHINE VARCHAR2(20), 7 IP_ADDRESS VARCHAR2(20), 8 RUN_PROGRAM VARCHAR2(20) 9 ); 表已创建。 [TEST@myorcl] SQL>CREATE OR REPLACE TRIGGER LOGIN_ON_INFO 2 AFTER LOGON ON DATABASE 3 BEGIN 4 INSERT INTO LOGIN_LOG 5 (SESSION_ID, 6 LOGIN_ON_TIME, 7 LOGIN_OFF_TIME, 8 USER_IN_DB, 9 MACHINE, 10 IP_ADDRESS, 11 RUN_PROGRAM) 12 SELECT AUDSID, 13 SYSDATE, 14 NULL, 15 SYS.LOGIN_USER, 16 MACHINE, 17 SYS_CONTEXT('USERENV', 'IP_ADDRESS'), 18 PROGRAM 19 FROM SYS.V_$SESSION 20 WHERE AUDSID = USERENV('SESSIONID'); 21 END; 22 / 触发器已创建 [TEST@myorcl] SQL>
------解决方案--------------------