各位高手:
大家好!我有一个小问题,请有识之士能赐教一二。
为了实现某数据库的访问记录,我执行了如下一段代码:
conn system/managercreate table Log_trig_table
(user_id varchar2(20),
log_date date,
machine varchar2(20),
ipadd varchar2(20),
OS_user varchar2(20)
);create or replace trigger logon_trig
after logon on database
declare
ipchk varchar2(20);
osuser varchar2(20);
machine varchar2(20);
beginSELECT SYS_CONTEXT('USERENV','IP_ADDRESS')
INTO ipchk FROM DUAL;SELECT SYS_CONTEXT('USERENV','os_user')
INTO osuser FROM DUAL;SELECT SYS_CONTEXT('USERENV','host')
INTO machine FROM DUAL;insert into log_trig_table(user_id,log_date,ipadd,MACHINE,OS_USER)
values (user,sysdate,ipchk,machine,OSUSER);
end ;
/select * from log_trig_table;
开始这段代码应用的很正常,带后来数据库因为共享池的问题重新安装了一次,并将原数据库文件移植了一遍,发现该表还在数据库中,但触发器丢失了,重新运行生成触发器的代码,部分应用系统客户端机器无法连接数据库。删除该触发器后又正常,请问该如何处理才能让原功能生效???
万分感谢!!!
大家好!我有一个小问题,请有识之士能赐教一二。
为了实现某数据库的访问记录,我执行了如下一段代码:
conn system/managercreate table Log_trig_table
(user_id varchar2(20),
log_date date,
machine varchar2(20),
ipadd varchar2(20),
OS_user varchar2(20)
);create or replace trigger logon_trig
after logon on database
declare
ipchk varchar2(20);
osuser varchar2(20);
machine varchar2(20);
beginSELECT SYS_CONTEXT('USERENV','IP_ADDRESS')
INTO ipchk FROM DUAL;SELECT SYS_CONTEXT('USERENV','os_user')
INTO osuser FROM DUAL;SELECT SYS_CONTEXT('USERENV','host')
INTO machine FROM DUAL;insert into log_trig_table(user_id,log_date,ipadd,MACHINE,OS_USER)
values (user,sysdate,ipchk,machine,OSUSER);
end ;
/select * from log_trig_table;
开始这段代码应用的很正常,带后来数据库因为共享池的问题重新安装了一次,并将原数据库文件移植了一遍,发现该表还在数据库中,但触发器丢失了,重新运行生成触发器的代码,部分应用系统客户端机器无法连接数据库。删除该触发器后又正常,请问该如何处理才能让原功能生效???
万分感谢!!!
會不會電腦名稱大於20?或者其他的狀況?
個人覺得可以寫一個Exception.然後把Err log記錄到錯誤信息表,這樣用戶連接有問題也可以方便查出原因...
when others then
insert into XXX_LOG(sysdate,substr(SQLERRM,1,400));
....SQLERRM可標記錯誤信息,