eygle's life

没有Oracle,世界将会怎样?

用户操作
[即时聊天] [发私信] [加为好友]
盖国强ID:eygle
323148次访问,排名163好友0人,关注者16
eygle的文章
原创 223 篇
翻译 0 篇
转载 5 篇
评论 368 篇
eygle的公告


最近评论
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
lynx1111:老大, 能问一下一本书赚多少银子吗?
cyco008:我运行的两种取得的SCN值也不同,而且第一次运行select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;与第二次也不同,之后的与第二次才一样。
liuya1985liuya:买了,看完了 感觉不错。
请问怎样才看一个DBA,我是做J2EE开发的,计划转做DBA,事实是也正在努力,两个多月了想找一份初级DBA或是维护又或是开发的工作,仍未找到......
liuya1985liuya:不错 买了
文章分类
收藏
    相册
    友情链接
    eygle的个人站点
    Fenng的个人站点
    我在itpub的Blog
    雪狼的个人站点
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 Oracle诊断案例-Sql_trace之二收藏

    新一篇: Oracle诊断案例-SGA与Swap之一 | 旧一篇: 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)后的输出:

     

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

    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


    这时用户得以顺利drop

     

    5.一点总结

    使用sql_trace可以跟踪数据库的很多后台操作
    有利于我们发现问题的所在

    很多时候,我们想要研究Oracle的内部活动或后台操作
    也可以通过sql_trace跟踪

    sql_trace/10046 是Oracle提供的最为有效的诊断工具之一.

     

     

    发表于 @ 2004年08月25日 10:14:00|评论(loading...)|编辑

    新一篇: Oracle诊断案例-SGA与Swap之一 | 旧一篇: Oracle诊断案例-Sql_trace之一

    评论

    #面襟 发表于2005-02-22 21:14:00  IP: 61.178.112.*
    我也遇到了雷同的ORA-00942: 表或视图不存在
    根据10046的方法,有如下
    The following statement encountered a error during parse:

    INSERT INTO "IBSS"."MLOG$_TCM_USER_PROD" (dmltype$$,old_new$$,snaptime$$,change_vector$$) VALUES (:d,:o,to_date('4000-01-01:0
    0:00:00','YYYY-MM-DD:HH24:MI:SS'),:c)

    Error encountered: ORA-00942

    请教改如何处理?
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © eygle