ORA-12838: cannot read/modify an object after modifying it in parallel ORACLE 报错 故障修复 远程处理
文档解释
ORA-12838: cannot read/modify an object after modifying it in parallel
Cause: Within the same transaction, an attempt was made to add read or modification statements on a table after it had been modified in parallel or with direct load. This is not permitted.
Action: Rewrite the transaction, or break it up into two transactions: one containing the initial modification and the second containing the parallel modification operation.
官方解释
“ORA-12838:在并行操作期间修改对象后,不能读取/修改该对象。这通常表明在并发模式下对对象进行了修改,然后又试图再次读取/修改它。”
常见案例
某些操作会触发此错误,比如,需要更新表和视图的DDL操作;插入新行时,行唯一索引的约束被违反;如果某个事务正在搜索表行,而另一个并发事务正在修改或添加行,此错误也很容易发生。
正常处理方法及步骤
1. 检查并发系统(共享模式)中是否同时读取和写入同一数据,确保没有这样的情况发生。
2. 尝试在事务程序中使用“for update nowait”子句,并将其值更改为“for update wait x”,其中x 指示行多长时间将被锁定。
3. 围绕事务程序和并发系统选择正确的隔离级别,可能用到READ COMMITTED,SERIALIZABLE 或 READ ONLY。
4. 确保在多实例环境中服务程序的正确配置。
5. 如果数据库是Oracle 10g或更高版本,可以考虑在表中启用“ROW-LEVEL LOCKING”,它可以确保只有一个并发事务在修改特定的数据行时才可以写入数据行,而其他并发事务只能在更新之前或之后进行。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341