1

我正在使用我的应用程序测试 ATP 并收到以下错误:

ORA-12839 Cannot Modify An Object In Parallel After Modifying It.

有没有办法在不更改应用程序代码的情况下禁用 ATP 上的并行 DML?

DROP TABLE objects PURGE;
CREATE TABLE objects
  AS
    SELECT *
      FROM user_objects;

UPDATE /*+ parallel (objects) */ objects
   SET
  object_id = object_id + 1000;

SELECT *
  FROM objects;

在此处输入图像描述

4

1 回答 1

1

不要使用 HIGH 或 MEDIUM 服务,其中并行性是内置的,并且在没有您主动启用的情况下开箱即用地配置。

您应该使用事务服务(LOW、TP、TPURGENT),或者您可以使用“alter session disable parallel dml”禁用并行 DML。

这是在 LOW 服务上运行的相同脚本 -

select sys_context('userenv', 'service_name') from dual;
 

DROP TABLE objects PURGE;
CREATE TABLE objects
  AS
    SELECT *
      FROM user_objects;

UPDATE /*+ parallel (objects) */ objects
   SET
  object_id = object_id + 1000;

SELECT *
  FROM objects;

在此处输入图像描述

但是等等,这些“低”或“高”服务是什么?

文档

请注意描述中的“平行”一词 -

这些消费群体的基本特征是:

HIGH:最高资源,最低并发。查询并行运行。

MEDIUM:资源更少,并发性更高。查询并行运行。

您可以修改 MEDIUM 服务并发限制。有关详细信息,请参阅更改 MEDIUM 服务并发限制。

LOW:最少的资源,最高的并发。查询串行运行。

于 2021-09-28T20:03:41.840 回答