Oracle诊断案例-Sql_trace之二[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 eygle 的 blog

link:

http://www.eygle.com/case/sql_trace_2.htm

 

问题说明:

很多时候
在我们进行数据库操作时
比如drop user,drop table等,经常会遇到这样的错误

ora-00604: error occurred at recursive sql level 1 .

这样的提示,很多时候是没有丝毫用处的.
本案例就这一类问题提供一个思路及方法供大家参考.

1. drop user出现问题

报出以下错误后退出

 

ora-00604: error occurred at recursive sql level 1
ora
-00942: table or view does not exist .

 

关于 recursive sql 错误
我们有必要做个简单说明.

我们知道,当我们发出一条简单的命令以后
oracle数据库要在后台解析这条命令,并转换为oracle数据库的一系列后台操作.
这些后台操作统称为递归sql

比如create table这样一条简单的ddl命令
oracle数据库在后台,实际上要把这个命令转换为
对于obj$,tab$,col$等底层表的插入操作.

oracle所作的工作可能比我们有时候想的要复杂的多.

2.跟踪问题

我们知道oracle提供sql_trace的功能
可以用于跟踪oracle数据库的后台递归操作.

通过跟踪文件,我们可以找到问题的所在
以下是格式化(tkprof)后的输出:

 

********************************************************************************


the following statement encountered a error during parse:

delete from sdo_geom_metadata_table where sdo_owner = 'wapcomm'

error encountered: ora-00942
********************************************************************************

oracle把错误信息首先呈现出来
我们看到ora-00942错误是由于sdo_geom_metadata_table表/视图不存在所致

问题由此可以定位

对于这一类的错误,定位问题以后解决的方法就要依据具体问题原因而定了。

 

3.问题定位

对于本案例,通过metalink获得以下解释:

problem description
-------------------
the oracle spatial option has been installed and you are encountering
the following errors while trying to drop a user, who has no spatial tables,
connected as system:

error at line 1:
ora-00604: error occurred at recursive sql level 1
ora-00942: table or view does not exist
ora-06512: at line 7


a 942 error trace shows the failing sql statement as:


delete from sdo_geom_metadata_table where sdo_owner = '<user>'


solution description

--------------------

(1) create a synonym for sdo_geom_metadata_table under system which points to

mdsys.sdo_geom_metadata_table.

对于本例,为mdsys.sdo_geom_metadata_table创建一个同义词即可解决.
是相对简单的情况.

(2) now the user can be dropped connected as system.


related documents

-----------------
<note.159776.1> ora-604 and ora-942 reported during drop user casca


4.实际处理

mdsys.sdo_geom_metadata_table为spatial对象
如果未使用spatial选项,可以删除


 

sql> connect / as sysdba
connected.

sql> select * from dba_sdo_geom_metadata order by owner;
select * from dba_sdo_geom_metadata order by owner
*
error at line 1:
ora-00942: table or view does not exist
ora-04063: view "mdsys.dba_sdo_geom_metadata" has errors

sql> select object_name from dba_objects where object_name like '%sdo%';

object_name
--------------------------------------------------------------------------------
all_sdo_geom_metadata
all_sdo_index_info
all_sdo_index_metadata
dba_sdo_geom_metadata
dba_sdo_index_info
dba_sdo_index_metadata
....
dba_sdo_geom_metadata
dba_sdo_index_info
...
sdo_within_distance
user_sdo_geom_metadata
user_sdo_index_info
user_sdo_index_metadata

88 rows selected.

sql> drop user mdsys cascade;

user dropped.

sql> select owner,type_name from dba_types where type_name like 'sdo%';

no rows selected

sql>

sql> alter session set sql_trace=true;

session altered.

sql> drop user wapcomm;

user dropped.

sql> alter session set sql_trace=false;

session altered.

sql> exit
disconnected from oracle8i enterprise edition release 8.1.7.4.0 - 64bit production
with the partitioning option
jserver release 8.1.7.4.0 - 64bit production


本文关键:Oracle诊断案例-Sql_trace之二
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top