You are on page 1of 16

Quản trị dữ liệu

Chương 5: Hệ thống phục hồi


(Recovery System)
Nội dung
Phân lớp hư hỏng
Cấu trúc lưu trữ
Phục hồi dựa trên sổ ghi lộ trình
n Sự cập nhật có trì hoãn
n Sự cập nhật tức thời
n Điểm kiểm soát
Phục hồi dành cho các giao dịch song song

8/29/20 5.2
Phân lớp hư hỏng
Các loại hư hỏng:
n Giao dịch:
w Lỗi luận lý: dữ liệu đầu vào, tràn giá trị,…
w Lỗi hệ thống: deadlock, cạnh tranh,..
n Hệ thống: hệ điều hành, RAM,…
n Đĩa
Phục hồi: Xác định loại hư hỏng ⇒ đánh giá sự ảnh hưởng
đến dữ liệu ⇒ đề xuất giải pháp đảm bảo tính bền vững và
nguyên tử ⇒ giải thuật phục hồi lỗi
Giải thuật phục hồi: bao gồm
n Các hoạt động trong quá trình các giao dịch thực hiện
n Các hoạt động sau khi lỗi phát sinh

8/29/20 5.3
Cấu trúc lưu trữ
Các loại lưu trữ:
n Lưu trữ bị phai (bay hơi)
n Lưu trữ không phai (không bay hơi)
n Lưu trữ bền: thông tin không bao giờ bị mất (!??)
Thực hiện lưu trữ bền
Phương pháp truy cập dữ liệu:

read(A) output(A)
A A
write(B) input(B) B
B

Memory Buffer Disk

8/29/20 5.4
Phục hồi dựa trên Sổ ghi lộ trình (log)
Dùng sổ ghi lộ trình ghi nhận lại các thay đổi trên CSDL
Một thao tác cập nhật ⇒ một log record
Các loại log record:

Loại Log Record Ý nghĩa


<Ti, Start> GD Ti đã khởi động.
<Ti, X, V1, V2> GD Ti thay đổi giá trị của X từ V1 thành V2
<Ti, commit> GD Ti đã bàn giao.
<T1, abort> GD Ti đã hủy bỏ.

Sổ ghi lộ trình ghi vào các thiết bị “bền”


Có 2 giải thuật phục hồi dựa trên Sổ ghi lộ trình

8/29/20 5.5
Sự cập nhật có trì hoãn
Dùng khi các GD được thực hiện tuần tự
Tất cả các thao tác cập nhật CSDL sẽ bị trì hoãn
Sự thực thi của các giao dịch tiến hành như sau:
n Trước khi Ti khởi động: <Ti, Start>
n Trước khi Ti Write(X): <Ti, X, V2>
n Khi Ti bàn giao một phần: <Ti, commit>

Phục hồi:
"Ti: <Ti, start> và <Ti, commit> có trong sổ ghi lộ trình
⇒ redo(Ti)

redo(Ti): cập nhật giá trị mới cho tất cả các hạng mục dữ
liệu được cập nhật bởi Ti

8/29/20 5.6
Sự cập nhật có trì hoãn
Ví dụ:

T1 T2 A = 1000, B = 2000, C = 700


R(A) R(C) <T1, start>
A=A-50 C=C-100 <T1, A, 950>
W(A) W(C) <T1, B, 2050>
<T1, commit>
R(B)
<T2, start>
B=B+50 <T2, C, 600>
W(B) <T2, commit>

8/29/20 5.7
Sự cập nhật tức thời
Các thao tác thay đổi gtrị các hạng mục CSDL sẽ thể hiện
ngay lên CSDL
Sự thực thi các GD được tiến hành như sau:
n Trước khi Ti khởi động, <Ti, Start>
n Trước khi Ti Write(X), <Ti, X, V1, V2>
n Khi Ti hoàn thành, <Ti, commit>
Phục hồi:
n " Ti: <Ti, start> và <Ti, commit> có trong sổ ghi lộ trình
⇒ redo(Ti)
n " Ti: <Ti, start> có trong sổ ghi lộ trình nhưng không có
<Ti, commit> ⇒ undo(Ti)
n Thực hiện sự phục hồi từ dưới lên

8/29/20 5.8
Sự cập nhật tức thời
Ví dụ:
T1 T2 A = 1000, B = 2000, C = 700
R(A) R(C) <T1, start>
A=A-50 C=C-100 <T1, A, 1000, 950>
W(A) W(C) <T1, B, 2000, 2050>
<T1, commit>
R(B)
<T2, start>
B=B+50 <T2, C, 700, 600>
W(B) <T2, commit>

Redo(Ti): đặt giá trị mới cho các hạng mục CSDL
Undo(Ti): đặt giá trị cũ cho các hạng mục CSDL

8/29/20 5.9
Điểm kiểm soát (Checkpoint)
Dùng để cải thiện hiệu năng của quá trình khôi phục
Muốn đặt điểm kiểm soát:
1. Ghi log record vào thiết bị lưu trữ
2. Cập nhật các khối đệm đã cập nhật lên CSDL
3. Thêm <checkpoint> vào sổ ghi lộ trình
Phục hồi:
1. Từ điểm checkpoint cuối cùng, dò ngược lên tìm
<Ti, start> gần nhất.
2. Gọi T là tập các GD gồm Ti và các GD diễn ra sau Ti
– " TK Î T: <TK, commit> không có trong SGLT
§ Nếu Cập nhật tức thời: ⇒ undo(TK)
§ Nếu Cập nhật trì hoãn: ⇒ bỏ qua TK (không undo)
– " TK Î T: <TK, commit> có trong SGLT ⇒ redo(TK)

8/29/20 5.10
Điểm kiểm soát
Ví dụ:

Tc Tf
T1
T2
T3
T4

checkpoint system failure

8/29/20 5.11
Phục hồi cho các giao dịch song song
Dùng sổ ghi lộ trình với sự cập nhật tức thời

Checkpoint: <checkpoint L> với L là tập các GD đang


hoạt động tại thời điểm đặt checkpoint

Phục hồi:
1. Tạo hai danh sách redo-list và undo-list:
a. Redo-list = Æ; undo-list = Æ
b. Dò ngược SGLT đến khi gặp mẫu tin <checkpoint L> đầu
tiên:
• Nếu thấy <Ti, commit>:
⇒ thêm Ti vào redo-list
• Nếu thấy <Ti, start> và Ti Ï redo-list:
⇒ thêm Ti vào undo-list
c. "Ti Î L nhưng Ti Ï redo-list và undo-list thêm Ti vào undo-list

8/29/20 5.12
Phục hồi cho các giao dịch song song
2. Tiến trình phục hồi:
a. Dò ngược sổ ghi đến khi tìm thấy <Ti, start> cho tất cả các Ti
trong undo-list, tiến hành undo đối với mỗi record-log thuộc
undo-list
b. Định vị <checkpoint L> cuối cùng
c. Dò xuôi sổ ghi lịch trình cho đến cuối sổ ghi, thực hiện redo với
mỗi record-log thuộc giao dịch Ti nằm trong redo-list

8/29/20 5.13
Phục hồi cho các giao dịch song song
Cho một sổ ghi lịch trình sau:
a. Hãy xác định L1, L2. <T1, start>
b. Xác định giá trị của A – E trên đĩa <T2, start>
sau khi sự cố và trước khi phục hồi <T1, A, 10, 30>
c. Xác định giá trị của A – E trên đĩa <T1, B, 15, 35>
sau khi phục hồi. <T2, C, 110, 160>
<checkpoint L1>
Giải: <T1, commit>
a. L1 = {T1, T2}, L2 = {T2, T3} <T2, D, 210, 260>
b. A=30, B=35, C=160, <T3, start>
D=260, E=1510 <T3, E, 1010, 1510>
c. A=30, B=35, C=160, <checkpoint L2>
D=260, E=1010(*) <T2, commit>
~~~ crash ~~~

8/29/20 5.14
Example
Given the following log file:
a. Identify L1, L2. <T1, start>
b. Identify value of A – E on the DB <T2, start>
after the crash and before the <T1, A, 10, 30>
recovery <T1, B, 15, 35>
c. Identify value of A – E on the DB <T2, C, 110, 160>
after the recovery. <checkpoint L1>
Sol.: <T1, commit>
a. L1 = {T1, T2}, L2 = {T2, T3} <T2, D, 210, 260>
b. A=30, B=35, C=160, <T3, start>
D=260, E=1510 <T3, E, 1010, 1510>
c. A=30, B=35, C=160, <checkpoint L2>
D=260, E=1010(*) <T2, commit>
~~~ crash ~~~

8/29/20 5.15
8/29/20 5.17

You might also like