11g新特性-SQL PLUS 错误日志

作者: Maclean Liu , post on October 19th, 2010 , English Version
【本站文章除注明转载外,均为本站原创编译】
转载请注明:文章转载自: Oracle Clinic – Maclean Liu的个人技术博客 [http://www.oracledatabase12g.com/]
本文标题: 11g新特性-SQL PLUS 错误日志
本文永久地址: http://www.oracledatabase12g.com/archives/11g%e6%96%b0%e7%89%b9%e6%80%a7-sql-plus-%e9%94%99%e8%af%af%e6%97%a5%e5%bf%97.html

习惯使用SQLPLUS管理Oracle的朋友肯定不会对使用show errors命令来确认PL/SQL匿名块或过程执行错误感到陌生。似乎在11g以前这是唯一的一种勘错途径了,可惜的是这部分show errors显示的错误信息往往不够全面同时也无法立即保存下来。11g r1中引入了新的错误日志特性,以便DBA或应用开发人员在调试PL/SQL程序时更高效地排除错误。通过set errorlogging命令可以在SQL执行期间将所有的粗我ujilu存储在一个特定的错误日志表中。默认情况下,set errorlogging会将错误记录写入到名为SPERRORLOG的表中。可以客制化该表的表名,错误日志表记录错误的各种属性:1.引发错误用户的用户名;2.错误发生时间;3.包含引发错误语句的脚本名;4.用户自定义的标识符;5.SP2,ORA,PLS错误消息;6.具体引发错误的语句。

SQL> desc sperrorlog;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 USERNAME                                           VARCHAR2(256)
 TIMESTAMP                                          TIMESTAMP(6)
 SCRIPT                                             CLOB
 IDENTIFIER                                         VARCHAR2(256)
 MESSAGE                                            CLOB
 STATEMENT                                          CLOB

SQL> show errorlogging ;
errorlogging is OFF

/* 默认情况下错误日志功能是关闭的,我们需要手动打开它 */

SQL> set errorlogging on;

SQL> show errorlogging ;
errorlogging is ON TABLE SYS.SPERRORLOG

/* 可以看到成功打开错误日志功能,并会将后续的错误日志写入到当前用户(SYS)名下的SPERRORLOG表 */

SQL> select 1 from abc;
select 1 from abc
              *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> set linesize 200;
SQL> col username for a20;
SQL> col message for a40
SQL> col statement for a40;

/* session A */
SQL> select 1 from abc;
select 1 from abc
              *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select username,message,statement from sperrorlog;

USERNAME             MESSAGE                                  STATEMENT
-------------------- ---------------------------------------- ----------------------------------------
SYS                  ORA-00942: table or view does not exist  select 1 from abc

/* 此时在session B中查询 */

SQL> select username,message,statement from sperrorlog;
no rows selected

/* 换而言之当errorlogging被激活后,发生错误时Oracle会将错误日志追加到SPERRORLOG表上,但并不commit; */
/* 这可能导致V$LOCK动态性能视图中显示大量的TX锁,虽然是虚惊:) */

By setting ‘ERRORLOGGING’ parameter in SQLPlus, a new table ‘SPERRORLOG’ will be created. SQLPlus will write session errors to an error table SPERRORLOG.

This feature very useful in order to track session errors.

Example:

SQL> set ERRORLOG ON
SQL> desc SPERRORLOG
Name Null? Type
—————————————– ——– —————————-
USERNAME VARCHAR2(256)
TIMESTAMP TIMESTAMP(6)
script VARCHAR2(1024)
IDENTIFIER VARCHAR2(256)
MESSAGE CLOB
STATEMENT CLOB

SQL> SELECT USERNAME, STATEMENT, MESSAGE, TIMESTAMP FROM SPERRORLOG;

USERNAME STATEMENT MESSAGE
—————————————————————–
TIMESTAMP
—————–
SYS select * from table1 ORA-00942: table or view does not exist

16-DEC-07 02.21.43.000000 AM

© 2010, www.oracledatabase12g.com. 版权所有.文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.

相关文章 | Related posts:

  1. DBMS_SQL Package versus Native Dynamic SQL
  2. 简易高负载进程记录脚本
  3. SQL*Net break/reset to client等待事件
  4. Oracle SQL Developer 的一个Bug
  5. SQL*Loader Date Cache
  6. SCRIPT TO GENERATE SQL*LOADER CONTROL FILE
  7. HOW TO LOAD SQL PLANS INTO SPM FROM AWR
  8. Internal_Function with Encryption in SQL PLAN
  9. Streams DML Types Supported and Supported Datatypes
  10. SQL PLAN MANAGEMENT

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>