【SQL*Plus】使用11g SQL*Plus的errorlogging选项记录session级别的错误

在Oracle 11g版本的SQL*Plus中提供了一个非常有特色的选项errorlogging。当开启该选项之后,会话级别的错误都会写入到指定表中,是spool选项的有益补充。spool选项会将所有的输出信息都写入到指定文件文件中,这样会造成文件内容过于臃肿和繁杂。在使用errorlogging选项后,我们将只关注那些与报错有关的信息,可以认为该选项是spool选项的精华抽取。

1.纯净环境准备
保证环境的纯净,我们单独创建一个普通用户sec来完成下面的演示。
sys@ora11g> create user sec identified by sec;

User created.

sys@ora11g> grant create session,resource to sec;

Grant succeeded.

sys@ora11g> conn sec/sec
Connected.
sec@ora11g>

2.errorlogging选项的默认值
该参数的默认值是关闭的
sec@ora11g> show errorlogging
errorlogging is OFF

该选项在10g版本中并为提供。
sys@ora10g> show errorlogging
SP2-0735: unknown SHOW option beginning "errorloggi..."

3.启用errorlogging选项
1)使errorlogging选项生效
sec@ora11g> set errorlogging on

2)查看errorlogging选项状态
sec@ora11g> show errorlogging
errorlogging is ON TABLE SEC.SPERRORLOG

在查看errorlogging选项时,这里给出了提示:我们将使用表SEC.SPERRORLOG来记录报错的有关信息。

3)获取表SPERRORLOG的定义
sec@ora11g> desc sperrorlog
 Name                      Null?    Type
 ------------------------- -------- -----------------------
 USERNAME                           VARCHAR2(256)
 TIMESTAMP                          TIMESTAMP(6)
 SCRIPT                             VARCHAR2(1024)
 IDENTIFIER                         VARCHAR2(256)
 MESSAGE                            CLOB
 STATEMENT                          CLOB

注意:该表在未启用errorlogging选项时是不存在的,同时也不会因为取消errorlogging选项而消失。它是一个真实存在的表。

4)将信息写入指定的其他表
如果不指定写入的表默认会向SPERRORLOG表中写入,我们有另外一个选择:将错误信息写入到我们指定的表中。
(1)这是有前提的,前提就是需要我们实现定义好这个表,表结构要与SPERRORLOG表一样
sec@ora11g> create table sql_error_log as select * from SPERRORLOG;

Table created.

(2)调整错误信息写入的表
sec@ora11g> set errorlogging on;
sec@ora11g> show errorlogging
errorlogging is ON TABLE SEC.SPERRORLOG
sec@ora11g> set errorlogging on table sql_error_log
sec@ora11g> show errorlogging
errorlogging is ON TABLE SEC.sql_error_log

OK,此后的错误信息将会向sql_error_log表中写入。

5)重新连接后该选项会被重新初始化为OFF
sec@ora11g> show errorlogging
errorlogging is ON TABLE SEC.SPERRORLOG
sec@ora11g> conn sec/sec
Connected.
sec@ora11g> show errorlogging
errorlogging is OFF

4.模拟SQL*Plus中的错误
sec@ora11g> select * from t;
select * from t
              *
ERROR at line 1:
ORA-00942: table or view does not exist

sec@ora11g> @test.sql
select * From t
              *
ERROR at line 1:
ORA-00942: table or view does not exist

5.获取SPERRORLOG表中记录的错误信息
sec@ora11g> col USERNAME for a8
sec@ora11g> col TIMESTAMP for a30
sec@ora11g> col SCRIPT. for a10
sec@ora11g> col IDENTIFIER for a1
sec@ora11g> col MESSAGE for a40
sec@ora11g> col STATEMENT for a15
sec@ora11g> select * from sperrorlog;

USERNAME TIMESTAMP                      SCRIPT     I MESSAGE                                  STATEMENT
-------- ------------------------------ ---------- - ---------------------------------------- ---------------
SEC      03-DEC-10 07.18.05.000000 PM                ORA-00942: table or view does not exist  select * from t
SEC      03-DEC-10 07.18.36.000000 PM   test.sql     ORA-00942: table or view does not exist  select * From t

可见,无论是交互式操作过程中出现的错误还是在脚本执行过程中出现的错误都被记录到了SPERRORLOG表中。方便查询和分析问题。

根据表的定义,MESSAGE字段仅仅记录有关ORA、PLA或SP2错误的信息;STATEMENT字段记录了导致错误对应的语句。

6.官方文档中的参考信息
“SET ERRORL[OGGING] {ON | OFF} [TABLE [schema.]tablename] [TRUNCATE] [IDENTIFIER identifier]”
http://download.oracle.com/docs/cd/B28359_01/server.111/b31189/ch12040.htm#i2698945

这个文档详实地记录了errorlogging选项的来龙去脉。

7.小结
与时俱进!相信有了errorlogging选项,我们在调试脚本和监控脚本运行情况时将不再仅仅局限在spool选项上。提高效率就是珍爱生命。

Good luck.

secooler
10.12.03

-- The End --

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-682382/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/519536/viewspace-682382/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值