<< Chapter < Page | Chapter >> Page > |
Không nhất thiết phải thực hiện thao tác Output(BX) ngay sau khi thao tác write(X) hoàn thành. Lý do là: khối đệm BX có thể còn chứa các hạng mục dữ liệu khác đang được truy xuất. Nếu hệ thống bị hư hỏng ngay sau khi thao tác write(X) hoàn thành, nhưng trước khi thực hiện thao tác Output(BX), giá trị mới của X sẽ không bao giờ được ghi ra đĩa, do đó, nó bị mất!
Trở lại với ví dụ đơn giản về hệ thống ngân hàng: Giao dịch Ti thực hiện việc chuyển $50 từ tài khoản A sang tài khoản B. Giả sử giá trị ban đầu của các tài khoản A và B là $1000 và $2000. Giả sử hệ thống bị hư hỏng trong khi Ti đang thực thi: sau khi thao tác output(BA) được thực hiện và trước khi thực hiện thao tác output(BB) (BA và BB là hai khối đệm chứa hai hạng mục A và B). Người ta có thể thực hiện một trong hai giải pháp phục hồi sau:
Vấn đề phát sinh ở chỗ: Ti thực hiện nhiều thao tác sửa đổi nội dung cơ sở dữ liệu, do đó cần nhiều thao tác xuất dữ liệu ra đĩa, nhưng lỗi phát sinh không cho phép tất cả các thao tác xuất dữ liệu hoàn thành.
Giải pháp nhằm đạt được tính nguyên tử là: trước khi thực hiện các thao tác sửa đổi cơ sở dữ liệu, cần ghi ra các thiết bị lưu trữ bền những thông tin mô tả các sửa đổi này. Cụ thể của giải pháp trên sẽ được trình bày trong các phần V.4, V.5 và V.6.
Một cấu trúc thường được dùng để ghi lại những thay đổi trên cơ sở dữ liệu là sổ ghi lộ trình (log). Log là một dãy các mẩu tin lộ trình (log records). Một thao tác cập nhật trên cơ sở dữ liệu sẽ được ghi nhận bằng một log record. Một log record kiểu mẫu chứa các trường sau:
Có một vài log record đặc biệt mang các ý nghĩa riêng. Bảng sau đây chỉ ra một số loại log record và ý nghĩa của chúng:
LOẠI LOG RECORD | Ý NGHĨA |
<Ti start> | Giao dịch Ti đã khởi động. |
<Ti, Xj, V1, V2> | Giao dịch Ti đã thực hiện thao tác ghi trên hạng mục dữ liệu Xj, Xj có giá trị V1 trước khi ghi và nhận giá trị V2 sau khi ghi. |
<Ti commit> | Giao dịch Ti đã bàn giao. |
<Ti abort> | Giao dịch Ti đã huỷ bỏ. |
Mỗi khi một giao dịch thực hiện một thao tác ghi, trước tiên phải tạo ra một log record cho thao tác ghi đó ( trong log file ), trước khi giao dịch thay đổi cơ sở dữ liệu. Như vậy, hệ thống có cơ sở để huỷ bỏ ( undo ) một thay đổi đã được làm trên cơ sở dữ liệu bằng cách sử dụng trường Old-value trong log record.
Notification Switch
Would you like to follow the 'Hệ quản trị cơ sở dữ liệu' conversation and receive update notifications?