大家平时存储过程是怎么写日志的

kingstarer 2013-10-22 09:59:26
我总结了几个,但是都有缺点:

1 dbms_output.put_line

缺点是如果不set serveroutput on 日志就无法显示

2 写日志表

缺点是,存储过程异常,日志就会丢失。 并且写表数据库消耗大 (当然,这是个小问题)

3 自治事务写日志表

缺点是,数据库消耗大(因为每写一条日志都是一个事务)

4 调用utl_file写日志

缺点是,只能在数据库服务器使用,并且需要创建directory的权限。这个不是开发、维护人员轻易能获得的

==================================
不知道大家有没有其它更好的办法
...全文
1097 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingstarer 2014-04-01
  • 打赏
  • 举报
回复
感谢各位回答
sych888 2013-10-24
  • 打赏
  • 举报
回复
出异常,也可以把相应信息写到日志里
jdsnhan 2013-10-24
  • 打赏
  • 举报
回复
引用 9 楼 kingstarer 的回复:
[quote=引用 4 楼 forgetsam 的回复:] 4 调用utl_file写日志 缺点是,只能在数据库服务器使用,并且需要创建directory的权限。这个不是开发、维护人员轻易能获得的 你连这个权限都没有还用数据库记录日志? 所有存储过程加上几个out参数返回错误信息,日志直接在应用程序代码里写。
本项目只有存储过程一种编程语言可用。。。 是维护项目来的,不是开发[/quote] 这正好啊,utl_file写在服务器上,由专人负责。 对应库也不是很多人都可以维护吧
kingstarer 2013-10-24
  • 打赏
  • 举报
回复
引用 4 楼 forgetsam 的回复:
4 调用utl_file写日志 缺点是,只能在数据库服务器使用,并且需要创建directory的权限。这个不是开发、维护人员轻易能获得的 你连这个权限都没有还用数据库记录日志? 所有存储过程加上几个out参数返回错误信息,日志直接在应用程序代码里写。
本项目只有存储过程一种编程语言可用。。。 是维护项目来的,不是开发
kingstarer 2013-10-24
  • 打赏
  • 举报
回复
引用 6 楼 forgetsam 的回复:
create procedure pro_a_testlogrollback as
   v_val number;
begin
   insert into a_testdata values(3);
   v_val := 1/0;
exception
    when others then
       rollback;  
       insert into a_testlog values(sysdate,'异常操作已经回滚');
       commit;
end;
哈 这么简单 谢谢
forgetsam 2013-10-23
  • 打赏
  • 举报
回复
create procedure pro_a_testlogrollback as
   v_val number;
begin
   insert into a_testdata values(3);
   v_val := 1/0;
exception
    when others then
       rollback;  
       insert into a_testlog values(sysdate,'异常操作已经回滚');
       commit;
end;
无敌小二傻 2013-10-23
  • 打赏
  • 举报
回复
引用 2 楼 kingstarer 的回复:
进入了exception处理 一般要执行rollback 这个时候没法单独commit日志 rollback数据
为什么在exception中一定要rollback呢?为什么不能commit呢? exception when others then insert into log values(...); commit; end;
forgetsam 2013-10-23
  • 打赏
  • 举报
回复
4 调用utl_file写日志 缺点是,只能在数据库服务器使用,并且需要创建directory的权限。这个不是开发、维护人员轻易能获得的 你连这个权限都没有还用数据库记录日志? 所有存储过程加上几个out参数返回错误信息,日志直接在应用程序代码里写。
badluckly1 2013-10-23
  • 打赏
  • 举报
回复
引用
create procedure pro_a_testlogrollback as v_val number; begin insert into a_testdata values(3); v_val := 1/0; exception when others then rollback; insert into a_testlog values(sysdate,'异常操作已经回滚'); commit; end;
楼上正解, 可以写一个函数,专门用来记录日志, exception中,先rollback;后调用函数进行日志的插入。
zmn0079 2013-10-22
  • 打赏
  • 举报
回复
用job执行的,不是有日志吗?
kingstarer 2013-10-22
  • 打赏
  • 举报
回复
进入了exception处理 一般要执行rollback 这个时候没法单独commit日志 rollback数据
无敌小二傻 2013-10-22
  • 打赏
  • 举报
回复
2 写日志表 缺点是,存储过程异常,日志就会丢失。 并且写表数据库消耗大 (当然,这是个小问题) 存储过程异常会进入exception的,在exception中也记录日志啊? 为什么会丢失呢?

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧