Tư tưởng chính của ký thuật cập nhật trì hoãn là trì hoãn việc cập nhật thực sự vào csdl cho đến khi giao dịch đạt tới trạng thái commit.
33
Một giao dịch không thể thay đổi csdl trên đĩa cho đến khi nó đạt tới trạng thái commit.
Một giao dịch không thể đạt tới trạng thái commit cho đến khi tất cả các thao tác cập nhật của nó được ghi lại trên file log (WAL: write – ahead logging).
Các thao tác CSDL sẽ không được cập nhật cho đến khi giao dịch hoàn tất nên không cần các thao tác UNDO. Có thể phải REDO trong trường hợp hệ thống lỗi sau khi giao dịch đã hoàn tất nhưng trước khi tất cả các thay đổi được ghi vào cơ sở dữ liệu. Giao dịch Ti cần được REDO nếu trong file log chứa cả hai bản ghi: <Ti start> và <Ti commit>. Cũng vì vậy mà kỹ thuật phục hồi này còn được gọi là NO – UNDO/ REDO recovery algorithm. Bảng sau chỉ ra các loại bản ghi được tạo ra trong file log:
Thao tác của giao dịch Bản ghi trong file Log
Giao dịch Ti bắt đầu Ti, Start
Ti Write(X) Ti, X, New_Value
Giao dịch Ti hoàn tất Ti, Commit
Ví dụ: Xét ba mục dữ liệu A, B, C với các giá trị ban đầu lần lượt là 1000, 2000, 700 và hai giao dịch T1, T2:
T0: Read(A) Bản ghi trong file log
A = A – 50 T0,Start Write(A) T0, A, 950 Read(B) T0, B, 2050 B = B + 50 T0, Commit Write(B) T1, Start T1, C, 600 T1: Read(C) T1, Commit C = C – 100 Write(C)
Sau đây là một số tình huống xảy ra và hành động của hệ thống phục hồi sử dụng kỹ thuật cập nhật trì hoãn cơ sở dữ liệu:
34
Tình huống Hệ thống phục hồi Giá trị các mục dữ liệu
A B C
Lỗi sau khi T0 vừa thực hiện thao tác write B. Không làm gì. 1000 2000 700 Lỗi sau khi T1 thực hiện Write(C). REDO(T0) 950 2050 700