همانطور که می دانید، در زمان اجرای پروسیجر FINISH_REDEF_TABLE، باید برای مدت زمان کوتاهی جدول به صورت exclusive قفل شود تا اجرای پروسیجر با موفقیت خاتمه یابد در غیر این صورت، اجرای این پروسیجر تا اتمام تراکنشهایی دیگری که بر روی جدول در حال اجرا هستند، متوقف و در حالت انتطار باقی خواهد ماند:
مشاهده پیشرفت عملیات REDEFINITION با کمک ویوی V$ONLINE_REDEF
در اوراکل نسخه 12c، با کمک ویوی V$ONLINE_REDEF می توان روند پیشرفت عملیات REDEFINITION را به صورت انلاین دنبال کرد:
SQL> exec DBMS_REDEFINITION.REDEF_TABLE(‘USEF’,’MYTBL’,’ROW STORE COMPRESS ADVANCED’);
SQL> select ORIGINAL_TABLE_NAME,INTERIM_TABLE_NAME,OPERATION,SUBOPERATION,PROGRESS from V$ONLINE_REDEF ;
نکاتی در مورد نامگذاری اشیا در اوراکل
در این متن به مرور نکاتی در زمینه نامگذاری اشیا در دیتابیس اوراکل می پردازیم.
نکته 1: اشیاهای زیر namespace مختص به خود را دارند و امکان تکرار اسامی در بین این objectها وجود دارد:
Indexe – Constraint – Cluster – Database trigger – Private database link – Dimension
مثال: با اجرای دستورات زیر، constraint و database link همنامی را ایجاد می کنیم:
SQL> alter table TBL1 add constraint name1 primary key (FILE#);
Table altered
SQL> create database link name1 connect to usef identified by pa using ‘mydb’;
Database link created
همچنین objectهای زیر namespace مشترکی دارند و تکرار اسامی در بین آنها، امکان پذیر نمی باشد:
Table – View – Sequence – Private synonym – Stand-alone procedure – Stand-alone stored function – Package – Materialized view – User-defined type
مثال: در این مثال می بینید که امکان استفاده از نام مشترک برای view و table وجود ندارد:
SQL> create table v1 as select * from v$datafile;
Table created
SQL> create view v1 as select * from dual;
ORA-00955: name is already used by an existing object
جلوگیری از همپوشانی اجرای جاب در لینوکس
در صورتی که زمان درنظر گرفته شده برای اجرای یک جاب کافی نباشد(در محیط cron)، به طوری که قبل از اجرای کامل جاب، زمان اجرای مجدد آن فرا برسد، دو یا چند نسخه از یک جاب به صورت همزمان اجرا خواهند شد که این اتفاق ممکن است در مواردی منجر به اختلال در سرویس های دیگر موجود در سرور شود.
اوراکل 12cR2 – پارتیشن بندی external table
می دانیم که اطلاعات جداول از نوع external، در خارج از محیط دیتابیس و در قالب فایلی در سیستم عامل ذخیره می شوند. بسیار روشن است که اگر حجم فایل حاوی دیتا از حد مشخصی بیشتر شود، عملیات جستجو با سرعت کندتری انجام خواهد شد.
اوراکل در نسخه 12c قابلیت پارتیشن بندی external table را ارائه کرده است که میتواند در سرعت دستیابی به اطلاعات این نوع از جداول بهبودی را ایجاد کند. در ادامه این متن، به بررسی این قابلیت خواهیم پرداخت.
معتبر ماندن وضعیت ایندکسهای Global در حین انجام عملیات Drop و Truncate پارتیشنها
می دانیم که در اوراکل 11g با حذف و یا truncate کردن پارتیشنهای یک جدول، ایندکسهای GLOBAL مربوط به آن جدول هم در وضعیت unusable قرار می گیرند مگر انکه در حین اجرای دستور alter table .. drop partition از عبارت update indexes استفاده شود در این صورت، ایندکسهای از نوع global این جدول در صورت وجود، بصورت فوری بازسازی خواهند شد و دستور تا بازسازی کامل این ایندکسها، به کارش خاتمه نخواهد داد.
اوراکل 12c – بهبودی در جمع آوری آمار به صورت Incremental برای جداول پارتیشن شده
جمع آوری آمار برای جداول پارتیشن شده ای که حجم قابل توجهی هم دارند، می تواند بسیار چالش آفرین باشد برای مثال جدولی را در نظر بگیرید که اطلاعات هر سال آن در یک پارتیشن مجزا قرار گرفته و صرفا قرار است اطلاعات سال آخر این جدول بروزرسانی شود.
در این صورت با هر بار اجرای بسته dbms_stat، از همه پارتیشنهای این جدول، مجددا امار جمع اوری خواهد شد حتی پارتیشنهایی که اطلاعات ان بروزرسانی نشده است.
اعمال فیلترینگ در حین انجام عملیات بر روی جداول پارتیشن شده
در اوراکل 12cR2، می توان حین انجام عملیاتی چون alter table .. modify partition، move partition، split partition، بعضی از رکوردها را فیلتر کرد و یا به بیانی دقیق تر، کنار گذاشت. این کار با اضافه کردن عبارت INCLUDING ROWS WHERE در انتهای دستور alter table قابل انجام است.
ویژگی auto-list partitioning در اوراکل 12cR2
در اوراکل 11g، زمانی که یک جدول با متد list پارتیشن بندی می شود، تعداد پارتیشنها ثابت خواهد بود و در صورتی که قصد درج مقداری خارج از مقادیر تعریف شده برای partition key را داشته باشیم، با خطا مواجه خواهیم شد(در صورت عدم تعریف default partition):
SQL> CREATE TABLE person( id NUMBER, name VARCHAR2(30),EYE_COLOR VARCHAR2(10) )
2 PARTITION BY LIST (EYE_COLOR)
3 (PARTITION p1 VALUES (‘BL’),
4 PARTITION p2 VALUES (‘GR’)
5 );
Table created
SQL> insert into person values(1,’hadi’,’BC’);
ORA-14400: inserted partition key does not map to any partition
اوراکل 12c – جابجایی آنلاین پارتیشن ها
در اوراکل 11g، جابجا کردن پارتیشنهای یک جدول، سبب ایجاد کندی در دستورات DMLای که بر روی ان پارتیشن اجرا می شوند، خواهد شد. در قسمت زیر، این مسئله را مشاهده می کنید:
–session 1:
SQL> select sid,serial# from v$session where sid=sys_context(‘USERENV’, ‘SID’) ;
SID SERIAL#
———- ———-
303 46939
SQL> alter table usef.mytbl move partition p_2010;
Runing…
–session 2:
SQL> insert into usef.mytbl values(1,TO_date(‘1-1-2009’, ‘DD-MM-YYYY’));
Waiting…
–session 3:
SQL> SELECT DECODE(request, 0, ‘Blocker: ‘, ‘Waiter: ‘) || sid sid, lmode,request,type FROM V$LOCK
WHERE (id1, id2, type) IN
(SELECT id1, id2, type FROM V$LOCK WHERE request > 0)
ORDER BY id1, request;
SID LMODE REQUEST TYPE
————— ———- ———- ——
Blocker: 303 6 0 TM
Waiter: 68 0 3 TM