مقدمه :

در اوراکل 23c (مقاله آشنایی با امکانات جدید اوراکل 23c )اجرای موازی دستورات DML با سادگی بیشتری اتفاق می افته. در این مستند با Touch-Once Restriction  در نسخه های گذشته آشنا می شویم و در ادامه می بینیم با حذف Touch-Once Restriction در اوراکل 23C، اجرای موازی دستورات چقدر ساده تر شده است.Touch-Once Restriction پایگاه داده اورکل 23c

Touch-Once Restriction در نسخ گذشته :

در نسخ قبل هنگامی که دستور DML را به صورت موازی اجرا می کردید در آن تراکنش کار دیگری بر روی آن Object نمی توانستید انجام دهید تا زمانی که آن تراکنش را Commit و یا Rollback نکرده باشید به این مورد Touch-Once Restriction گفته می شود.

در ادامه این مورد را بر روی نسخه 19C اجرا می کنیم.

/* Oracle Database 19c */

drop table soltani.testobjects purge;

create table soltani.testobjects as

select *

from all_objects;

alter session enable parallel dml;

insert /*+ parallel(t1 4) */ into soltani.testobjects t1

select /*+ parallel(t1 4)*/ * from soltani.testobjects t1;

select count(*) from soltani.testobjects t1;

/*Touch-Once Restriction solved with commit or rollback*/

SQL Error: ORA-12838: cannot read/modify an object after modifying it in parallel

12838. 00000 –  “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.

SQL>

حالا اگر تراکنش را Commit و یا Rollback کنیم دستور select  بدون خطا اجرا می شود.

اوراکل 23C

در اوراکل 23C ( مقاله نصب و راه اندازی اوراکل 23c) این مورد از پایگاه داده حذف شده و می توان با سادگی بیشتر این نوع دستورات را اجرا کرد. در ادامه همان دستورات را در پایگاه داده 23c اجرا می کنیم و مشاهده خواهید کرید عملیات بدون خطا اجرا می شود.

/* Oracle Database 23c */

drop table soltani.testobjects purge;

create table soltani.testobjects as

select *

from all_objects;

alter session enable parallel dml;

insert /*+ parallel(t1 4) */ into soltani.testobjects t1

select /*+ parallel(t1 4)*/ * from soltani.testobjects t1;

select count(*) from soltani.testobjects t1;

/* Touch-Once Restriction removed in Oracle Database 23C */

فیلم آموزشی این بحث را مشاهده کنید

برای دریافت مشاوره و دریافت خدمات در این حوزه با ما در ارتباط باشید.