• Tidak ada hasil yang ditemukan

M enurut Syamsiar (2006, pp138-142), jenis-jenis partisi : a. Range Partitioning

Jenis partisi ini membagi data secara terpisah berdasarkan nilai cakupan tertentu. Biasanya digunakan pada kolom dengan tipe tanggal. M isalnya, data tahun 2007 diletakkan pada partisi P2007, data tahun 2008 diletakkan pada partisi P2008, dan seterusnya. Berikut contoh tabel penjualan yang dipartisi secara per tahun.

SQL > create table penjualan (

2 kode_sales varchar2(5),

3 tanggal date,

4 kode_item varchar2 (30),

5 qty number )

6 Partition by range (tanggal)

7 (

8 partition p2000 values less than (to_date(‘01/01/2001’,’dd/mm/yy’)),

9 partition p2001 values less than (to_date(‘01/01/2002’,’dd/mm/yy’)),

10 partition p2002 values less than (to_date(‘01/01/2003’,’dd/mm/yy’)),

11 partition p2003 values less than (to_date(‘01/01/2004’,’dd/mm/yy’)),

12 partition p2004 values less than (to_date(‘01/01/2005’,’dd/mm/yy’)),

13 partition p2005 values less than (to_date(‘01/01/2006,’dd/mm/yy’)),

14 partition p2006 values less than (to_date(‘01/01/2007,’dd/mm/yy’)),

15 partition p2007 values less than (to_date(‘01/01/2008’,’dd/mm/yy’)),

16 partition pmax values less than (maxvalue)

17 );

Data yang mempunyai nilai kolom kurang dari tanggal 1 Januari 2001, akan dimasukkan kedalam partisi P2000. Data yang mempunyai nilai kolom kurang dari tanggal 1 Januari 2002, dimasukkan kedalam partisi P2001, demikian seterusnya. Jika terdapat data yang tidak sesuai kriteria, misalnya data pada tanggal 16 Juli 2008 maka akan masuk ke partisi PM AX.

Setiap partisi pada tabel di atas diletakkan pada tablespace yang sama. Partisi juga dapat diletakkan pada tablespace yang berbeda, yaitu dengan menambahkan klausa TABLESPACE.

….

partition p2000 values less than (to_date(‘01/01/2001’,’dd/mm/yy’))

tablespace ts_2000,

partition p2001 values less than (to_date(‘01/01/2002’,’dd/mm/yy’))

tablespace ts_2001,

partition p2000 values less than (to_date(‘01/01/2003’,’dd/mm/yy’))

tablespace ts_2002,

partition p2000 values less than (to_date(‘01/01/2004’,’dd/mm/yy’))

tablespace ts_2003,

…..

M anfaat menyimpan partitions pada tablespace yang terpisah antara lain :

• Mengurangi kemungkinan terjadinya data corruption • Backup dan recover tiap partisi dapat dilakukan terpisah • Meningkatkan manageability, availability dan performance • Mengontrol proses mapping partitions ke disk drives (penting

untuk balancing I/O load)

b. Hash Partitioning

Partisi secara hash membagi data sesuai algoritma fungsi hash, yaitu setiap data dibagi secara merata sesuai dengan jumlah partisi yang sudah didefinisikan. Partisi secara hash lebih efektif digunakan untuk mendistribusikan data secara acak tanpa harus memperhatikan nilai pada kolom data tersebut. Berikut contoh partition by hash :

CREATE TABLE sales_hash(

salesman_id NUMBER(5), salesman_name VARCHAR2(30), sales_amount NUMBER(10), week_no NUMBER(2) ) PARTITION BY HASH(salesman_id)(

Partition sales1 tablespace ts1, Partition sales2 tablespace ts2, Partition sales3 tablespace ts3, Partition sales4 tablespace ts4 );

Data pada tabel sales_hash akan diletakkan pada masing-masing partisi secara acak berdasarkan kolom salesman_id. Partisi tersebut dapat juga dibuat tanpa menyebutkan nama partisinya.

CREATE TABLE sales_hash(

salesman_id NUMBER(5), salesman_name VARCHAR2(30), sales_amount NUMBER(10), week_no NUMBER(2) ) PARTITION BY HASH(salesman_id) PARTITIONS 4;

Oracle akan membuat partisi sebayak 4 buah dengan nama yang telah ditentukan oleh oracle. M isalnya SYS_P001, SYS_P002, dan seterusnya

SQL > select segment_name, partition_name 2 from user_segments

3 where segment_name in (‘sales’);

SEGMENT_NAME PARTITION_NAME --- SALES SYS_P25 SALES SYS_P26 SALES SYS_P27 SALES SYS_P28

Partitioning by hash lebih baik daripada by range bila :

• Kita tidak tahu sebelumnya ada berapa data berupa range. • Size partition by range akan sulit untuk di balance manually • Partitioning by range akan menyebabkan undesirably

clustered bila diimplementasikan

• Fitur perfomance seperti parallel DML, partition pruning, partition-wise joins menjadi sangat penting.

c. List Partitioning

Data dibagi berdasarkan daftar nilai tertentu, misalnya pada kolom KODE, dimana data dengan kode A, B diletakkan pada partisi pertama, data dengan kode C diletakkan pada partisi kedua, dan seterusnya. Partisi dengan jenis list hanya dapat digunakan pada satu kolom saja. Contoh penggunaan partition by list :

CREATE TABLE sales_list(

salesman_id NUMBER(5), salesman_name VARCHAR2(30), sales_state VARCHAR2(20), sales_amount NUMBER(10), sales_date DATE ) PARTITION BY LIST(sales_state)( west VALUES('California','Hawaii'),

east VALUES ('New York', 'Florida'), central VALUES('Texas', 'Illinois'), other VALUES(DEFAULT)

);

Tabel sales_list mencatat informasi masing-masing kota dan dikelompokkan menjadi empat wilayah, yaitu wilayah West terdiri dari California dan Hawaii, wilayah East terdiri dari New York dan Florida, wilayah Central terdiri dari Texas dan Illionis, serta wilayah other untuk menampung data pada wilayah lainnya.

d. Composite Partitioning

Partisi secara composite digunakan untuk membuat partisi dengan menggabungkan beberapa partisi dalam tabel yang sama.

Composite Range-Hash Partitioning.

Artinya : pada mulanya data dipartisi terlebih dahulu by range, kemudian dipartisi lagi secara hash. Berikut contoh penggunaan Composite Range-Hash Partitioning :

CREATE TABLE sales_composite ( salesman_id NUMBER(5), salesman_name VARCHAR2(30), sales_amount NUMBER(10), sales_date DATE ) PARTITION BY RANGE(sales_date) SUBPARTITION BY HASH(salesman_id) SUBPARTITION TEMPLATE( SUBPARTITION sp1 TABLESPACE ts1, SUBPARTITION sp2 TABLESPACE ts2, SUBPARTITION sp3 TABLESPACE ts3, SUBPARTITION sp4 TABLESPACE ts4 )

(PARTITION jan2000 VALUES LESS THAN (TO_DATE('02/01/2000','DD/MM/YYYY')) PARTITION feb2000 VALUES LESS THAN

(TO_DATE('03/01/2000','DD/MM/YYYY')) PARTITION mar2000 VALUES LESS THAN

(TO_DATE('04/01/2000','DD/MM/YYYY')) PARTITION apr2000 VALUES LESS THAN

(TO_DATE('05/01/2000','DD/MM/YYYY')) PARTITION may2000 VALUES LESS THAN

(TO_DATE('06/01/2000','DD/MM/YYYY')) );

Tabel di atas dipartisi secara range berdasarkan kolom sales_date. Kemudian setiap partisinya akan dipartisi lagi by hash berdasarkan kolom salesman_id. Partisi berdasarkan

kolom salesman_id ini disebut sebagai subpartisi dari partisi berdasarkan kolom sales_date. Oracle akan membuat segmen terpisah untuk setiap subpartisi. Sehingga jika jumlah partisi secara RANGE adalah 7 dan jumlah partisi berdasarkan HASH adalah 4, maka total partisi yang terbentuk adalah 28 partisi.

Composite Range-List Partitioning

Artinya : pada mulanya data dipartisi terlebih dahulu by range, kemudian dipartisi lagi secara list. Contoh penggunaanya adalah : partisi pertama (secara range) digunakan untuk mengelompokkan bulan, dan subpartisinya digunakan untuk mengelompokkan region.

Gambar 2-6 Com posite Range-Hash Partitioning

d. Interval Partitioning

Berdasarkan Oracle White Paper yang berjudul Partitioning in Oracle Database 11g (2007,p9), terdapat partitioning extentions yang merupakan fitur baru pada oracle 11g, salah satunya adalah interval partitioning :

Interval partitioning merupakan kemampuan tambahan dari range partitioning. Kelebihannya terdapat pada kemampuan membuat partisi baru secara otomatis ketika terdapat data baru yang tidak memenuhi kriteria partisi yang sudah ada. Partisi baru yang dihasilkan akan sesuai dengan kriteria partisi interval yang sudah didefinisikan sebelumnya dan terbentuk pada saat data tersebut masuk untuk pertama kalinya.

Berikut merupakan batasan-batasan interval partitioned table : Interval partitioning terbatas untuk satu partition key yang

harus berupa numeric atau date range.

M inimal satu partisi telah terbentuk pada saat tabel dibuat

Tidak bisa assign nilai M AXVALUE

Kolom yang dipartisi tidak boleh bernilai NULL

Interval partitioning hanya dapat digunakan sebagai partisi utama pada composite partitioning, tidak dapat menjadi subpartition level.

Berikut contoh code interval partitioned : CREATE TABLE interval_tab ( id NUMBER,

created_date DATE )

PARTITION BY RANGE (created_date) INTERVAL(NUMTOYMINTERVAL(1,'MONTH'))( PARTITION part_01 values LESS THAN

(TO_DATE('01-NOV-2007','DD-MON-YYYY')) );

Code di atas membuat suatu tabel yang menggunakan interval partition, klausa yang berwarna merah adalah kriteria interval yang berarti sistem akan secara otomatis membuat partisi per bulan untuk data yang tidak memenuhi kriteria partisi yang sudah ada (sebelum tanggal 1 November 2007).

SELECT partition_name, high_value,num_rows FROM user_tab_partitions

ORDER BY table_name, partition_name;

PARTITION_NAME HIGH_VALUE NUM_ROWS --- --- --- PART 01 2007-11-01 0

Code di atas menunjukkan jumlah partisi yang terbentuk baru satu, yakni yang di-define pada saat create table yaitu

PART_01. Karena belum ada data yang di-insert kedalam tabel,

maka num_rows masih bernilai 0.

INSERT INTO interval_tab VALUES

(1,TO_DATE('16-OCT-2007', 'DD-MON-YYYY')); INSERT INTO interval_tab VALUES

(2,TO_DATE('31-OCT-2007', 'DD-MON-YYYY')); COMMIT;

SELECT partition_name,high_value,num_rows FROM user_tab_partitions

ORDER BY table_name, partition_name;

PARTITION_NAME HIGH_VALUE NUM_ROWS --- --- --- PART 01 2007-11-01 2

Code di atas menunjukkan tabel interval_tab telah memiliki 2 data pada partisi PART_01, karena sebelumnya telah di-insert 2 data yang kolom created_date-nya di bawah tanggal 1 November 2007.

INSERT INTO interval_tab VALUES (5,01-JAN-2008); INSERT INTO interval_tab VALUES (4,31-JAN-2008); COMMIT;

SELECT partition_name,high_value,num_rows FROM user_tab_partitions

ORDER BY table_name, partition_name;

Code di atas melakukan insert data ke tabel interval_tab dengan nilai created_date 1 hingga 31 JAN 2008.

Data di atas menunjukkan tabel interval_tab telah memiliki 2 partisi yakni PART_01 yang di-define pada saat create table dan

SYS_P44 yang merupakan partisi interval yang di-create secara

otomatis oleh sistem karena data baru yang dimasukkan, nilai created_date nya 1 hingga 31 JAN 2008 (yang berarti tidak memenuhi kriteria partisi yang pertama).

2.2.10 Indexing

Dokumen terkait