Salah satu cara untuk menjamin keatomikan suatu transaksi adalah adanya rolled-back ke kondisi sebelum transaksi. Untuk melakukan rolled-back tersebut, kita harus menyimpan semua informasi yang berkaitan dengan modifikasi data pada transaksi tersebut di stable storage. Metode yang sering digunakan untuk menyimpan hal tersebut adalah write-ahead logging. Dengan metode ini, setiap log menyimpan setiap operasi write dari sebuah transaksi dan terdiri dari:
Transaction name . Nama yang unik dari transaksi yang menjalankan operasi write.
Data item name . Nama yang unik dari data item yang ditulis.
Old value . Nilai data item sebelum operasi write dilakukan.
New value . Nilai yang akan dimiliki data item setelah dilakukan operasi write.
Selain untuk menyimpan operasi write, ada log lain yang menyimpan informasi-informasi penting lainnya seperti start dari sebuah transaksi dan commit atau abort sebuah transaksi. Sebelum transaksi mulai dilaksanakan, log menyimpan operasi start dan selama transaksi dijalankan, log mencatat setiap operasi write yang terjadi. Ketika terjadi commit, log menyimpan operasi commit.
Dengan menggunakan log, sistem dapat menangani kegagalan yang terjadi, sehingga tidak ada informasi yang hilang pada non-volatile storage. Algoritma pemulihan menggunakan dua buah prosedur:
Undo . Mengembalikan nilai semua data yang telah di- update oleh transaksi tersebut ke nilai sebelum transaksi dijalankan. Undo dilakukan ketika log menyimpan operasi start, tetapi tidak ada catatan operasi commit.
Redo . Nilai semua data yang di- update oleh transaksi tersebut diubah menjadi new value (nilai yang akan dimiliki data item setelah dilakukan operasi write). Redo dilakukan ketika didalam log tersimpan operasi start dan juga commit.