`

案例学习Oracle错误:ORA-00604

阅读更多

 原文:ORA-00604 error occurred at recursive SQL level string

  Cause:An error occurred while processing a recursive SQL statement (a statement applying to internal dictionary tables).

  Action:If the situation described in the next error on the stack can be corrected, do so; otherwise contact Oracle Customer Support.

  ORA-00604: 递归某个SQL 层时出现错误

  原因:在运行一条递归SQL语句(该语句将应用于对内部表或数据字典的操作)时,发生错误。

  方案:如果上述描述的错误所在栈可以被修复,则修复并继续运行;否则,请联系Oracle客服。当然,那是Oracle官方的解决办法。我曾经记得有个高手总结了关于ORA-00604/ORA-04031问题的解决:

  修改INIT.ora

  添加

  _db_handles_cached = 0

  并重新启动数据库.

  分析:ORA-00604这个信息表明,在数据库执行内部SQL语句时,发生了错误。比如,要往表中插入一行数据,但没有可扩展的空间。ORACLE于是去查寻,哪儿可以建立下一个扩展空间,它有多大小,但没有成功。一般在发生ORA-00604错误时,还伴随着其它的错误,例如:ORA-1547等。

  首先,应当 检查 警告文件alertSID.log,查找有关ORA-600类的信息。

  该错误最常见的原因是数据库文件initSID.ora中的参数OPEN_CURSORS值太小。可以修改initSID.ora文件,OPEN_CURSORS的值一般为255。修改完后,宕下ORACLE,再重新启动。

  还可以设置并启动数据库的事件跟踪功能。在initSID.ora中加上一行:

  event = "00604 trace name errorstack"

  宕下并重新启动ORACLE,使这个事件跟踪参数起作用。这样,当再发生ORA-604错误时,有关信息就保存在TRACE文件中。

  造成ORA-604错误的其它原因可能有:

  - initSID.ora中,参数DC_FREE_EXTENTS或ROW_CACHE_ENQUEUES太低。可以根据操作系统和数据库的情况,适当增加这两个参数的值,宕下并重新启动ORACLE。

  - 运行超出空间(伴随ORA-1547错误)。这时,要对表空间添加新文件,即增加表空间的大小。

  - 达到了MAX_EXTENTS(伴随ORA-1556错误)。如果这样,就要修改表,允许更多的扩展。请从技术手册中查找MAX_EXTENTS的最大值。如果已经达到了最大值,必须用compress extents选项,把表卸出(export),再导入(import)数据库中。

  案例一:Oracle执行递归查询的时候出错

  问题描述:我经常遇到ORA-00604 和ORA-01000(开启游标数量达到最大值)错误。然而,当我检查代码的时候,所有的结果集和语句对象都在最后的块中关闭了(我使用的是JDBC)。我执行的查询是一个Oracle递归查询(以这个开始并通过这个连接)。您能告诉我是哪里出现了问题,以及在什么样的情况下会出现上述的错误吗?

  解决方案:可能是init.ora 文件中的open_cursors 参数值的设置太低了。这个参数的默认值是非常低的(50)。它应该设置为200或者更高。即使是你关闭了结果集,但是你并没有在JAVA代码中关闭SQL语句,就会导致这个问题。

  如果设置为yes的话,那么确保你的活动连接池启用了(为了性能的原因),否则设置为no。

  请你的数据库 管理 员监视数据库,并看看使用V$OPEN_CURSORS 和 V$SYSSTAT数据字典视图的条目。

  案例二:Exp出错的一个案例
  问题描述:客户用的 Linux 系统,Redhat 企业 版(RHEL 3.0).数据库,安装的9iR2, 前一段时间升级过.现在的版本是9204.

  客户准备要做Exp导出,以前一直系统没有空间.先给给系统扩了一些空间。Linux下的LVM还算比较好用。虽然文件系统用的是ext3 ,要暂时停机.

  进行导出操作,不成功,发现系统报告错误:

  EXP-00056: ORACLE error 942 encountered

  ORA-00942: table or view does not exist

  EXP-00000: Export terminated unsuccessfully
 


  很多朋友可能对这个错误都很熟悉.

  哦,对了,客户说是升级过数据库,首先猜测是不是升级有问题?毕竟在论坛上类似升级不成功的问题看过很多了.

  执行$ORACLE_HOME/rdbms/admin/catpatch.sql 脚本.

  同时要注意调大java_pool_size 和shared_pool_size这两个参数的大小,要不重新来就耽误时间了,不要犯低级错误

  SQL>shutdown immediate;

  SQL>startup migrate;

  SQL>@?/rdbms/admin/catpatch.sql
 


  之后查看Spool 出来的日志. 发现有编译错误,重新执行了第二次. 等待......之有这个时候我才想起才抱怨CPU不够快,内存不够大 ;)

  这次Log没错误.不料想....................用户连接报告错误:

  ERROR at line 1:

  ORA-00604: error occurred at recursive SQL level 1

  ORA-04045: errors during recompilation/revalidation of LBACSYS.LBAC_EVENTS

  ORA-06508: PL/SQL: could not find program unit being called

  ORA-06512: at line 2

  ORA-06508: PL/SQL: could not find program unit being called

  ORA-06512: at line 2
 


  发现connect / as sysdba 还是可以登陆进去的。

  看来是 LBACSYS.LBAC_EVENTS的状态有点问题。联接进去,编译一下如何? 我的如意算盘是@?/rdbms/admin/utlrp.sql执行一下就没有问题了,不料根本没有用,错误依然。当时有些头晕,这系统还没有备份呢,看来有些麻烦了(心里暗地埋怨客户,一直不让备份,总说"等等再说",作为一个DBA说话总不被重视也挺悲哀的不是? ,虽然我自己偷着有个备份,不过还是上次升级时候的呢),赶紧上网Metalink查查,这里 网络 速度还不错 LBACSYS.LBAC_EVENTS 作为关键词,找到如下的信息:

  The reason for this problem seems to be an Upgrade for Label-Security

  even if it's not installed.  //Label security 没有安装,居然补丁去默认给升级?

  解决方案:

  shutdown immediate;

  startup migrate;

  alter view lbacsys.lbac$all_table_policies compile;

  alter package lbacsys.lbac_events compile body;

  shutdown immediate;

  startup;
 


  支持人员说这是个Bug.但是普通用户不可见. 不太放心,再找找,在Suse.com站点的Maillist也发现了一则类似的案例,看来还可以,心里有底了。

  按照上面的执行,重新 检查 ,OK。

  总结一下

  其实是一个很没有技术含量的Case。首先以前升级的时候至少要测试一下Export是否可以(Export已经成为升级成功的一个标志了!) 其次,准备不够充分,早成了手忙脚乱.所幸不是关键系统,用户还可以容忍.Oracle 总说 微软 是个烂公司,其实他们才真的够栏.Bug多的不可胜数.

  案例三:使用网络应用程序的时候出现递归SQL错误

  问题描述:当我使用网络应用程序的时候,遇到了下面的这个错误。

  ORA-00604: 递归SQL1级的时候出现错误。

  ORA-04031: 无法分配4200字节的共享内存,"RBKS_BK_INFO", "sga_heap", "library cache"。

  这些错误信息是什么意思?我该如何解决它们?它们是在应用程序里面还是数据库里面?

  解决方案:您应该使用的是Oracle 8.1.7.4之前版本的Oracle。第一个错误信息告诉你Oracle针对你的行为执行的SQL 语句失败了。ORA-4031告诉你为什么它会失败。ORA-4031错误信息的意思是你没有获得足够的空闲空间。你可以增加你的SHARED_POOL_SIZE,重新启动数据库再拭一次。这个bug已经在后续的补丁包中修复了。如果你使用的不是这个版本,你可以应用一下补丁包。


 案例四:Sql_trace进行Oracle诊断案例
  问题说明:很多时候,在我们进行数据库操作时,比如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 .

分享到:
评论

相关推荐

    解决 navicat连接oracle报错:ORA-12737InstantClientLight

    然而,有时在使用Navicat连接Oracle数据库时可能会遇到各种问题,如"ORA-12737 InstantClientLight"错误。本文将深入探讨这个错误及其解决方案,同时也会涉及Navicat与Oracle的集成以及InstantClient的相关知识。 ...

    Oracle 11gr2连Oracle 19c 报ORA-28040 ORA-01017解决方法.pdf

    Oracle数据库不同版本间的客户端与服务端的连接问题通常涉及到安全和兼容性配置,这篇文章主要讲述了在Oracle 11g R2客户端尝试连接Oracle 19c服务端时,遇到了两个特定的错误:ORA-28040和ORA-01017,以及如何解决...

    oracle ora-03113错误

    ORA-03113 是一个较为常见的Oracle错误,通常出现在网络通信出现问题时,具体表现为“end-of-file on communication channel”(通信通道上的文件结束)。此错误可能由多种因素引发,包括但不限于Unix核心参数设置...

    oracle报错(ORA-00600)问题处理

    Oracle数据库在运行过程中可能会遇到各种错误,其中ORA-00600是一个内部错误代码,表示遇到了数据库系统内部无法处理的异常情况。这个错误通常与数据库的底层结构或数据不一致有关,它不是一个通用错误,而是针对...

    离线误删空间文件导致的ORA-01033及ORA-01145问题的解决办法

    ORA-01033是Oracle数据库启动过程中遇到的一种常见错误。当数据库实例在启动过程中无法正常初始化或打开时,就会触发此错误。该错误通常出现在数据库实例启动到系统全局区(SGA)阶段后,但尚未完全加载数据文件之前...

    ora-227101错误解决办法

    在Oracle数据库管理与维护的过程中,遇到各种错误代码是家常便饭,其中“ORA-227101”错误虽然在题目中被误标,实际案例中展示的是“ORA-27101”错误,这是一个较为常见的问题,通常发生在数据库服务未能正确启动或...

    ora-01720 授权选项对于'xxxx'不存在的解决方法

    然而,在进行权限授予时可能会遇到各种各样的错误,其中`ORA-01720`就是一个典型的例子。该错误提示“授权选项对于'xxxx'不存在”,这通常发生在试图授予一个对象的访问权限给其他用户或角色时。 #### 错误场景 ...

    oracle11g 内部参数出错问题

    Oracle 11g 内部错误代码 ORA-00600 是一个非常通用的错误,它表示数据库遇到了一个无法处理的内部错误或异常情况。这个错误通常涉及到Oracle数据库的底层结构,如数据块、索引或者内存管理等,且参数列表可以提供...

    数据库ORA-01460错误的解决方法

    ORA-01460错误全称为“ORA-01460: unimplemented unreasonable conversion requested”,主要出现在Oracle数据库中,当系统试图将一种数据类型转换为另一种无法处理的数据类型时触发。这种错误常见于数据导出(如...

    oracle断电导致控制文件不一致报错ORA-00214处理

    在Oracle数据库管理过程中,遇到控制文件版本不一致的问题时,通常会收到ORA-00214错误提示。此错误表示数据库中的一个或多个控制文件与其它控制文件版本不匹配,这可能是由于突然断电、硬件故障或其他原因导致的...

    oracle ORA-01114、ORA-27067错误解决方法

    今天有朋友问到如下一则案例,ORA-01114,ORA-27067以及OSD-04026错误同时出现: *** ACTION NAME:() 2009-04-01 09:31:00.762*** MODULE NAME:(JDBC Thin Client) 2009-04-01 09:31:00.762*** SERVICE NAME:(SYS$...

    Oracle数据泵(Data Dump)使用过程当中经常会遇到一些奇奇怪怪的错误案例

    **错误案例1:ORA-39065 和 ORA-44002** 这两个错误通常涉及到数据泵在处理数据泵作业时内部出现的异常。ORA-39065 表示在DISPATCH过程中遇到了未预期的主进程异常,而ORA-44002则意味着对象名无效。这个错误可能是...

    Oracle常见错误:ORA

    在本案例中,我们关注的是两个特定的错误:ORA-01403 和 ORA-06512。 ORA-01403 错误表示“未找到任何数据”,它通常出现在一个`SELECT INTO`语句执行后没有找到匹配的记录。当在PL/SQL块中使用`SELECT INTO`将查询...

    SHOUG文档分享-ORACLE-TTS迁移后ORA3113错误处理-SHOUG成员左翼

    通过对告警日志的分析,找到了一个ORA-07445错误,这是一个严重的内部错误,通常与Oracle数据库内核的某个函数调用有关。具体到这个案例,错误发生在kafger()函数调用中。这是一个内部函数,与Oracle进程地址空间的...

    plsql连接oracle数据库报ora 12154错误解决方法

    ### PL/SQL连接Oracle数据库报ORA-12154错误及解决方法 #### 错误概述 在尝试使用PL/SQL Developer连接Oracle数据库时,可能会遇到“ORA-12154: TNS: 无法解析指定的连接标识符”这一错误。此错误通常表明PL/SQL ...

    oracle10g服务器断电恢复

    - 当服务器重新启动并尝试打开数据库时,Oracle 报告 Ora-01113 错误,表示文件 5 需要介质恢复。这意味着数据文件可能损坏或未完成事务。 - 随后执行 `recover datafile 5` 命令,却收到 Ora-00283 和 Ora-00353 ...

    oracle数据库错误大全

    在Oracle中,错误通常由一个三位或四位的数字表示,如ORA-00001、ORA-600等。这些错误号与特定的错误消息关联,错误消息会提供关于问题的详细信息,包括可能的原因和建议的解决方案。 Oracle数据库错误大全可能包含...

Global site tag (gtag.js) - Google Analytics