در نسخه 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.