Minggu, 15 November 2009

Teknik Recovery

TEKNIK RECOVERY

(ref. Fundamentals of DB Systems, Elmasri, N)

Pengenalan Transaksi dan Pemrosesannya

Konsep transaksi menyediakan suatu mekanisme untuk menggambarkan unit logika dari proses database. Sistem pemrosesan transaksi merupakan sistem dengan database yang besar dan ribuan concurrent user yang mengeksekusi transaksi database.

Sistem Single-user VS Multiuser

Satu kriteria untuk mengklasifikasikan suatu sistem database berdasarkan jumlah user yang menggunakan sistem secara konkuren – yaitu pada saat yang bersamaan.

DBMS adalah single-user jika paling banyak satu user yang dapat menggunakan sistem satu saat, dan multiuser jika banyak user dapat menggunakan sistem, dan kemudian mengakses database – bersamaan. Single-user DBMS kebanyakan terbatas pada beberapa sistem mikro komputer, selain itu multiuser.

Multiple user dapat mengakses database dan menggunakan sistem komputer secara simultan karena adanya konsep multiprogramming, dimana komputer dapat mengeksekusi multiple program – atau proses – pada saat yang bersamaan. Jika hanya ada sebuah CPU, berarti hanya dapat mengeksekusi satu proses satu saat. Sistem operasi multiprogramming mengeksekusi beberapa perintah dari satu proses kemudian menahan proses tsb dan mengeksekusi beberapa perintah dari proses selanjutnya, dst. Suatu proses dilanjutkan atau diteruskan dari tempat proses tsb ditahan pada saat gilirannya.

2 buah proses A dan B tereksekusi secara bergantian. Proses bergantian ini (interleaved) menyebabkan CPU tetap sibuk ketika sebuah proses membutuhkan operasi I/O misalnya baca blok dari disket. CPU diubah untuk mengeksekusi proses lainnya daripada berada dalam keadaan idle selama waktu I/O. proses inteleave ini menghindari proses yang lama dari penundaan proses lain.

Jika sistem komputer memiliki prosesor hardware yang banyak, proses paralel dari proses yang multiple mungkin, seperti proses C dan D., istilah ini disebut dengan interleaved concurrency. Di DBMS yang multiuser, item data yang disimpan merupakan sumber utama yang dapat diakses secara konkuren oleh user yang interaktif atau program aplikasi, yang secara konstan mengambil informasi dari database dan memodifikasi DB.

Transaksi merupakan unit logika dari proses database yang mencakup satu atau lebih operasi akses database – meliputi insert, delete, modifikasi atau operasi retrieve. Operasi database ini dapat diembed dalam suatu program aplikasi atau dapat langsung dibuat interaktif dengan bahasa query level tinggi misal SQL. Satu cara untuk menspesifikasikan batasan transaksi adalah dengan membuat statemen begin transaction dan end transaction dalam program aplikasi; dalam kasus ini semua operasi akses database diantara statemen begin-end dianggap sebagai sebuah transaksi. Sebuah program aplikasi dapat berisi lebih dari sastu transaksi jika berisi beberapa batasan transaksi.

Jika operasi database dalam suatu transaksi tidak meng-update database tetapi hanya mengambil (retrieve) data, transaksinya disebut dengan read-only transaction.

Database direpresentasikan sebagai kumpulan dari item data yang dinamakan. Unkuran dari suatu item data disebut granularity, dan dapat berupa filed dari beberapa record dalam database atau dapat merupakan unit yang lebih besar seperti record atau bahkan seluruh blok disk.

STATUS TRANSAKSI & OPERASI TAMBAHAN

Suatu transaksi adalah unit terkecil dari kerja yang dapat diselesaikan atau tidak dapat diselesaikan. Beberapa operasinya dengan diagram transisinya :

§ BEGIN_TRANSACTION : memulai transaksi

§ READ or WRITE : operasi baca atau tulis dari item database yang dieksekusi sebagai bagian dari transaksi

§ END_TRANSACTION : operasi transaksi READ atau WRITE selesai dilakukan

§ COMMIT_TRANSACTION : transaksi berakhir sukses sehingga semua perubahan (update) yang dilakukan melalui transaksi dapat dimasukkan ke database dan akan diselesaikan

§ ROLLBACK (or ABORT) : transaksi berakhir dengan tidak sukses sehingga semua perubahan atau efek transaksi yang diaplikasikan ke database tidak dapat diselesaikan.


KONSEP RECOVERY

Recovery dari suatu kegagalan transaksi biasanya berarti database direstore ke status yang konsisten ke waktu sebelum terjadi kegagalan.

Untuk mengcover kesalahan atau kegagalan dari transaksi, sistem memaintain sebuah log untuk menjaga jalannya semua operasi yang mempengaruhi nilai dari item database. Informasi ini mungkin akan dibutuhkan untuk mengcover adanya kegagalan. LOG disimpan di storage, dan secara berkala diback-up ke storage lainnya untuk menjaga dari kerusakan yang fatal.

Beberapa strategi recovery :

1. Jika terjadi kerusakan ke sebagian besar database, misalnya disk crash, metode recovery merestore kopi sebelumnya dari database yang sudah diback-up ke storage khusus (biasanya tape) dan membangun kembali status dengan mengaplikasikan kembali atau redo operasi dari transaksi yang commit dari log backed-up sampai waktu dimana terjadi kegagalan

2. Ketika database tidak secara fisik rusak tetapi hanya menjadi tidak konsisten karena adanya kesalahan (system crash, system error, local error, concurrency control), strategi adalah membalik semua perubahan yang menyebabkan ketidak konsistenan yaitu dengan meng-undo beberapa operasi. Kemungkinan juga dengan melakukan redo beberapa operasi supaya dapat merestore status database yang konsisten.

Konsep DataBase Recovery SQL

Komponen Database Oracle (1.2.2 Redo Log Files)

Redo Log Files adalah bagian yang sangat penting di database oracle. Redo log files sebagai tempat catatan setiap transaksi yang terjadi di oracle. Fungsi utama redo log files digunakan untuk kebutuhan proses recovery. Pada sebuah proses transaksi normal, oracle memperbarui block yang berada di memori (buffer cache).

Jika pada saat ini oracle mengalami kegagalan dan data yang diperbarui belum tersimpan ke datafiles, oracle akan menggunakan reo log files untuk melakukan recover data yang sudah diperbarui. Oracle akan mengembalikan posisi transaksi terakhir saat sebelum oracle mengalami kegagalan.

Jika suatu saat terjadi kerusakan pada datafiles, oracle juga akan menggunakan archive log files dan online redo log files untuk melakukan restore data. Jika terjadi kesalahan melakukan drop table, table tersebut dapat dikembalikan lagi dengan menggunakan online redo log files dan archive log files. Oracle juga menggunakan redo log files ini pada standby datatbase.

Online Redo Log

Setiap database oracle minimal harus mempunyai dua online redo log files, dan umumnya minimal mempunyai tiga redo log files. Besar online redo log files tetap, dan bekerja secara bergantian (Circular fashion). Oracle akan menulis redo log pertama. Ketika redo log pertama ini sudah penuh, oracle akan berpindah ke redo log kedua untuk memulai menulis redo entries. Jika redolog kedua ini sudah penuh, oracle akan berpindah ke reo log files ketiga, begitu seterusnya.

Perpindahan redo log files satu ke redo log files berikutnya, disebut sebagai proses log switch. Proses log switch dapat menimbulkan ‘hang’ sementara, jika tuning database-nya kurang tepat. saat log terjadi , oracle akan melakukan checkpoint, yaitu sebuah sinyal yang memaksa DBWR (Database Writer) memindahkan block-block yang diperbarui (dirty block) yang ada di SGA ke datafiles, yang dilakukan secara background proses.

Archive Redo Log

Database oracle dapat berjalan pada dua mode, yaitu NOARCHEVLOG dan ARCHIVELOG. untuk menghindari kehilangan data pada saat terjadi kegagalan, sebaiknyamenjalankan database oracle pada mode ARCHIVELOG.

Jika suatu saat terjadi kesalahan dalam melakukan drop table tanpa ARCHIVELOG kesempatan untuk melakukan recovery akan semakin kecil. Terutama pada sebuah database yang mempunyai jumlah transaksi yang sangat besar. Semakin sibuk sebuah system, maka semakin sring oracle melakukan log switch, yang artinya senakin kemungkinan melakukan point in time recovery (PITR) jika tidak menjalankan databse dengan mode ARCHIVELOG.