Oracle诊断案例-Sql_trace之二

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)后的输出:

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 sysdbaConnected. 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 existORA-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_METADATAALL_SDO_INDEX_INFOALL_SDO_INDEX_METADATADBA_SDO_GEOM_METADATADBA_SDO_INDEX_INFODBA_SDO_INDEX_METADATA....DBA_SDO_GEOM_METADATADBA_SDO_INDEX_INFO...SDO_WITHIN_DISTANCEUSER_SDO_GEOM_METADATAUSER_SDO_INDEX_INFOUSER_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> exitDisconnected from Oracle8i Enterprise Edition Release 8.1.7.4.0 - 64bit ProductionWith the Partitioning optionJServer Release 8.1.7.4.0 - 64bit Production

这时用户得以顺利drop

5.一点总结 使用sql_trace可以跟踪数据库的很多后台操作 有利于我们发现问题的所在 很多时候,我们想要研究Oracle的内部活动或后台操作 也可以通过sql_trace跟踪 sql_trace/10046 是Oracle提供的最为有效的诊断工具之一.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据库新发现

Oracle诊断案例-Job任务停止执行[最终版]

Last Updated: Friday, 2004-11-26 9:48 Eygle

13530
来自专栏龙首琴剑庐

mybaits3整合spring总结

1、maven定义properties: <org.springframework.version>4.3.1.RELEASE</org.springframe...

37870
来自专栏杨建荣的学习笔记

impdp异常中断导致的问题(r2第8天)

今天查看数据库的负载,发现cpu消耗异常的高。里面有不少dw的进程.但是查看impdp的进程却不存在。 查看datapump的进程情况,发现大量的job,但是状...

398110
来自专栏王硕

原 对于SQL Server数据迁移至PostgreSQL出错的解释以及解决建议

44280
来自专栏岑玉海

Hbase 学习(十一)使用hive往hbase当中导入数据

  我们可以有很多方式可以把数据导入到hbase当中,比如说用map-reduce,使用TableOutputFormat这个类,但是这种方式不是最优的方式。 ...

515130
来自专栏python3

数据库分批导出为csv文件

15820
来自专栏杨建荣的学习笔记

10g,11g数据泵的导入问题及解决(19天)

今天在环境上测试expdp/impdp,环境有10.2.0.5.0,11.2.0.2.0的,11g的环境是从10g升级到11gde .是在impdp的时候都报了...

38340
来自专栏杨建荣的学习笔记

ORACLE 11g导入9i dump的问题及解决

因为系统迁移,需要将一部分的9i的数据导入11g的库里, 目标库是11.2.0.3.0 64位的环境。 导入dump的时候,有一个比较大的分区表,需要用导入分...

38670
来自专栏扎心了老铁

数据库表反向生成(一) MyBatis-generator与IDEA的集成

在Dao层,通过数据库表反向生成,可以节省我们很多的精力,把更多的精力投入复杂的业务中。 数据库表反向生成,指的是通过数据库如mysql中的库表schema生成...

1.1K80
来自专栏编程坑太多

springboot (11) mybatis

15130

扫码关注云+社区

领取腾讯云代金券