Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Tabel partisi Oracle

Apa itu Tabel Partisi Oracle?

Partisi membagi tabel, indeks, atau tabel indeks-terorganisir menjadi komponen yang lebih kecil. Setiap komponen disebut partisi (atau subpartisi untuk objek yang dipartisi komposit). Setiap partisi memiliki nama yang unik, dan secara opsional mungkin memiliki karakteristik penyimpanan individual:contohnya termasuk kompresi, atau disimpan di tablespace yang berbeda. Strategi partisi yang dirancang dengan baik dapat meningkatkan akses kueri dan pembaruan dengan membatasi operasi pada satu atau sub-set partisi.

Partisi untuk Performa – Pemangkasan Partisi

Fitur tabel Oracle Partitioned memungkinkan pengoptimal kueri untuk melewati partisi yang tidak diperlukan oleh pernyataan SQL tertentu. Bergantung pada pernyataan SQL, pengoptimal dapat mengidentifikasi partisi dan sub-partisi yang perlu diakses, serta yang tidak. Hal ini dapat menghasilkan peningkatan substansial dalam kinerja kueri, karena pengoptimal berfokus pada subset data tertentu yang dapat disempurnakan lebih lanjut jika ada predikat tambahan.

Pengoptimal melakukan ini dengan menggunakan informasi partisi yang disimpan di kamus data untuk mengidentifikasi konten partisi tanpa menanyakan data yang ada di dalamnya. Partisi adalah lapisan ekstra kamus data antara Tabel/Indeks dan Ruang Tabel

Batasan Tabel yang Dipartisi

Di Oracle Database 11g, sebuah tabel dapat memiliki maksimal 1048575 (1024K – 1) partisi. Dengan satu-satunya pengecualian tabel yang berisi kolom tipe data LONG atau LONG RAW, semua tabel dapat dipartisi (termasuk kolom tipe CLOB atau BLOB).

Jenis Partisi Tabel

Partisi tersedia di database Oracle dari versi 8.0 dan Oracle terus menambahkan lebih banyak fitur dengan setiap rilis. Tabel berikut menunjukkan ringkasan perubahan utama

Strategi partisi utama yang diberikan oleh Oracle adalah
(1)Range
(2)List
(3) Hash
(4)Composite

Cara membuat Tabel Partisi

Tergantung jenis Partisi, berikut cara membuat tabel Partisi

Partisi Rentang

Oracle Mempartisi data berdasarkan rentang nilai kunci Partisi yang berurutan.
Titik akhir setiap partisi ditentukan menggunakan sintaks berikut:

VALUES LESS THAN (value-list)

Contoh

CREATE TABLE EXP_RANGE
 (ID NUMBER(15) NOT NULL,
 CODE_ID NUMBER(15) NOT NULL,
 PERIOD_NAME VARCHAR2(15) NOT NULL,
 ACTUAL_FLAG VARCHAR2(1) NOT NULL,
 VERSION_ID NUMBER(15),
 LAST_UPDATE_DATE DATE NOT NULL,
 . . . . . .
 )
 PARTITION BY RANGE (PERIOD_NAME)
 (
 PARTITION PR1 VALUES LESS THAN ('JAN-2019'),
 PARTITION PR2 VALUES LESS THAN ('FEB-2019')
 . . .
 . . .
 );

Partisi Rentang berguna untuk mempartisi data historis dan transaksi, karena batas partisi rentang menentukan urutan partisi dalam tabel dan indeks

Pembagian Daftar

Dalam metode ini, oracle memetakan baris tertentu ke partisi, berdasarkan daftar statis nilai literal. Kunci partisi untuk partisi daftar hanya dapat didasarkan pada satu kolom.

CREATE TABLE EXP_LIST
 (ID NUMBER NOT NULL,
 ORG_ID NUMBER,
 OPEN_FLAG VARCHAR2(4) NOT NULL,
 . . . . . .
 ) PARTITION BY LIST (open_flag)
 (
 PARTITION PR1 VALUES ('YES'),
 PARTITION PR2 VALUES ('NO')
 );

Partisi Hash

Dalam oracle ini digunakan algoritma hashing untuk memutuskan penempatan fisik data. Partisi hash akan mendistribusikan data secara merata di sejumlah partisi tetap.

CREATE TABLE EXP_HASH
 (ID NUMBER NOT NULL,
 ORG_ID NUMBER,
 ORDERED_ITEM VARCHAR2(2000),
 OPEN_FLAG VARCHAR2(1) NOT NULL,
 . . . . . .
 )
 PARTITION BY HASH (ID)
 PARTITIONS 10
 . . .
 . . .;
 );

Partisi Komposit

Dalam oracle ini digunakan kombinasi range, list dan hash partitioning. Metode partisi komposit adalah range-hash atau range-list.

CREATE TABLE sales_details
   ( prod_id       NUMBER(6)
   , cust_id       NUMBER
   , time_id       DATE
   , channel_id    VARCHAR2(1)
   , promo_id      NUMBER(6)
   , quantity_sold NUMBER(3)
   , amount_sold   NUMBER(10,2)
   )
  PARTITION BY RANGE (time_id) SUBPARTITION BY HASH (cust_id)
   SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4)
  ( PARTITION sales_q1_2019 VALUES LESS THAN (TO_DATE('01-APR-2019','dd-MON-yyyy'))
  , PARTITION sales_q2_2019 VALUES LESS THAN (TO_DATE('01-JUL-2019','dd-MON-yyyy'))
  , PARTITION sales_q3_2019 VALUES LESS THAN (TO_DATE('01-OCT-2019','dd-MON-yyyy'))
  , PARTITION sales_q4_2019 VALUES LESS THAN (TO_DATE('01-JAN-2019','dd-MON-yyyy'))
  );

Cara memindahkan objek yang ada ke objek yang dipartisi

Ada banyak cara untuk mencapai prestasi ini. Saya menjelaskan di sini metode sederhana
1.Buat tabel kosong yang dipartisi menggunakan klausa yang dipartisi dan dengan opsi paralel. Nama tabel harus memiliki nama yang berbeda dari tabel yang tidak dipartisi.
2.Mengisi data untuk partisi yang diperlukan dari tabel yang tidak dipartisi.
3. Pertimbangkan untuk menggunakan petunjuk oracle APPEND dengan pernyataan INSERT sebagai perubahan kode mudah yang memberikan kinerja yang baik. Jika logging diaktifkan dan indeks ada, petunjuk INSERT /*+ APPEND */ mungkin tidak efektif. Untuk meminimalkan overhead pemeliharaan indeks, jatuhkan indeks sebelum migrasi dan buat ulang setelah tabel yang dipartisi telah diisi.
4.Ubah nama tabel yang dipartisi menjadi sama dengan tabel aslinya, atau ubah sinonimnya.
5. Buat indeks tabel untuk tabel yang dipartisi

Juga Dibaca
Indeks Partisi Oracle
Kueri Paralel Oracle
https://docs.Oracle.com/cd/B28359_01/server.111/b32024/partition.htm


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Skrip admin di R12.2 Ebuisness Suite

  2. Bagaimana cara melihat gambar dari kolom gumpalan di Oracle dengan JasperReports?

  3. Bagaimana cara menyimpan karakter tanpa batas di Oracle 11g?

  4. Bagaimana cara membatasi jumlah baris yang dikembalikan oleh kueri Oracle setelah memesan?

  5. Subquery Rekursif dengan penyortiran