Oracle 简单更新脚本导致 "ORA-00600: internal error code, arguments: [15851], [6], [6], [1], [2], [], [], []"
Oracle simple update script causes "ORA-00600: internal error code, arguments: [15851], [6], [6], [1], [2], [], [], []"
我有一个多年来一直成功运行的以下查询。
UPDATE t_fleet_net_exposure ne
SET avlimit = (SELECT avlimit FROM V_GROUP_CRLIM WHERE ca_id = ne.ca_id)
WHERE ne.ca_id IN (SELECT ca_id FROM V_GROUP_CRLIM);
此查询位于存储过程中,由 Oracle 作业每 10 分钟触发一次。但是最近这项工作失败了,我发现这个更新查询导致错误并且无法正常工作。
这是我在 Toad 上手动执行脚本后的错误:
ORA-00600: internal error code, arguments: [15851], [6], [6], [1],
[2], [], [], []
我用谷歌搜索找不到合适的理由。人家说是Oracle内部异常,我必须给Oracle Corporation开一个TAR。但是我想知道是否有人遇到了这个错误并且可以想出一个解决方案而不需要 TAR 到 Oracle。
这是我已经尝试过的步骤:
- 我创建了另一个 table "t_fleet_net_exposure2" 并填充了来自 t_fleet_net_exposure 的数据。我想,也许 table 的数据已损坏。但是更新查询又导致了ORA-600。
- 我创建了另一个视图 "V_GROUP_CRLIM2" 并替换为查询中的 "V_GROUP_CRLIM"。也许视图本身有问题。但是更新查询再次以 ORA-600 结束。
- 我创建了一个临时 table "TMP_V_GROUP_CRLIM" 并填充了 V_GROUP_CRLIM 的结果。 Table 并且数据创建没有任何问题。所以这个观点并没有错。
- 我用更新查询中新创建的 TMP_V_GROUP_CRLIM table 替换了视图 V_GROUP_CRLIM,然后更新查询工作正常。这是一个可以接受的解决方法,但现在我每次需要执行更新查询时都必须截断并重新填充 table 。所以我仍然需要一个适当的 reason/action 来摆脱 ORA-600 错误。
我的 oracle 服务器版本:
Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
PL/SQL Release 10.2.0.4.0 - Production CORE
10.2.0.4.0 Production TNS for 64-bit Windows: Version 10.2.0.4.0 - Production NLSRTL
Version 10.2.0.4.0 - Production
提前致谢
ORA-600 基本上是一个错误,即程序崩溃,因此我们放弃了。
对于你的情况,试试这个:
alter session set "_complex_view_merging" = false;
看看是否能解决您的问题。
这里是真正的解决方案 - 升级到受支持的数据库版本:-)
我有一个多年来一直成功运行的以下查询。
UPDATE t_fleet_net_exposure ne
SET avlimit = (SELECT avlimit FROM V_GROUP_CRLIM WHERE ca_id = ne.ca_id)
WHERE ne.ca_id IN (SELECT ca_id FROM V_GROUP_CRLIM);
此查询位于存储过程中,由 Oracle 作业每 10 分钟触发一次。但是最近这项工作失败了,我发现这个更新查询导致错误并且无法正常工作。
这是我在 Toad 上手动执行脚本后的错误:
ORA-00600: internal error code, arguments: [15851], [6], [6], [1], [2], [], [], []
我用谷歌搜索找不到合适的理由。人家说是Oracle内部异常,我必须给Oracle Corporation开一个TAR。但是我想知道是否有人遇到了这个错误并且可以想出一个解决方案而不需要 TAR 到 Oracle。
这是我已经尝试过的步骤:
- 我创建了另一个 table "t_fleet_net_exposure2" 并填充了来自 t_fleet_net_exposure 的数据。我想,也许 table 的数据已损坏。但是更新查询又导致了ORA-600。
- 我创建了另一个视图 "V_GROUP_CRLIM2" 并替换为查询中的 "V_GROUP_CRLIM"。也许视图本身有问题。但是更新查询再次以 ORA-600 结束。
- 我创建了一个临时 table "TMP_V_GROUP_CRLIM" 并填充了 V_GROUP_CRLIM 的结果。 Table 并且数据创建没有任何问题。所以这个观点并没有错。
- 我用更新查询中新创建的 TMP_V_GROUP_CRLIM table 替换了视图 V_GROUP_CRLIM,然后更新查询工作正常。这是一个可以接受的解决方法,但现在我每次需要执行更新查询时都必须截断并重新填充 table 。所以我仍然需要一个适当的 reason/action 来摆脱 ORA-600 错误。
我的 oracle 服务器版本:
Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
PL/SQL Release 10.2.0.4.0 - Production CORE 10.2.0.4.0 Production TNS for 64-bit Windows: Version 10.2.0.4.0 - Production NLSRTL Version 10.2.0.4.0 - Production
提前致谢
ORA-600 基本上是一个错误,即程序崩溃,因此我们放弃了。
对于你的情况,试试这个:
alter session set "_complex_view_merging" = false;
看看是否能解决您的问题。
这里是真正的解决方案 - 升级到受支持的数据库版本:-)