Oracle提供接口用於診斷Oracle的錯誤信息。
診斷事件可以在Session級設置,也可以在系統級設置,通常如果要診斷全局錯誤,最好在系統級設置,以下是一個測試例子,所選事件只以示范為目的:
SQL> alter system set event='984 trace name ERRORSTACK level 10' scope=spfile;
System altered.
SQL> startup force;
Oracle instance started.
Total System Global Area 101782828 bytes
Fixed Size 451884 bytes
Variable Size 37748736 bytes
Database Buffers 62914560 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL> create table t (name varchar2(10),id number);
Table created.
SQL> insert into t values(a,1);
insert into t values(a,1)
*
ERROR at line 1:
ORA-00984: column not allowed here
SQL> !
此時的984錯誤將會被跟蹤,記錄到跟蹤文件中。
檢查udump目錄,找到trace文件:
[oracle@jumper oracle]$ cd $admin
[oracle@jumper udump]$ ls -sort
total 1020
4 -rw-r--r-- 1 oracle 533 Mar 2 16:06 t.sql
4 -rw-r--r-- 1 oracle 522 Mar 3 09:44 d.sql
20 -rw-r--r-- 1 oracle 17445 Mar 8 11:06 a.log
4 -rw-r----- 1 oracle 3254 Mar 14 23:15 conner_ora_30683.trc
4 -rw-r----- 1 oracle 1645 Mar 14 23:15 conner_ora_30701.trc
4 -rw-r----- 1 oracle 1638 Mar 14 23:16 conner_ora_30719.trc
4 -rw-r----- 1 oracle 1645 Mar 16 09:05 conner_ora_18565.trc
976 -rw-r----- 1 oracle 993555 Mar 16 09:06 conner_ora_18589.trc
[oracle@jumper udump]$ vi conner_ora_18589.trc
/opt/oracle/admin/conner/udump/conner_ora_18589.trc
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production
ORACLE_HOME = /opt/oracle/product/9.2.0
System name: Linux
Node name: jumper.hurray.com.cn
Release: 2.4.21-15.EL
Version: #1 Thu Apr 22 00:27:41 EDT 2004
Machine: i686
Instance name: conner
Redo thread mounted by this instance: 1
Oracle process number: 10
Unix process pid: 18589, image: [email protected] (TNS V1-V3)
*** 2005-03-16 09:06:56.178
ksedmp: internal or fatal error
ORA-00984: column not allowed here
Current SQL statement for this session:
insert into t values(a,1)
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedmp()+269 call ksedst()+0 0 ? 0 ? 0 ? 0 ? 922C89F ?
AA642A0 ?
ksddoa()+446 call ksedmp()+0 A ? AABDCA8 ? B70100B0 ?
3D8 ? 1 ? B7010114 ?
ksdpcg()+521 call ksddoa()+0 B70100B0 ? AABDCA8 ?
ksdpec()+220 call ksdpcg()+0 3D8 ? BFFF3D20 ? 1 ?
ksfpec()+133 call ksdpec()+0 3D8 ? 3D8 ? AABAE7C ?
BFFF3D54 ? 9835E89 ?
AA642A0 ?
[Oracle@jumper udump]$
有了這個跟蹤文件就容易定位和診斷錯誤了。