در اوراکل 23c (مقاله آشنایی با امکانات جدید اوراکل 23c )اجرای موازی دستورات DML با سادگی بیشتری اتفاق می افته. در این مستند با Touch-Once Restriction در نسخه های گذشته آشنا می شویم و در ادامه می بینیم با حذف Touch-Once Restriction در اوراکل 23C، اجرای موازی دستورات چقدر ساده تر شده است.Touch-Once Restriction پایگاه داده اورکل 23c
فیلم آموزشی این بحث را مشاهده کنید
در نسخ قبل هنگامی که دستور 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 اجرا می کنیم و مشاهده خواهید کرید عملیات بدون خطا اجرا می شود.
/* 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 */
فیلم آموزشی این بحث را مشاهده کنید
برای دریافت مشاوره و دریافت خدمات در این حوزه با ما در ارتباط باشید.