oracle变态错误解决:ORA-00604: 递归 SQL 级别 2 出现错误

Oracle变态错误:


问题描述:

        在使用sys用户执行删除infa用户下表时,报如下错误:
         ORA-00604: 递归 SQL 级别 2 出现错误
         ORA-00942: 表或视图不存在
         查看E:/CO.Software/oracle/product/10.2.0/admin/orcl/bdump/alert_orcl.log发现当时报如下错误:
         ORA-00604: error occurred at recursive SQL level 2 ORA-00942: table or view does not exist
        
         同样使用sys用户在sqlplus模式和PL/SQL模式下作删除infa用户和删除infa表空间都会报如上错误。

问题定位:

         使用sqlplus sys/oracle as sysdba登陆
         执行alter session set sql_trace=ture;
         之后再次执行drop user infa cascade;
         会报如下错误:
         ORA-00604: 递归 SQL 级别 2 出现错误
         ORA-00942: 表或视图不存在
         再执行alter session set sql_trace=false;
         这时去E:/CO.Software/oracle/product/10.2.0/admin/orcl/udump路径下查看刚刚时间点生成的trace文件:orcl_ora_4468.trc
         在里面会找到如下sql:
         PARSE ERROR #1:len=273 dep=2 uid=0 oct=3 lid=0 tim=7580575894 err=942
         select position#,sequence#,level#,argument,type#,charsetid,charsetform,
                    properties,nvl(length, 0), nvl(precision#, 0),nvl(scale, 0),nvl(radix, 0), type_owner,type_name,type_subname,type_linkname,pls_type
         from argument$
              where obj#=:1 and procedure#=:2 order by sequence# des
         【如果上面执行的是drop表而不是drop用户操作,则相应trace中sql如下:】
         【SELECT topology  
             FROM SDO_TOPO_METADATA_TABLE a, TABLE(a.Topo_Geometry_Layers) b  
                WHERE b.owner = 'SYS' AND b.table_name = 'OPB_ANALYZE_DEP' END OF STMT】

         此时可以猜测sys用户下argument$表不存在,使用PL/SQL登陆查看发现sys用户下确实没有argument$表。

问题解决:从另一台oracle正常的机器中使用sys用户登录,将argument$表exp位dmp文件,将此dmp文件拿到本机,执行如下命令将argument$表导入到本机的sys用户下:
          imp 'sys/oracle@orcl as sysdba'

此时再次执行删除infa用户下表,又报如下错误:

问题描述:

          ORA-00604: 递归 SQL 级别 1 出现错误 ORA-38301: 无法对回收站中的对象执行 DDL/DML

         执行purge recyclebin和purge table 'table_name'问题也无法解决。

问题定位:

         同样使用使用sqlplus sys/oracle as sysdba登陆
         执行alter session set sql_trace=ture;
         之后再次执行drop table OPB_ANALYZE_DEP;
         会报如下错误:ORA-00604: 递归 SQL 级别 1 出现错误 ORA-38301: 无法对回收站中的对象执行 DDL/DML
         再执行alter session set sql_trace=false;
         这时去E:/CO.Software/oracle/product/10.2.0/admin/orcl/udump路径下查看刚刚时间点生成的trace文件orcl_ora_3920.trc
         在里面会找到如下sql:
         PARSE ERROR #9:len=50 dep=1 uid=0 oct=3 lid=0 tim=10735596185 err=942
         select count(*) from association$ where obj# = :1
         此时可以确定sys用户下association$表也不存在。


问题解决:

         同样使用exp和imp方式将association$表导入到本机sys用户中,
         此时再次执行删除infa用户下表,成功!!!!!!!

         免去了我重装Oracle的工作量。

         不过还不知道为什么我的Oracle sys用户下会莫名其妙缺少了两张系统表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值