Managing Tables B U D I S E T I Y O N O, M T
Jenis-jenis table Tabel yang biasa dikenal : Tabel reguler Partitioned table Index-organized table Cluster table Regular table Partitioned table Indexorganized table Cluster
Regular table Merupakan table paling umum digunakan untuk menyimpan data Merupakan default table DBA mempunyai akses yang sangat terbatas terhadap distribusi baris-baris dalam table Baris dapat disimpan dalam urutan sembarang, tergantung pada aktivitas dari table
Partitioned table Partisi sangat berguna untuk table dengan ukuran besar dan sering dimanipulasi secara concurrent Sebuah partitioned table mempunyai satu atau lebih partisi Tiap partisi dalam partitioned table dialokasikan pada sebuah segment dan dapat ditempatkan dalam tablespace yang berbeda-beda
Jenis Partisi (range) Range field dipartisi berdasarkan nilai dalam range tertentu Contoh :
Jenis Partisi (hash) Hash jika tidak diketahui secara spesifik nilai, ataupun range yang akan dipartisi Contoh :
Jenis Partisi (list) Merupakan fitur baru di Oracle 9i List untuk tiap partisi hanya diberlakukan nilai-nilai tertentu Contoh :
Jenis Partisi (composite) Composite merupakan jenis partisi gabungan antara metode partisi range dan hash Contoh :
Index-organized table Akan lebih baik digunakan untuk tabel-tabel yang banyak diakses melalui primary key-nya Menyimpan data dalam bentuk struktur index. Menyerupai heap table dengan primary index pada satu kolom atau lebih Data akan tersimpan secara berurutan sesuai dengan kolom primary key Maintenance dilakukan pada dua bagian storage yang terpisah : Table sendiri (table segment) index (B-tree) (index segment) Menyediakan fast key untuk query yang tepat.
Clustered table Sebuah cluster dibuat untuk mengelompokkan table-table yang mempunyai kesamaan datablok ataupun table-table yang share column dan sering digunakan bersama Karakteristik dari cluster: Cluster mempunyai sebuah cluster key, yang digunakan untuk mengidentifikasi baris yang diperlukan untuk disimpan secara bersama Cluster key terdiri dari satu atau lebih kolom Table dalam cluster mempunyai kolom yang berkaitan dengan Cluster key Updating suatu kolom dalam Cluster key dapat berakibat migrasi baris Cluster biasanya dibuat untuk meningkatkan perfomansi Cluster hanay berpengaruh pada fisikal storage, tanpa mempengaruhi struktur logical
Oracle Data Types Data type User-defined Scalar Built-in Collection Relationship CHAR(N), NCHAR(N) VARCHAR2(N), NVARCHAR2(N) NUMBER(P,S) DATE RAW(N) BLOB, CLOB, NCLOB, BFILE LONG, LONG RAW ROWID VARRAY TABLE REF
Tipe Data untuk penyimpanan Large Objects LONG, LONG RAW Single column per table Up to 2 gigabytes SELECT returns data Data stored in-line No object type support Sequential access to chunks LOB Multiple columns per table Up to 4 gigabytes SELECT returns locator Data stored in-line or out-of-line Supports object types Random access to chunks
Struktur Baris Baris data disimpan sebagai variable length record Kolom pada suatu baris pada umumnya disimpan sebagaimana urutan yang telah didefinisikan Kolom dengan nilai NULL tidak disimpan Tiap baris dalam sebuah table mempunyai Row header untuk menyimpan jumlah kolom dalam baris tersebut, chaining, row lock status Row data untuk setiap kolom, Oracle akan menyimpan panjang kolom dan nilai Database block Row header Column length Column value
Struktur Baris Legenda Header Direktori Tabel Direktori Baris Ruang kosong Baris Data Database block Row header Column length Column value Data Blok
ROWID Data Type Identifier Unique untuk sebuah baris Digunakan untuk mengalokasikan sebuah baris ROWID Format OOOOOO FFF BBBBBB RRR Data object number Relative file number Block number Row number Contoh
Restricted ROWID Untuk compatible (pre Oracle 8i) Dapat mengidentifikasi baris-baris dalam segment Membutuhkan lebih sedikit space BBBBBBBB. RRRR. FFFF Block number Row number File number
High Water Mark (HWM) Merupakan indikator blok terakhir yang pernah dipakai Batas scanning terhadap suatu tabel Oracle instance tidak akan merubah HWM jika kita mendelete baris After inserts Extent ID 0 1 2 3 4 High water mark After deletes Extent ID 0 1 2 3 4 Used block Unused block Free space after delete
Truncated table Merubah posisi HWM agar berada di awal blok, sehingga blok yang kosong tidak di-scan (ketika full table scan) Gunakan jika yakin bahwa setelah record di-delete, tidak akan ada insert kembali Penggunaan truncated akan berakibat perfomance menurun ketika ada insert record
Simulasi HWM 1. Buat table dengan banyak record 2. Set autotrace TraceOnley (onn-kan) 3. Amati jumlah blok yang discan 4. Set autotrace TraceOnley (off-kan) 5. Lakukan delete pada seluruh record 6. Lakukan commit 7. Set autotrace TraceOnley (onn-kan) 8. Amati jumlah blok yang discan
Create table Set autotrace Lakukan scan full table Delete Tanpa Truncate
Delete Tanpa Truncate Set autotrace off Delete seluruh record Lakukan commit Set autotrace onn Lakukan full scan table
Perbandingan Sebelum delete Setelah delete tanpa truncate
Delete dengan Truncate Setelah delete tanpa truncate Setelah delete dengan truncate
Deallocation of Unused Space Before deallocation ALTER TABLE scott.employees DEALLOCATE UNUSED; High water mark After deallocation Used block Unused block Free space after delete
Efek Truncate pada Insert Tanpa truncate Dengan truncate
Row Chaining dan Row Migration Row Chaining row yang merentang lebih dari satu blok. Penyebab : Ukuran row > ukuran blok dan atau PctFree tak dapat menampung hasil update, sementara blok berikutnya tak mampu menampung seluruh row Row migration row yang bermigrasi secara keseluruhan dari satu blok ke blok lain. Penyebab : PctFree tak dapat menampung hasil update row sementara blok berikutnya mampu menampung seluruh row Ukuran row < ukuran blok
Row Migration and Chaining Before update After update
Deallocation of Unused Space Before deallocation ALTER TABLE scott.employees DEALLOCATE UNUSED; High water mark After deallocation Used block Unused block Free space after delete
Informasi table DBA_OBJECTS OWNER OBJECT_NAME OBJECT_ID DATA_OBJECT_ID CREATED DBA_SEGMENTS OWNER SEGMENT_NAME TABLESPACE_NAME HEADER_FILE HEADER_BLOCK DBA_TABLES OWNER TABLE_NAME PCT_FREE PCT_USED INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE CACHE BLOCKS EMPTY_BLOCKS CHAIN_CNT
Contoh informasi dari table ANALYZE TABLE scott.employees ESTIMATE STATISTICS; Check CHAIN_CNT SELECT chain_cnt FROM DBA_TABLES WHERE table_name= EMPLOYEES AND owner= SCOTT ;