如何解决:SQL 错误:ORA-00604:递归 SQL 级别 1 发生错误
Posted
技术标签:
【中文标题】如何解决:SQL 错误:ORA-00604:递归 SQL 级别 1 发生错误【英文标题】:How to solve : SQL Error: ORA-00604: error occurred at recursive SQL level 1 【发布时间】:2015-05-27 09:15:18 【问题描述】:当我尝试删除表时,我收到了错误
SQL Error: ORA-00604: error occurred at recursive SQL level 2
ORA-01422: exact fetch returns more than requested number of rows
00604. 00000 - "error occurred at recursive SQL level %s"
*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 Support.
【问题讨论】:
你试过purge dba_recyclebin
吗?看起来您遇到了一些 Oracle 错误。
我好像无法运行purge dba_recyclebin
。
如果您没有 DBA 角色,请清除回收站
这就是我尝试过的,我在帖子中提到过
但如果 drop 错误仅在清除错误之后才开始,则它们可能是相关的。 您是否尝试在问题开始之前重新删除 BIN$ 表?我认为无论如何您都需要联系 Oracle 支持,或者至少您的 DBA 可能能够修复它,或者可能必须联系支持。
【参考方案1】:
一种可能的解释是每个DROP TABLE
语句都会触发一个数据库触发器。要查找触发器,请查询 _TRIGGERS
字典视图:
select * from all_triggers
where trigger_type in ('AFTER EVENT', 'BEFORE EVENT')
使用
禁用任何可疑的触发器 alter trigger <trigger_name> disable;
并尝试重新运行您的 DROP TABLE
语句
【讨论】:
完全是新用户。我刚刚创建了第一个对象并试图删除它。 如果它是一个触发器,它可能是在另一个模式中创建的。但我同意其他 cmets - 您绝对应该联系您的 DBA 和 - 如果需要 - Oracle 支持。【参考方案2】:我注意到以下错误。
exact fetch returns more than requested number of rows
这意味着 Oracle 期望有一行,但它得到了多行。而且,只有对偶表才有这个特性,只返回一行。
后来我记得,我在双表和执行双表时做了一些更改。然后找到了多行。
所以,我截断了 dual
表并只插入了 X
值的行。而且,一切正常。
【讨论】:
你必须是 SYS 才能修改 dual,这是一个非常糟糕的主意 (weird things can and will happen),很奇怪你看不到 DBA 回收站。直接在任何内置架构中修改任何内容都是危险的。 正确。如果我们玩dual
表可能会很危险。但是,现在,我别无选择【参考方案3】:
我能够通过 Droping with purge 解决“ORA-00604:错误”。
DROP TABLE tablename PURGE
【讨论】:
以上是关于如何解决:SQL 错误:ORA-00604:递归 SQL 级别 1 发生错误的主要内容,如果未能解决你的问题,请参考以下文章
orcl表空间创建失败ORA-00604:递归SQL级别1出现错误ORA-01013这是哪的问题
oracle 表删除出错 ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01426: 数字溢出
java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 发生错误
drop user sxoa cascade ORA-00604: 递归 SQL 级别 1 出现错误 ORA-00942: 表或视图不存在
java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01003: 语句未进行语法分析