Oracle 12c R2 – Partitioning İyileştirmeleri

Herkese Selam,

Bu yazıda Oracle 12c R2 ile beraber gelen partitioning konusundaki iyileştirmelerden bahsedeceğim umarım farkındalık anlamında faydalı bir yazı olur.

Partitioning bilindiği üzere Oracle’ın en temel ve en çok beğendiğim özelliklerinden biri. Özellikle büyük hacimli tablolardaki verilere ulaşmada oldukça işimizi kolaylaştıran ve genel sorgu performansımızı arttıran bir veritabanı özelliği.

Oracle 12c R2’den önce bir tabloyu sadece yaratma aşamasında fiziksel olarak partitionlı bir şekilde yaratabiliyorduk. Bunun dışında partitionsız yaratılmış ve hızla büyüyen bir tabloyu partitionlı bir hale getirmek istediğimizde ne yazık ki bu işlemi gerçekleştiremiyorduk ve devamında veriye erişim performanslarımızda düşüşler yaşıyorduk.

Oracle 12c R2’den önce davranışın ne olduğuna bakmak gerekirse;

//db_version: 11g R2
CREATE TABLE partitionTest
(
   YEARMONTH        NUMBER,
   INVOICE_ID       NUMBER,
   PRICE            NUMBER
);

INSERT /*+append*/
      INTO  partitionTest
       SELECT TO_NUMBER (TO_CHAR (SYSDATE - MOD (LEVEL, 365), 'YYYYMM'))
                 YEARMONTH,
              LEVEL INVOCE_ID,
              MOD (LEVEL, 365) * 10 price
         FROM DUAL
   CONNECT BY LEVEL < 100000;

COMMIT;

ALTER TABLE partitionTest MODIFY
PARTITION BY RANGE (YEARMONTH)
  (PARTITION P201606 VALUES LESS THAN (201607),
      PARTITION P201607 VALUES LESS THAN (201608),
      PARTITION P201608 VALUES LESS THAN (201609),
      PARTITION P201609 VALUES LESS THAN (201610),
      PARTITION P201610 VALUES LESS THAN (201611),
      PARTITION P201611 VALUES LESS THAN (201612),
      PARTITION P201612 VALUES LESS THAN (201701),
      PARTITION P201701 VALUES LESS THAN (201702),
      PARTITION P201702 VALUES LESS THAN (201703),
      PARTITION P201703 VALUES LESS THAN (201704),
      PARTITION P201704 VALUES LESS THAN (201705),
      PARTITION P201705 VALUES LESS THAN (201706),
      PARTITION P201706 VALUES LESS THAN (201707))

ORA-14006: geçersiz bölüm adı

Script Terminated on line 21.

Yukarıda partitionsız yaratmış olduğum tabloya Oracle 11g R2’de partitionlı bir yapıya getirmek istediğimde, bu işlemi doğrudan tablo üzerinde online olarak yapamamaktayım.

Şimdi bu operasyonu Oracle 12c R2 ile deneyelim.

//db_version: 12C R2
CREATE TABLE partitionTest
(
   YEARMONTH        NUMBER,
   INVOICE_ID       NUMBER,
   PRICE            NUMBER
);

INSERT /*+append*/
      INTO  partitionTest
       SELECT TO_NUMBER (TO_CHAR (SYSDATE - MOD (LEVEL, 365), 'YYYYMM'))
                 YEARMONTH,
              LEVEL INVOCE_ID,
              MOD (LEVEL, 365) * 10 price
         FROM DUAL
   CONNECT BY LEVEL < 100000;
   
   COMMIT;
   
ALTER TABLE partitionTest MODIFY
PARTITION BY RANGE (YEARMONTH)
  (PARTITION P201606 VALUES LESS THAN (201607),
      PARTITION P201607 VALUES LESS THAN (201608),
      PARTITION P201608 VALUES LESS THAN (201609),
      PARTITION P201609 VALUES LESS THAN (201610),
      PARTITION P201610 VALUES LESS THAN (201611),
      PARTITION P201611 VALUES LESS THAN (201612),
      PARTITION P201612 VALUES LESS THAN (201701),
      PARTITION P201701 VALUES LESS THAN (201702),
      PARTITION P201702 VALUES LESS THAN (201703),
      PARTITION P201703 VALUES LESS THAN (201704),
      PARTITION P201704 VALUES LESS THAN (201705),
      PARTITION P201705 VALUES LESS THAN (201706),
      PARTITION P201706 VALUES LESS THAN (201707)) ONLINE;

Table PARTITIONTEST created.

99.999 rows inserted.

Commit complete.

Table PARTITIONTEST altered.

Şimdi partitionları kontrol edelim.

SELECT table_name, partition_name, high_value
  FROM all_tab_partitions
 WHERE table_name = 'PARTITIONTEST';

 

 

 

 

 

 

Evet görüldüğü üzere tabloyu partitionsız yaratıp daha sonra içine data attıktan sonra tabloyu fiziksel olarak partitionlı hale getirebildim. Bu işlemi yapmak için yazmış olduğum “ALTER TABLE … MODIFY” cümlesinin sonunda kullanmış olduğum “ONLINE” komutu tablonun fiziksel olarak partitionlama işlemi sürerken, tabloya eş zamanlı gelmesi muhtemel DML operasyonlarının da işlenmesine olanak sağladı. Böylelikle tabloda büyük bir fiziksel değişim yaparken herhangi bir downtime yaşamamış oldum.

Oracle 12c R2 ile beraber gelen bu yenilik sayesinde Non-Partitioned tabloları Partitioned hale getirme işleminin operasyonel ve downtime maliyetlerini ortadan kaldırılarak önemli gelişim sağlanmış oldu.

Advertisements

About ... from Emrah METE

Bilgisayar Mühendisi
This entry was posted in Oracle, Uncategorized and tagged , , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s