DBMS - Pemulihan Data

Crash Recovery

DBMS adalah sistem yang sangat kompleks dengan ratusan transaksi dieksekusi setiap detik. Daya tahan dan ketahanan DBMS bergantung pada arsitektur kompleks dan perangkat keras serta perangkat lunak sistem yang mendasarinya. Jika gagal atau crash di tengah transaksi, diharapkan sistem akan mengikuti semacam algoritma atau teknik untuk memulihkan data yang hilang.

Klasifikasi Kegagalan

Untuk melihat di mana masalah telah terjadi, kami menggeneralisasi kegagalan ke dalam berbagai kategori, sebagai berikut -

Kegagalan transaksi

Sebuah transaksi harus dibatalkan ketika gagal untuk dieksekusi atau ketika mencapai titik di mana ia tidak dapat melangkah lebih jauh. Ini disebut kegagalan transaksi di mana hanya sedikit transaksi atau proses yang dirugikan.

Alasan kegagalan transaksi bisa jadi -

  • Logical errors - Di mana transaksi tidak dapat diselesaikan karena memiliki beberapa kesalahan kode atau kondisi kesalahan internal.

  • System errors- Dimana sistem database itu sendiri menghentikan transaksi yang aktif karena DBMS tidak dapat mengeksekusinya, atau harus berhenti karena beberapa kondisi sistem. Misalnya, jika terjadi kebuntuan atau ketidaktersediaan sumber daya, sistem membatalkan transaksi aktif.

Kerusakan Sistem

Ada masalah - di luar sistem - yang dapat menyebabkan sistem berhenti tiba-tiba dan menyebabkan sistem macet. Misalnya, gangguan dalam catu daya dapat menyebabkan kegagalan perangkat keras atau perangkat lunak yang mendasarinya.

Contohnya mungkin termasuk kesalahan sistem operasi.

Kegagalan Disk

Pada hari-hari awal evolusi teknologi, itu adalah masalah umum di mana hard-disk drive atau drive penyimpanan sering gagal berfungsi.

Kegagalan disk termasuk pembentukan bad sector, tidak terjangkaunya disk, head disk crash atau kegagalan lainnya, yang menghancurkan semua atau sebagian dari penyimpanan disk.

Struktur Penyimpanan

Kami telah menjelaskan sistem penyimpanan. Singkatnya, struktur penyimpanan dapat dibagi menjadi dua kategori -

  • Volatile storage- Seperti namanya, penyimpanan yang mudah menguap tidak dapat bertahan dari kerusakan sistem. Perangkat penyimpanan yang mudah menguap ditempatkan sangat dekat dengan CPU; biasanya mereka tertanam pada chipset itu sendiri. Misalnya, memori utama dan memori cache adalah contoh penyimpanan volatil. Mereka cepat tetapi hanya dapat menyimpan sedikit informasi.

  • Non-volatile storage- Kenangan ini dibuat untuk bertahan dari kerusakan sistem. Mereka sangat besar dalam kapasitas penyimpanan data, tetapi lebih lambat dalam aksesibilitas. Contohnya dapat mencakup hard-disk, pita magnetik, memori flash, dan RAM non-volatile (cadangan baterai).

Pemulihan dan Atomicity

Ketika sistem crash, mungkin ada beberapa transaksi yang sedang dieksekusi dan berbagai file dibuka untuk mereka memodifikasi item data. Transaksi dilakukan dari berbagai operasi, yang bersifat atomik. Tetapi menurut sifat ACID dari DBMS, atomicity transaksi secara keseluruhan harus dipertahankan, yaitu, semua operasi dijalankan atau tidak sama sekali.

Ketika DBMS pulih dari kerusakan, DBMS harus mempertahankan yang berikut:

  • Ini harus memeriksa status semua transaksi, yang sedang dieksekusi.

  • Sebuah transaksi mungkin berada di tengah-tengah suatu operasi; DBMS harus memastikan atomicity transaksi dalam kasus ini.

  • Ini harus memeriksa apakah transaksi dapat diselesaikan sekarang atau perlu dibatalkan.

  • Tidak ada transaksi yang diizinkan untuk meninggalkan DBMS dalam keadaan tidak konsisten.

Ada dua jenis teknik, yang dapat membantu DBMS dalam memulihkan serta menjaga atomicity transaksi -

  • Menjaga log dari setiap transaksi, dan menuliskannya ke beberapa penyimpanan stabil sebelum benar-benar memodifikasi database.

  • Mempertahankan shadow paging, di mana perubahan dilakukan pada memori volatil, dan kemudian, database aktual diperbarui.

Pemulihan Berbasis Log

Log adalah urutan catatan, yang menyimpan catatan tindakan yang dilakukan oleh suatu transaksi. Log harus ditulis sebelum modifikasi sebenarnya dan disimpan di media penyimpanan yang stabil, yang merupakan pengaman dari kegagalan.

Pemulihan berbasis log bekerja sebagai berikut -

  • File log disimpan di media penyimpanan yang stabil.

  • Ketika sebuah transaksi memasuki sistem dan memulai eksekusi, ia menulis log tentangnya.

<Tn, Start>
  • Ketika transaksi mengubah item X, itu menulis log sebagai berikut -

<Tn, X, V1, V2>

Bunyinya T n telah mengubah nilai X, dari V 1 ke V 2 .

  • Ketika transaksi selesai, itu mencatat -
<Tn, commit>

Basis data dapat dimodifikasi menggunakan dua pendekatan -

  • Deferred database modification - Semua log ditulis ke penyimpanan stabil dan database diperbarui saat transaksi dilakukan.

  • Immediate database modification- Setiap log mengikuti modifikasi database yang sebenarnya. Artinya, database diubah segera setelah setiap operasi.

Pemulihan dengan Transaksi Bersamaan

Ketika lebih dari satu transaksi dieksekusi secara paralel, log disisipkan. Pada saat pemulihan, akan sulit bagi sistem pemulihan untuk melacak kembali semua log, dan kemudian mulai memulihkan. Untuk meringankan situasi ini, kebanyakan DBMS modern menggunakan konsep 'pos pemeriksaan'.

Pos pemeriksaan

Menyimpan dan memelihara log dalam waktu nyata dan di lingkungan nyata dapat mengisi semua ruang memori yang tersedia di sistem. Seiring berjalannya waktu, file log mungkin menjadi terlalu besar untuk ditangani sama sekali. Checkpoint adalah mekanisme di mana semua log sebelumnya dihapus dari sistem dan disimpan secara permanen di disk penyimpanan. Checkpoint mendeklarasikan titik di mana DBMS berada dalam status konsisten, dan semua transaksi dilakukan.

Pemulihan

Ketika sistem dengan transaksi bersamaan lumpuh dan pulih, ia berperilaku sebagai berikut -

  • Sistem pemulihan membaca log mundur dari ujung ke pos pemeriksaan terakhir.

  • Itu memelihara dua daftar, daftar-undo dan daftar ulang.

  • Jika sistem pemulihan melihat log dengan <T n , Start> dan <T n , Commit> atau hanya <T n , Commit>, itu menempatkan transaksi dalam daftar ulang.

  • Jika sistem pemulihan melihat log dengan <T n , Start> tetapi tidak ada log komit atau batalkan yang ditemukan, itu akan menempatkan transaksi dalam daftar batal.

Semua transaksi dalam daftar urungkan kemudian dibatalkan dan lognya dihapus. Semua transaksi di daftar ulang dan log sebelumnya dihapus dan kemudian dilakukan ulang sebelum menyimpan log mereka.