Giả sử có một bảng T chỉ có một cột.
Giả sử rằng "hoàn tác nhật ký" là một tệp cơ sở dữ liệu chứa các giao dịch không được cam kết và "nhật ký làm lại" là một tệp cơ sở dữ liệu chứa cả các giao dịch không được cam kết và đã cam kết chưa được áp dụng cho các tệp dữ liệu.
At 8:00 A.M., Transaction 100 inserts rows with values 101, 102 and 103
into table T.
At 8:10 A.M., Transaction 100 is committed and the commit for
transaction 100 completes.
At 8:15 A.M., Transaction 200 updates row 101 to 201, 102 to 202
and 103 to 203.
At 8:20 A.M., Transaction 200 has not been committed and remains
in the undo log of the database.
At 8:25 A.M., Transaction 300 increments each row by 50,
changing row 201 to 251, 202 to 252, and 203 to 253.
At 8:30 A.M., Transaction 300 has not been committed and remains
in the undo log of the database.
At 8:35 A.M., The instance providing access to the database crashes.
At 8:40 A.M., The instance is restarted, and the database files are
opened as the instance is started:
The committed values in T are still 101, 102 and 103.
Since 201, 202, and 203, and 251, 252 and 253
are not committed, if they are written into the "redo
log" of the database, there is a need to "roll back"
the transactions AFTER the "redo log" is applied.
Since 201, 202, and 203, and 251, 252 and 253
are not committed, they are in the "undo log"
of the database.
The undo log of the database is used BOTH to (1) roll
back a transaction that is deliberately rolled
back in the memory structure of the database instance,
and also (2) during the instance recovery at 8:40 A.M.
At 8:41 A.M., The redo log has been applied, and the T table
contains values 251, 252 and 253 in the instance memory.
The undo log has not yet been applied.
At 8:42 A.M., The undo log is applied in the reverse order:
Uncommitted transaction 300 is undone, and
Uncommitted transaction 200 is undone.
Tại sao cả hai giao dịch cam kết và không cam kết được ghi vào tệp nhật ký làm lại? Lý do cho điều này là để cung cấp phục hồi tại thời điểm.
Điều này có nghĩa là nội dung của tệp "làm lại nhật ký" KHÔNG nhất quán giao dịch. Vì lý do này, bất cứ khi nào nhật ký làm lại được sử dụng để áp dụng các giao dịch đã cam kết vào các tệp dữ liệu, "hoàn tác nhật ký" PHẢI C ALNG được sử dụng để khôi phục các giao dịch không được cam kết.
Tại sao các giao dịch trong "nhật ký hoàn tác" được khôi phục theo thứ tự ngược lại? Giao dịch 300 đã thêm 50 vào giá trị hiện tại của mỗi cột của mỗi hàng. Do đó, nếu giao dịch 200 được khôi phục trước, các giá trị sẽ thay đổi từ 251, 252 và 253 thành 201, 202 và 203. Nếu giao dịch 300 sau đó được khôi phục sau cùng, các giá trị sẽ là 151, 152 và 153 - không khớp các giá trị cam kết ban đầu.
NGƯỜI GIỚI THIỆU:
https://asktom.oracle.com/pls/asktom/f?p=100:11 0 ::::P11_QUESTION_ID:1670195800346464273