اوراکل 23ai- بهبودی در ویوهای دیکشنری در زمینه پارتیشن بندی

در ویوهای دیتا دیکشنری مرتبط با مبحث Partitioning، ستون HIGH_VALUE از ستونهای پرکاربرد است دیتاتایپ این ستون از نوع Long می باشد و با توجه به محدودیتهای نوع داده Long، اوراکل در نسخه 23ai، دو ستون دیگر از نوع داده JSON و CLOB برای نمایش HIGH VALUE اضافه کرده است.

SQL> create table tb(
  2    id  number,
  3    date_ date
  4  )
  5  partition by range ( date_ )
  6  interval ( numtoyminterval(1,'YEAR'))
  7  (
  8   PARTITION p2022 VALUES LESS THAN (TO_DATE('2023/01/01', 'YYYY/MM/DD')),
  9   PARTITION p2023 VALUES LESS THAN (TO_DATE('2024/01/01', 'YYYY/MM/DD')),
 10   PARTITION p2024 VALUES LESS THAN (TO_DATE('2025/01/01', 'YYYY/MM/DD'))
 11  );
Table created

برای نمایش High Value به فرمت clob می توان از ستون high_value_clob استفاده کرد:

SQL> select partition_name, high_value_clob from user_tab_partitions where  table_name = 'TB' order by 1;
PARTITION_NAME       HIGH_VALUE_CLOB                                          
-------------------- -------------------------------------------------------- 
P2022                TO_DATE(' 2023-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS' 
P2023                TO_DATE(' 2024-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS' 
P2024                TO_DATE(' 2025-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'

همچنین ستون HIGH_VALUE_JSON این اطلاعات را به صورت JSON نمایش خواهد داد:

SQL> select partition_name,HIGH_VALUE_JSON  from user_tab_partitions where  table_name = 'TB' order by 1;
PARTITION_NAME       HIGH_VALUE_JSON
-------------------- ---------------------------------------------------------
P2022                {"high_value":"2023-01-01T00:00:00"}
P2023                {"high_value":"2024-01-01T00:00:00"}
P2024                {"high_value":"2025-01-01T00:00:00"}

اوراکل 23ai– قابلیت Automatic List Partitioning برای جداول هیبریدی

Hybrid Partitioned Table قابلیت جدیدی است که اوراکل در نسخه 19c ارائه کرده است با کمک این قابلیت می توان برای یک جدول، تلفیقی از پارتیشنهای external و internal را ایجاد کرد.

این روش از پارتیشن بندی، صرفا متدهای Range و List را پشتیبانی می کند البته در نسخه 19c امکان استفاده از متد Automatic List برای Hybrid Partitioned Table وجود ندارد و این امکان از نسخه 23c به وجود آمد.

بنابرین از این نسخه(23c) می توانیم برای جداول Hybrid Partitioned Table از قابلیت Automatic List Partitioning استفاده کنیم.

قبل از ایجاد جدول مورد نظر، دایرکتوری مربوط به دیتایی که در سیستم عامل قرار دارند را ایجاد می کنیم:

SQL> create directory E_PARTITIONs as '/PARTITIONs';
Directory created

جدول mytbl از نوع هیبریدی است و  به روش Automatic List پارتیشن بندی شده است:

SQL> CREATE TABLE mytbl
  2  (
  3  national_id NUMBER,
  4  name        VARCHAR2(20),
  5  last_name   VARCHAR2(20),
  6  org_id      NUMBER
  7  )
  8  EXTERNAL PARTITION ATTRIBUTES(
  9  TYPE ORACLE_LOADER
 10  DEFAULT DIRECTORY E_PARTITIONs
 11  ACCESS PARAMETERS
 12  (
 13  FIELDS TERMINATED BY ',' (national_id,name,last_name,org_id)
 14  )
 15  REJECT LIMIT UNLIMITED
 16  )
 17      PARTITION BY LIST (org_id) AUTOMATIC
 18          (
 19              PARTITION p1 VALUES (1),
 20              PARTITION p2 VALUES (2),
 21  		     PARTITION p_external VALUES (3) EXTERNAL LOCATION('part1.txt')
 22          );

Table created

(بیشتر…)

تاثیر table_cached_blocks در محاسبه Clustering Factor

همانطور که در مطلب “آشنایی با Clustering Factor در اوراکل” بیان شد، برای محاسبه مقدار  Clustering Factor، بررسی می شود که آیا Data Block ارجاع داده شده برای دو  index entry  پشت سرهم، با هم متفاوت هستند یا خیر؟ در صورت یکسان بودن Data Blockها، Clustering Factor  در همان مقدار قبلی اش باقی خواهد ماند و در صورت تفاوت، یک عدد به مقدار Clustering Factor اضافه می شود به عبارتی، با هر سوییچی بین Data Blockها، یک عدد به Clustering Factor افزوده خواهد شد.

با این بیان، در زمان محاسبه clustering factor توسط بسته dbms_stats اگر index entry جدید به data blockای اشاره کند که اخیرا(غیر از data block آخر) مورد دستیابی قرار گرفته باشد و حتی در حافظه هم موجود باشد، باز هم مقدار clustering factor ایندکس افزایش پیدا خواهد کرد.

(بیشتر…)

مروری کوتاه بر چند نکته در مورد Interval Partitioning

با ارائه قابلیت Interval partitioning در اوراکل نسخه 11g، نیاز به اضافه کردن دستی پارتیشن، در هنگام درج اطلاعات خارج از محدوده از بین رفته است. در این متن به صورت خلاصه نکاتی را در مورد Interval Partitioning مرور خواهیم کرد.

(بیشتر…)

اوراکل 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

(بیشتر…)