在使用oracle的递归查询时,出现一个内部错误:
ORA-00600: 内部错误代码, 参数: [qkacon:FJswrwo], [0], [], [], [], [], [], []
出现这个错误的查询SQL语句为:
//根据流程实例ID查询流程实例信息及其父流程信息
SELECT pi.id_,
pi.start_,
pi.end_,
pi.roottoken_,
pi.superprocesstoken_
FROM jbpm_processinstance pi
WHERE pi.issuspended_ = 0
START WITH pi.id_ = 7211
CONNECT BY prior (SELECT t.processinstance_
FROM jbpm_token t
WHERE t.id_ = pi.superprocesstoken_) = pi.id
_
这段代码的作用就是想从JBPM流程中查找出业务的审批历史信息,由于子流程的存在,所以还要兼顾上级流程的信息。
仔细推敲此查询语句,并没有发现问题的所在,按常理推断,是不应该被SQL解释器拒之门外的,但是这个错误又是怎么出现的呢,继续推断,基本可以肯定的是:connect by不支持从多个表中取出来的记录,所以单张表的递归是没有问题的。另外,查找相关的资料后,发现这是ORACLE connect by 查询的一个BUG,请看下面这段说明:
引用
bug 6729992 - OERI [qkacon:fjswpri] during CONNECT BY query
Range of versions believed to be affected: Versions < 11.2
Versions confirmed as being affected: 10.2.0.3 & 10.2.0.4
Platforms affected: Generic (all / most platforms affected)
This issue is fixed in: 11.2 (Future Release) & 10.2.0.5 (Server Patch Set) & 11.1.0.7 (Server Patch Set)
Description:
Some CONNECT BY queries with "searched case" expressions
can fail with ORA-600 [qkacon:FJswpri].
Workaround:
Set "_optimizer_connect_by_cost_based" = false
被加粗标注出来的正是解决问题的办法,即修改系统参数中_optimizer_connect_by_cost_based的值为false,如下:
ALTER SESSION SET "_optimizer_connect_by_cost_based" = false;
再次运行上面的SQL语句,正常处理并得到正常的结果,问题得到解决。
但是,如果作为开发来说,不可能把这样的问题遗留到程序中去,这样的最终结果极有可能导致项目不能正常上线,因为开发环境和运行环境通常不是位于同一台机器上,为了让程序正常运行下去,你不得不记得修改运行环境的参数配置,这倒不是问题的根结,真正的问题在于如果参数被修改,造成的系统运行中不可预知的错误。
根据上面的那段英文描述,oracle应该会在11.2的版本中修改此BUG,但是现在在没有这个版本的前提下,只能另找他途,充分发挥大家的聪明才智之后,最后找到一个圆满解决此问题的办法,那就是修改SQL语句:
SELECT pi.id_,
pi.start_,
pi.end_,
pi.roottoken_,
pi.superprocesstoken_
FROM jbpm_processinstance pi
WHERE pi.issuspended_ = 0
START WITH pi.id_ = 7211
CONNECT BY prior pi.superprocesstoken_ = pi.roottoken_
测试通过,才算得是功德圆满
分享到:
相关推荐
在使用Oracle Data Pump工具IMPDP(Import Data Pump)进行数据导入的过程中,可能会遇到ORA-39002和ORA-39070等错误。本文将针对这些错误的排查方法进行详细介绍,帮助用户理解问题的原因及解决策略。 ### 错误...
在启动Oracle 10g数据库时遇到ORA-16038错误,该错误通常与归档日志操作有关。具体错误信息为: ``` ORA-16038: log 1 sequence #230 cannot be archived ORA-19809: limit exceeded for recovery files ORA-00312: ...
解决ORA-00600错误的根本方法通常涉及优化SQL语句,以避免触发错误的特定条件。这可能包括调整查询计划、使用索引、减少数据量等。此外,如果错误与已知的Oracle数据库bug有关,更新数据库版本或应用相应的补丁是...
出现ORA-12014错误的主要原因有以下几点: 1. **基表不支持ROWID**:如果基表(即物化视图基于的表)没有定义主键或唯一索引,或者表结构不支持ROWID,则不能创建包含ROWID的物化视图。 2. **列类型限制**:某些...
在Oracle数据库管理过程中,遇到ORA-00132和ORA-00214这类错误时,往往意味着数据库配置或启动过程中出现了问题。下面将对这两个错误进行详细解析,并给出相应的解决方案。 #### 二、ORA-00132: Syntax Error or ...
Oracle 11g 内部错误代码 ORA-00600 是一个非常通用的错误,它表示数据库遇到了一个无法处理的内部错误或异常情况。这个错误通常涉及到Oracle数据库的底层结构,如数据块、索引或者内存管理等,且参数列表可以提供...
### 如何处理错误ORA-29275:部分多字节字符 #### 问题背景与描述 在Oracle数据库操作过程中,用户可能会遇到一个特定的错误提示——ORA-29275:部分多字节字符。这一错误通常出现在执行查询`SELECT * FROM V$...
在IT领域,尤其是在数据库管理与维护中,遇到ORA-01460错误是常见的问题之一,这通常意味着系统在尝试执行数据转换时遇到了未实现或不合理的请求。本文将深入探讨ORA-01460错误的成因、影响以及提供一系列有效的解决...
在Oracle数据库管理与维护的过程中,遇到各种错误代码是家常便饭,其中“ORA-227101”错误虽然在题目中被误标,实际案例中展示的是“ORA-27101”错误,这是一个较为常见的问题,通常发生在数据库服务未能正确启动或...
为了避免由于监听器配置不当导致的ora-12516错误,应该将`local_listener`参数中的VIP地址更改为SCAN_IP。这样做的目的是确保客户端能够正确地识别和访问集群中的实例。 - **修改参数**:打开每个实例的`spfile`...
执行`startup`命令,如果出现ORA-00702错误,记录错误信息。 3. **修复数据文件**:确认出错的数据文件或控制文件是否损坏。在SQL*Plus中运行`SELECT file_name FROM v$datafile;`和`SELECT file_name FROM v$...
ORA-00257 错误处理过程 Oracle 的 Archivelog 机制是为了确保数据库的可恢复性,在数据库中, archivelog 文件是...通过以上步骤,我们可以成功地处理 ORA-00257 错误,释放 archivelog 空间,避免数据库的崩溃。
ORA-06553报错是指在使用EXP工具导出数据库数据时出现的错误信息。这个错误信息通常是由于EXP工具在执行过程中无法正确地验证同义词的定义导致的。 知识点3:解决ORA-06553报错的方法 要解决ORA-06553报错,需要...
ORA-01033 错误通常表示在启动或关闭数据库实例时出现了问题,具体表现为“Oracle 无法为操作系统打开进程”。 本文将详细介绍如何解决 ORA-01033 错误,并通过一段示例日志来分析其他可能的错误原因及解决方案。 ...
### DATAGUARD 物理DG配置客户端无缝切换——ora-16652与ora-16603错误解析 #### 1. DataGuardBroker的配置 **DataGuardBroker** 是Oracle提供的用于简化Oracle Data Guard管理和配置的工具。通过使用...
为了避免ORA-12514错误再次出现,建议采取以下预防措施: 1. **定期检查监听器状态**:使用`lsnrctl status`命令定期检查监听器的状态,确保其能够正常工作。 2. **维护网络配置文件**:定期审查和更新`listener....
ORA-06502 是一个常见的Oracle错误代码,表示“字符缓冲区太小”,而 ORA-06512 实际上是ORA-06502 的一个扩展错误码,通常与之一起出现。这个错误发生在尝试将一个比预期更大的值插入到一个固定大小的缓冲区时,...
本文将对 OGG 之 ORA-01403 案例进行详细的分析,包括出现错误的原因、解决方法、handlecollisions 参数的解析和使用注意事项等。 一、错误原因分析 OGG 之 ORA-01403 案例中,出现了复制进程 abended 状态,报告...
ORA-01033 错误通常出现在尝试启动或连接到Oracle数据库时,表明数据库正处于初始化或关闭过程中。该错误可能由多种原因引起,包括但不限于数据库服务尚未完全启动、系统资源不足或数据库文件损坏等。 #### 解决...
4. **监控与预警**:设置监控脚本或使用管理工具实时监控进程使用情况,一旦接近最大值,提前采取措施避免ORA-00020错误。 四、文档"oracle-00020.doc"可能包含的内容 这份文档可能详细解释了ORA-00020错误的原因、...