در اوراکل 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
اوراکل 12cR2 – بهبودی در انجام عملیات EXCHANGE PARTITION
در صورتی که قصد داریم جدولی را برای انجام عملیات EXCHANGE PARTITION ایجاد کنیم، باید ساختار این جدول مشابه با ساختار جدول پارتیشن شده باشد تا امکان انجام عملیات EXCHANGE بین جدول جدید و پارتیشن مورد نظر فراهم شود:
SQL> create table EXCHTBL as select * from SALTBL where 1=2;
Table created
SQL> ALTER TABLE SALTBL EXCHANGE PARTITION P2020 WITH TABLE EXCHTBL;
Table altered
SQL> select count(*) from EXCHTBL;
COUNT(*)
———-
70000
read only کردن پارتیشنهای یک جدول
از اوراکل 11g می توان یک جدول را در حالت read only قرار داد:
SQL> alter table usef.mytbl read only;
Table altered.
SQL> alter table usef.mytbl read write;
Table altered.
اما در این نسخه و همچنین نسخه 12cR1، قابلیت قرار دادن پارتیشنی از جدول در حالت read only وجود ندارد:
SQL*Plus: Release 12.1.0.2.0 Production on Sat Dec 14 17:10:54 2019
SQL> alter session set container=PDB12R1;
Session altered.
SQL> alter table usef.mytbl modify partition p_2000 read only;
ORA-14049: invalid ALTER TABLE MODIFY PARTITION option
ویژگی Multi-column list partitioning در اوراکل 12cR2
تا قبل از اوراکل 12cR2، پارتیشن بندی به روش list، صرفا بر اساس یک ستون قابل انجام بود به عبارت دیگر، تنها می توان یک ستون را به عنوان partition key مشخص کرد در غیر این صورت، با خطای ORA-14304 مواجه خواهیم شد:
SQL*Plus: Release 12.1.0.2.0 Production on Sat Dec 14 17:10:54 2019
SQL> CREATE TABLE person( id NUMBER, name VARCHAR2(30),EYE_COLOR VARCHAR2(10),blood_group VARCHAR2(10))
PARTITION BY LIST (EYE_COLOR,blood_group)
(PARTITION p1 VALUES (‘BL’,’B+’),
PARTITION p2 VALUES (‘BL’,’O-‘),
PARTITION p3 VALUES (‘GR’,’A+’),
PARTITION p4 VALUES (‘GR’,’B+’),
PARTITION p5 VALUES(default)
);
ORA-14304: List partitioning method expects a single partitioning column
امکان اجرای عملیات بر روی چند پارتیشن
در اوراکل 12c می توان با اجرای صرفا یک دستور، چندین پارتیشن را حذف نمود(DROP PARTITION) و یا چندین پارتیشن را به جدول اضافه کرد(ADD PARTITION).
SQL> alter table mytbl drop partition P_2000,SYS_P900;
Table altered
SQL> alter table mytbl add partition P_2000 VALUES LESS THAN (TO_DATE(‘ 2000-01-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’)),partition SYS_P900 VALUES LESS THAN (TO_DATE(‘ 2040-01-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’));
Table altered
فیکس کردن plan بعضی از دستورات بعد از ارتقای دیتابیس
بعد از ارتقای دیتابیس به نسخه ای بالاتر، ممکن است زمان اجرای بعضی از پرس و جوها افزایش پیدا کند. این کندی می تواند به تغییراتی که در رفتار optimizer در هر نسخه از اوراکل ایجاد می شود، برگردد.
در جدول زیر اسامی تعدادی از قابلیتهایی که توسط optimizer در نسخه 11g و 12c قابل استفاده است را مشاهده می کنید:
در این متن به دنبال روشی هستیم که تغییر رفتار optimizer، در دو نسخه مختلف اوراکل را برای یک پرس و جوی مشخص نمایش داده و سپس با کمک قابلیت SQL Plan Management، پلن اجرایی ایجاد شده توسط optimizer، در یکی از این نسخه ها را برای پرس و جوی مورد نظر، فیکس کنیم.
مخاطرات اهدای مجوز create any job به کاربران
با اهدای مجوز سیستمی create any job به یک کاربر، آن کاربر می تواند بدون اطلاع کاربران دیگر، برای آنها جاب ایجاد کند که در این صورت، کاربری که جاب را ایجاد می کند، creator و کاربری که جاب برای آن ایجاد می شود، owner نامیده می شود.
جاب ایجاد شده با مجوز owner اجرا می شود این مسئله به creator این امکان را می دهد تا با ایجاد جاب برای کاربران با سطح دسترسی بالا، مجوزی را برای خود اخذ کنند.
بررسی تغییرات dbms_job در اوراکل 19c
تا قبل از اوراکل نسخه 10g، برای ایجاد جاب در محیط دیتابیس، از بسته dbms_job استفاده می شد در نسخه 10g بهبودی در این زمینه ایجاد شد و اوراکل با ارائه بسته dbms_scheduler، بسیاری از نقاط ضعف dbms_job را پوشش داد و عملا استفاده از این بسته را به حداقل رساند.
اما با این حال، کاربران می توانند کماکان از این بسته(dbms_job) برای تعریف جاب جدید و یا مدیریت جابهای قبلی(جابهای ایجاد شده در نسخه های قدیمی تر) استفاده کنند و حتی اوراکل هم برای زمانبندی بعضی از کارها، از همین بسته استفاده می کند.
