Managing Tables BUDI SETIYONO, MT 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 CHAR(N), NCHAR(N) VARCHAR2(N), NVARCHAR2(N) NUMBER(P,S) DATE RAW(N) BLOB, CLOB, NCLOB, BFILE LONG, LONG RAW ROWID Built-in Collection VARRAY TABLE Relationship REF Tipe Data untuk penyimpanan Large Objects LONG, LONG RAW LOB Single column per table Multiple columns per table Up to 2 gigabytes Up to 4 gigabytes SELECT returns data SELECT returns locator Data stored in-line Data stored in-line or out-of-line No object type support Supports object types Sequential access to chunks 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 header Database Row Column length block 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 Block number . RRRR Row number . FFFF 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 Extent ID 0 1 2 3 4 After inserts High water mark Extent ID 0 1 2 3 After deletes Used block Unused block Free space after delete 4 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. 2. 3. 4. 5. 6. 7. 8. Buat table dengan banyak record Set autotrace TraceOnley (onn-kan) Amati jumlah blok yang discan Set autotrace TraceOnley (off-kan) Lakukan delete pada seluruh record Lakukan commit Set autotrace TraceOnley (onn-kan) Amati jumlah blok yang discan Delete Tanpa Truncate Create table Set autotrace Lakukan scan full table 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 DBA_TABLES OWNER OBJECT_NAME OBJECT_ID DATA_OBJECT_ID CREATED OWNER TABLE_NAME PCT_FREE PCT_USED INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE CACHE BLOCKS EMPTY_BLOCKS CHAIN_CNT DBA_SEGMENTS OWNER SEGMENT_NAME TABLESPACE_NAME HEADER_FILE HEADER_BLOCK 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’;