Lewati ke isi
ORACLEDECK

Topik 12

Kegagalan pada Sistem Basis Data Terdistribusi

Jenis kegagalan, pengaruhnya terhadap pemulihan, dan protokol komitmen dua fase.

Kemampuan akhir yang diharapkan. Memahami kejadian kegagalan di lingkungan pemrosesan data terdistribusi.

Jenis kegagalan

JenisAda di sistem terpusat?Dampak khas pada DDBMS
Kegagalan transaksiYaRollback lokal; subtransaksi lain harus ikut dibatalkan
Sistem crashYaLog dipakai untuk redo/undo saat situs pulih
Kesalahan mediaYaPemulihan dari backup dan arsip log
Kehilangan pesanTidakKoordinator timeout dan menganggapnya suara abort
Kegagalan jalur komunikasiTidakSitus tidak terjangkau meski hidup
Kegagalan situsTidakSubtransaksi menggantung di situs itu
Partisi jaringanTidakSistem terbelah menjadi dua kelompok yang saling tak terlihat

Protokol komitmen dua fase

FaseKoordinatorPeserta
1 — VotingTulis begin_commit, kirim PREPARE ke semua pesertaTulis catatan ready, balas VOTE-COMMIT atau VOTE-ABORT
2 — DecisionTulis keputusan, kirim GLOBAL-COMMIT / GLOBAL-ABORTTerapkan keputusan, kirim ACK, tulis end_of_transaction

Begitu peserta menulis catatan ready, ia menyerahkan hak memutuskan kepada koordinator. Jika koordinator jatuh tepat setelah itu, peserta tidak boleh commit maupun abort sendiri — ia terblokir, dan kunci yang dipegangnya ikut menahan transaksi lain.

Protokol terminasi kooperatif

Peserta yang menggantung boleh bertanya ke peserta lain. Bila ada peserta yang sudah tahu keputusan, keputusan itu disalin. Bila semua peserta sama-sama berada di keadaan READY, tidak ada informasi baru dan semuanya tetap terblokir — inilah batas kemampuan 2PC.

Yang terjadi di Oracle

Oracle menjalankan 2PC secara otomatis begitu satu transaksi menyentuh lebih dari satu basis data lewat database link. Tidak ada perintah khusus — cukup COMMIT. Transaksi yang menggantung muncul di DBA_2PC_PENDING dengan STATE bernilai prepared.

SELECT local_tran_id, global_tran_id, state, mixed, host
  FROM dba_2pc_pending
 ORDER BY fail_time;

-- Hanya setelah keputusan koordinator dipastikan:
COMMIT FORCE '1.15.1234';
-- atau ROLLBACK FORCE '1.15.1234';
EXEC DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('1.15.1234');

Memaksa keputusan yang berbeda dari keputusan koordinator menghasilkan mixed outcome — kolom MIXED bernilai yes, sebagian situs commit dan sebagian rollback. Basis data kehilangan konsistensi global dan harus diperbaiki manual.

Coba di terminal

Kueri di bawah memperagakan konsep topik ini pada data sungguhan. Tekan ▶ Jalankan untuk membukanya di Terminal SQL, lalu ubah sesuka hati — sesi terminal adalah salinan pribadi di peramban Anda.

Two-phase commit sukses

Dua situs ditulis, COMMIT memicu PREPARE → VOTE → GLOBAL-COMMIT. terdistribusi

UPDATE pasien@jakarta SET no_hp = '081200000001' WHERE id_pasien = 1;
UPDATE pasien@bandung SET no_hp = '081200000003' WHERE id_pasien = 3;
COMMIT;

Satu situs VOTE-ABORT

Kegagalan satu peserta membatalkan transaksi di semua situs. terdistribusi galat disengaja: ORA-02091

\gagal bandung
UPDATE pasien@jakarta SET penyakit = 'X' WHERE id_pasien = 1;
UPDATE pasien@bandung SET penyakit = 'X' WHERE id_pasien = 3;
COMMIT;

DBA_2PC_PENDING dan COMMIT FORCE

Transaksi ragu-ragu diselesaikan manual oleh DBA, persis seperti di Oracle. terdistribusi galat disengaja: ORA-02054

\gagal koordinator
DELETE FROM daftar@jakarta WHERE id_daftar = 1;
DELETE FROM daftar@surabaya WHERE id_daftar = 9;
COMMIT;
SELECT local_tran_id, state FROM dba_2pc_pending;

Jalankan sendiri

Sumber: Modul 1 (RPS pekan 12); Modul 6 bagian Transparansi Kegagalan