JavaScript is required

Anh/chị hãy cho biết phát biểu nào sau đây về lịch trình có thể phục hồi là đúng?

A.
Mọi lịch trình có thể phục hồi đều có thể tuần tự hóa được.
B.
Trong một lịch trình có thể phục hồi, nếu một giao dịch T được thực hiện, thì bất kỳ giao dịch nào khác mà T đọc từ đó cũng phải được thực hiện.
C.
Trong một lịch trình có thể phục hồi, sẽ không có giao dịch nào bị hủy bỏ vì một giao dịch mà nó đọc từ đó đã bị huỷ bỏ.
D.
Không tồn tại lịch trình phục hồi, chỉ có lịch trình tuần tự.
Trả lời:

Đáp án đúng: B


Đáp án đúng là C. Trong một lịch trình có thể phục hồi, sẽ không có giao dịch nào bị hủy bỏ vì một giao dịch mà nó đọc từ đó đã bị huỷ bỏ. Giải thích: * **Lịch trình có thể phục hồi (Recoverable Schedule):** Một lịch trình được coi là có thể phục hồi nếu, đối với mỗi giao dịch *Tj* đọc dữ liệu đã được ghi bởi giao dịch *Ti*, thì thao tác commit của *Ti* phải xuất hiện trước thao tác commit của *Tj*. Điều này đảm bảo rằng nếu *Tj* commit, thì *Ti* cũng đã commit và dữ liệu mà *Tj* đọc là hợp lệ, ngay cả khi có sự cố xảy ra. * **Tại sao đáp án A sai:** Không phải mọi lịch trình có thể phục hồi đều có thể tuần tự hóa được. Tính có thể phục hồi và tính tuần tự hóa là hai thuộc tính độc lập của một lịch trình. * **Tại sao đáp án B sai:** Phát biểu này mô tả một lịch trình tránh cascade abort (ACA), mạnh hơn lịch trình có thể phục hồi. Trong lịch trình có thể phục hồi, giao dịch T chỉ cần commit trước giao dịch đọc dữ liệu của T, không nhất thiết phải thực hiện trước. * **Tại sao đáp án C đúng:** Nếu một giao dịch *Tj* đọc dữ liệu từ *Ti* và *Ti* bị hủy bỏ, thì *Tj* cũng phải bị hủy bỏ trong lịch trình cascade abort (ACA). Tuy nhiên, lịch trình có thể phục hồi không cho phép tình huống một giao dịch bị hủy bỏ do đọc dữ liệu từ giao dịch đã bị hủy bỏ, do giao dịch ghi dữ liệu (Ti) phải commit trước giao dịch đọc (Tj). Do đó, sẽ không có giao dịch nào bị hủy bỏ vì một giao dịch mà nó đọc từ đó đã bị huỷ bỏ. * **Tại sao đáp án D sai:** Lịch trình phục hồi tồn tại.

Câu hỏi liên quan