Đặc điểm của lịch biểu dựa trên khả năng phục hồi

Một phần của tài liệu Quản lý giao tác trong CSDL quan hệ và phân tán (Trang 28)

Đối với một vài lịch biểu việc khôi phục từ các thất bại của giao tác là dễ, trong khi đó với các lịch biểu khác quá trình phục hồi là rất rắc rối. Do vậy việc mô tả đặc tính của các kiểu lịch biểu có thể phục hồi cũng như các lịch biểu mà việc phục hồi đối với nó là đơn giản là rất quan trọng.

Trước tiên, chúng ta muốn đảm bảo rằng mỗi khi một giao tác T được xác nhận thì không bao giờ cần rollback T. Các lịch biểu thoả mãn một cách lý thuyết tiêu chuẩn này được gọi là các lịch biểu khôi phục được, và những lịch biểu không thoả mãn tiêu chuẩn được gọi là không khôi phục được và như vậy là không được chấp nhận. Một lịch biểu là khôi phục được nếu không có một giao tác T trong S xác nhận cho đến khi mọi giao tác T’ đã ghi một mục mà T đọc được xác nhận. Một giao tác T “đọc” từ giao tác T’ trong một lịch biểu S nếu một mục X nào đó trước tiên được T’ ghi và sau đó T đọc. Hơn nữa, T’ không bị huỷ bỏ trước khi T đọc mục X và không có một giao tác nào ghi X sau khi T’ ghi và trước khi T đọc nó (trừ những giao tác đã bị huỷ bỏ trước khi T đọc X) [1].

Các lịch biểu có thể khôi phục yêu cầu một tiến trình khôi phục phức tạp. Nhưng nếu các thông tin được lưu đầy đủ trong sổ ghi hệ thống thì một thuật toán phục hồi dữ liệu có thể được đưa ra. Các lịch biểu Sa và Sb là 2 lịch biểu có thể khôi phục do nó thỏa mãn định nghĩa trên. Coi lịch biểu Sa’ được

đưa ra dưới đây giống như lịch biểu Sa chỉ trừ việc có thêm hai thao tác xác nhận được bổ sung vào Sa.

Sa’: r1(X); r2(X); w1(X); r1(Y); w2(X); c2; w1(Y); c1;

Sa’ là lịch biểu có thể khôi phục cho dù có bị vấn đề cập nhật mất dữ liệu. Tuy nhiên, xét 2 lịch biểu Sc và Sd sau đây:

Sc: r1(X); w1(X); r2(Y); r1(Y); w2(X); c2; a1;

Sd: r1(X); w1(X); r2(Y); r1(Y); w2(X); w1(Y); c1; c2; Se: r1(X); w1(X); r2(Y); r1(Y); w2(X); w1(Y); a1; a2;

Sc không phải là lịch biểu có thể khôi phục do T2 đọc X từ T1 và sau đó T2 xác nhận hoàn thành trước khi T1 xác nhận. Nếu T1 hủy bỏ sau phép toán c2 trong lịch biểu Sc thì giá trị của X mà T2 đọc không còn giá trị nữa và T2 phải bị hủy bỏ sau khi nó đã được xác nhận hoàn thành, dẫn đến lịch biểu Sc không phải là lịch biểu có thể khôi phục. Để lịch biểu Sc trở thành lịch biểu có thể khôi phục thì phép toán c2 trong Sc phải được hoãn lại cho đến khi T1 đã được xác nhận hoàn thành nh ư đ ư ợc ch ỉ ra trong Sd. Nếu T1 hủy bỏ thay cho xác nhận hoàn thành thì T2 cũng hủy bỏ như trong lịch biểu Se do giá trị của X nó đọc không còn hợp lệ nữa [1].

Trong một lịch biểu có thể khôi phục, không có giao tác đã xác nhận hoàn thành nào cần phải được rollback. Tuy nhiên, nó có khả năng xuất hiện hiện tượng rollback dây chuyền (cascading rollback) hoặc hủy bỏ dây chuyền (cascading abort), ở đ ó một giao tác không xác nhận hoàn thành phải được rollback vì nó đọc một mục dữ liệu từ một giao tác bị lỗi. Điều này được minh họa trong lịch biểu Se, giao tác T2 phải được rollback do nó lấy dữ liệu X từ T1 mà T1 sau đó bị hủy bỏ.

Do rollback dây chuyền tầng có thể tốn nhiều thời gian do đó nhiều giao tác có thể bị rollback nên việc mô tả đặc trưng của lịch biểu mà ở đó hiện tượng này được đảm bảo là không xuất hiện là việc quan trọng. Một lịch biểu được gọi là không rollback dây chuyền hoặc tránh được rollback dây chuyền nếu mọi giao tác trong lịch biểu chỉ đọc những mục dữ liệu đã được ghi bởi các giao tác đã được xác nhận hoàn thành. Trong trường hợp này, tất cả các khoản mục được đọc sẽ không bị loại bỏ vì vậy không xảy rollback dây chuyền. Để thỏa mãn tiêu chuẩn này, thao tác câu lệnh r2(X) trong lịch biểu Se phải được hoãn lại cho đến khi T1 đã được xác nhận hoàn thành (hoặc hủy bỏ), do đó làm chậm T2 nhưng đảm bảo không bị rollback dây chuyền nếu T1 hủy bỏ [1].

Cuối cùng, loại lịch biểu giới hạn hơn được gọi là lịch biểu chặt chẽ. Trong lịch biểu này, các giao tác có thể không đọc mà cũng không ghi vào X cho đến giao tác cuối cùng đã ghi X được xác nhận hoàn thành (hoặc hủy bỏ). Các lịch biểu chặt chẽ làm đơn giản hóa quá trình khôi phục dữ liệu. Trong một lịch biểu chặt chẽ, quá trình khôi phục (undo) một thao tác write(X) của một giao tác bị huỷ đơn giản là trả lại hình ảnh trước đó (giá trị cũ) của mục dữ liệu X. Thủ tục đơn giản này luôn luôn thực hiện đúng với lịch biểu chặt chẽ nhưng lại không thực hiện với các lịch biểu it tầng hoặc lịch biểu có khả năng khôi phục [1].

Ví dụ: Cho lịch biểu Sf : Sf: w1(X,5); w2(X,8); a1;

Giả sử giá trị ban đầu của X là 9, giá trị này trước đó đã được lưu trữ trong tệp log hệ thống cùng với thao tác w(X,5). Nếu T1 hủy bỏ như trong Sf, thủ tục khôi phục sẽ trả giá trị của X là 9, mặc dù nó đã bị thay đổi bằng 8 do giao tác T2, do đó dẫn đến khả năng cho kết quả không đúng. Tuy lịch biểu Sf là không dây chuyền, nó không phải là lịch biểu chặt chẽ do nó cho phép T2

ghi X mặc dù giao tác cuối cùng của T1 ghi X vẫn chưa được xác nhận hoàn thành (hoặc hủy bỏ).

Một phần của tài liệu Quản lý giao tác trong CSDL quan hệ và phân tán (Trang 28)

Tải bản đầy đủ (PDF)

(96 trang)