rollback کردن عملیات REDEFINITION(اوراکل 12c)

زمانی را تصور کنید که ساختار جدول حجیمی را با کمک بسته DBMS_REDEFINITION تغییر داده ایم. بعد از اتمام عملیات redefinition، به این نتیجه رسیده ایم که تغییر انجام شده، سبب کندی در عملیاتی که بر روی این جدول انجام می شوند، شده است. قصد داریم جدول را به ساختار پارتشن نشده قبل برگردانیم، راهکار چیست؟

یکی از بهبودهایی که در نسخه 12c به بسته DBMS_REDEFINITION اضافه شد، قابلیت rollback کردن عملیات انجام شده می باشد این کار به کمک پارامتر enable_rollback از بسته DBMS_REDEFINITION قابل انجام است.

در ادامه با کمک سناریوی زیر نحوه استفاده از این قابلیت را مشاهده خواهید کرد:

SQL> CREATE TABLE mytbl (id NUMBER(12) primary key,name varchar2(19),last_name varchar2(19),date_ date );

Table created

SQL> CREATE TABLE mytbl_temp (id NUMBER(12) primary key,name varchar2(19),last_name varchar2(19),date_ date )

  2  PARTITION BY RANGE (date_)

  3  INTERVAL(NUMTOYMINTERVAL(1, ‘MONTH’))

  4  ( PARTITION p1 VALUES LESS THAN (TO_DATE(‘1-1-2000’, ‘DD-MM-YYYY’)));

Table created

SQL> EXEC DBMS_REDEFINITION.can_redef_table(‘USEF’, ‘MYTBL’);

PL/SQL procedure successfully completed

SQL> EXEC DBMS_REDEFINITION.start_redef_table(‘USEF’, ‘MYTBL’, ‘MYTBL_TEMP’,enable_rollback => TRUE);

PL/SQL procedure successfully completed

SQL> EXEC DBMS_REDEFINITION.sync_interim_table(‘USEF’, ‘MYTBL’, ‘MYTBL_TEMP’);

PL/SQL procedure successfully completed

SQL> EXEC DBMS_REDEFINITION.finish_redef_table(‘USEF’, ‘MYTBL’, ‘MYTBL_TEMP’);

PL/SQL procedure successfully completed

با اتمام عملیات، جدول به ساختار پارتیشن شده در خواهد آمد:

SQL> select p.PARTITIONED from user_tables p where table_name=’MYTBL’;

YES

فرض کنید اطلاعاتی به این جدول اضافه شده است:

SQL> insert into mytbl values(1,’vahid’,’usefzadeh’,TO_DATE(‘1-1-2001’, ‘DD-MM-YYYY’));

1 row inserted

SQL> insert into mytbl values(2,’vahid’,’usefzadeh’,TO_DATE(‘1-1-2005’, ‘DD-MM-YYYY’));

1 row inserted

SQL> commit;

Commit complete

به هر جهت به این نتیجه رسیدیم که این جدول با ساختار قبلی کارایی بیشتری را داشته است بنابرین می توانیم از قابلیت جدید ارائه شده در نسخه 12c استفاده کنیم:

SQL> EXEC DBMS_REDEFINITION.rollback(‘USEF’, ‘MYTBL’, ‘MYTBL_TEMP’);

PL/SQL procedure successfully completed

با اجرای دستور زیر، خواهیم دید که جدول از ساختار پارتیشن خارج شده است:

SQL> select p.PARTITIONED from user_tables p where table_name=’MYTBL’;

PARTITIONED

———–

NO

SQL> select count(*) from MYTBL;

  COUNT(*)

———-

         2

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

Comment (1)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.