Oracle存储过程执行出现ORA-12828错误怎么办?

分类:编程技术 时间:2024-02-20 16:00 浏览:0 评论:0
0
Oracle存储过程执行报错ORA-12828怎么办?相信很多没有经验的人都不知所措。本文总结了问题的原因和解决方案。通过这篇文章,希望你能解决这个问题。

今天,一位开发同事来找我,说他的存储过程在龙岩市执行时报错ORA-12828。他说,当代码执行到如下代码块时,报错并退出:

EXECUTE IMMEDIATE 'ALTER TABLE FACT_COSTS TRUNCATE PARTITION P_FACT_COSTS_'||PRM_MONTH||'更新全局索引';

参见Oracle在线文档中ORA-12828的解释:

[oracle@se31 ~ ]$ oerr ora 12828
12828, 00000, "无法在远程站点启动并行事务”
// *原因:PDML 事务无法启动,因为我们不在分布式事务的协调器站点
/ /         。
// *操作:请勿在重新使用 PDML
[oracle@se31 ~]$

  查询oracle支持知识库,有This document (ID 1535660.1) is related to ORA-12828

本文档中的信息适用于任何平台。
症状

即使在数据库链接级别启用并行复制传播,远程并行索引重建也会串行运行。例如,如果为特定目标数据库创建数据库链接,并为数据库链接启用并行传播,则 Oracle 使用多个并行从属进程来复制到相应的目标。但是,当通过过程远程并行索引重建时,它不起作用。详细:
原因正如 Bug 14684769 所说,这按预期工作不支持使用 dblink 并行化索引。
解决方案

不支持dblink并行重建索引。

根据Bug 2166879的修复,创建索引如果在分布式交易中执行,则不会编译为并行执行。

BUG:2166879 - 创建索引时出现 ORA-12828在并行模式下通过远程过程

查看开发同事提供的代码,不要使用dblink。根据Oracle官方(ID 1535660.1)提示,ORA12828为r与索引重建有关。

让开发同事尝试把update globalindexs子句去掉重新执行,就可以执行成功了。事实上,更新表数据和更新索引同时进行,可以防止分区表分区索引失效。

所以,建议他去掉索引重建子句,另外添加专门的索引重建语句到存储过程(他测试过,可以执行)。

另外,根据他提供的信息,代码在所有城市都没有报错,只有当前的龙岩Windows Server 2008R2 oracle 11.2.0.3单实例下。

看完以上内容,您知道Oracle存储过程执行报错ORA-12828时该怎么办吗?如果您还想学习更多技能或者想了解更多相关内容,请关注行业资讯频道内尔。感谢您的阅读!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > Oracle存储过程执行出现ORA-12828错误怎么办?

用户评论