Oracle Data Block
Oracle mengalokasikan logical space untuk semua data di dalam database. Logical space itu adalah data block, extent dan segment.
Pada level terkecil, Oracle menyimpan data di dalam data block (juga disebut logical block, oracle block, atau page). Extent merupakan sejumlah data block yang berdekatan yang dialokasikan untuk menyimpan informasi dengan jenis tertentu. Sedangkan segment adalah kumpulan extent.
Setiap data dari suatu table disimpan di dalam data segment-nya sendiri, sedangnya setiap data dari index juga disimpan di dalam index segment-nya sendiri. Jika table atau index dipartisi, setiap partisi disimpan di dalam segment-nya sendiri.
Oracle mengalokasikan space untuk segment dalam extent. Ketika extent yang ada sudah penuh, Oracle mengalokasikan extent lainnya untuk segment tersebut. Extent dialokasikan sesuai kebutuhan, oleh sebab itu extent dari sebuah segment bisa jadi tidak berdekatan di dalam disk.
Sebuah segment dan semua extent-nya disimpan di dalam satu tablespace.
Data Block
Sebuah data block merupakan unit data terkecil yang digunakan oleh sebuah database. Standar besarnya block ditetapkan oleh sebuah initialization parameter, yaitu DB_BLOCK_SIZE. Anda bisa menetapkan hingga lima ukuran block nonstandard. Ukuran data block harus merupakan kelipatan dari ukuran block dari sistem operasi untuk menghindari I/O yang tidak perlu.
Format dari data block selalu sama, baik yang berisi table, index, maupun clustered data.
Header (Common dan Variable)
Header berisi informasi umum mengenai block, seperti alamat block, dan jenis dari segment (misalnya data atau index).
Table Directory
Bagian ini berisi informasi tentang table yang memiliki row di dalam block tersebut.
Row Directory
Bagian ini berisi informasi tentang row di dalam block.
Overhead
Merupakan kumpulan dari data block header, table directory, dan row directory.
Row Data
Bagian ini berisi data dari table atau index.
Free Space
Merupakan bagian yang dialokasikan untuk row baru, juga untuk menampung data akibat update dari row yang telah ada.
Mengatur Free Space
Free space bisa diatur secara manual ataupun otomatis.
Free space dapat diatur secara otomatis di dalam database segment. Pengaturan space dari suatu segment secara otomatis memberikan keuntungan sebagai berikut:
- mudah untuk digunakan
- penggunaan space yang lebih baik, khususnya untuk object-object dengan ukuran row yang berbeda-beda.
- bisa melakukan penyesuaian di saat run-time dengan lebih baik.
- lebih baik dalam kondisi multi-instance.
Row Chaining and Migrating
Ada dua kondisi dimana data untuk sebuah row di dalam table menjadi terlalu besar untuk bisa muat di dalam satu data block.
Kondisi pertama, row tersebut terlalu besar untuk bisa muat ke dalam satu data block ketika pertama kali dimasukkan. Untuk kasus ini, Oracle menyimpan data row tersebut ke dalam urutan (chain) data block yang telah disediakan untuk segment itu. Row chaining bisasanya terjadi dengan row yang besar, seperti row yang berisi column dengan tipe data LONG atau LONG RAW. Dalam hal ini row chaining tidak bisa dihindari.
Kondisi kedua, sebuah row pada awalnya cukup untuk masuk ke satu data block, namun kemudian row tersebut diupdate sehingga ukurannya menjadi lebih besar, sedangkan free space yang ada sudah terisi penuh. Untuk kasus ini, Oracle me-migrate seluruh row data ke data block yang baru, dengan asumsi bahwa semua isi dari row itu bisa masuk ke block yang baru.