در نسخه 21c اگر در تراکنشی از Parallel DML استفاده کنیم، امکان گرفتن query و یا اجرای دستورات DML و یا Parallel DML بر روی همان جدول و در همان تراکنش از ما گرفته خواهد شد:
SQL> alter session enable parallel dml;
Session altered.
SQL> insert /*+parallel(10)*/ into tbl1 select * from v$datafile;
1536 rows created.
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.8.0.0.0
SQL> select count(*) from tbl1;
'ORA-12838: cannot read/modify an object after modifying it in parallel'
SQL> delete tbl1;
'ORA-12838: cannot read/modify an object after modifying it in parallel'
با خاتمه دادن به تراکنش شاهد این خطا نخواهیم بود:
SQL> commit;
Commit complete.
SQL> select count(*) from tbl1;
COUNT(*)
----------
6144
SQL> delete tbl1;
6144 rows deleted.
در نسخه 23c این محدودیت برداشته شده و بدون بستن تراکنش می توانیم دستور فوق را اجرا کنیم:
Oracle Database 23c Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.3.0.23.09
SQL> alter session enable parallel dml;
Session altered.
SQL> insert /*+parallel(10)*/ into tbl1 select * from v$datafile;
14 rows created.
SQL> select count(*) from tbl1;
COUNT(*)
----------
28
SQL> delete tbl1;
28 rows deleted.