各位高手:
  大家好!我有一个小问题,请有识之士能赐教一二。
  为了实现某数据库的访问记录,我执行了如下一段代码:
  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;
开始这段代码应用的很正常,带后来数据库因为共享池的问题重新安装了一次,并将原数据库文件移植了一遍,发现该表还在数据库中,但触发器丢失了,重新运行生成触发器的代码,部分应用系统客户端机器无法连接数据库。删除该触发器后又正常,请问该如何处理才能让原功能生效???
  万分感谢!!!

解决方案 »

  1.   

    這一段都沒有容錯措施,可以寫一個Exception,看看出錯的狀況
    會不會電腦名稱大於20?或者其他的狀況?
    個人覺得可以寫一個Exception.然後把Err log記錄到錯誤信息表,這樣用戶連接有問題也可以方便查出原因...
      

  2.   

    exception
         when others then
         insert into XXX_LOG(sysdate,substr(SQLERRM,1,400));
         ....SQLERRM可標記錯誤信息,