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时该怎么办吗?如果您还想学习更多技能或者想了解更多相关内容,请关注行业资讯频道内尔。感谢您的阅读!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > Oracle存储过程执行出现ORA-12828错误怎么办?