Tải bản đầy đủ (.pdf) (11 trang)

TÀI LIỆU HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (376.64 KB, 11 trang )

HỆ QUẢN TRỊ CƠ
SỞ DỮ LIỆU
Bài viết về: PHỤC HỒI SỰ CỐ.


Nội dung:
1.

Một vài giả định và quy ước: .................................................................................................... 3

1.1.

Transaction: ......................................................................................................................... 3

1.2.

Checkpoint: .......................................................................................................................... 3

1.3.

Logging:................................................................................................................................ 3

2.

Một vài khái niệm cơ bản: ........................................................................................................ 4

2.1.

Crash: ................................................................................................................................... 4

2.2.



Logging:................................................................................................................................ 4

2.3.

Recovery: ............................................................................................................................. 4

2.4.

Checkpoint và cơ chế Logging: .............................................................................................. 4

3.

DBMS áp dụng cơ chế phục hồi như thế nào: ........................................................................... 7

3.1.

Các kỹ thuật Recovery (3 kỹ thuật):....................................................................................... 7

3.1.1.

Undo Logging (Sử dụng cho cơ chế phục hồi Immediate Update):..................................... 7

3.1.2.

Undo Logging và Checkpoint:............................................................................................ 8

3.1.3.

Redo Logging (Sử dụng cho cơ chế phục hồi Defer Update): ........................................... 10


3.1.4.

Undo/ Redo Logging ....................................................................................................... 10

4.

Bài tập:................................................................................................................................... 11


1. Một vài giả định và quy ước:
1.1. Transaction:
 Bắt đầu transaction:
 Hoàn tất transaction:
 Hủy bỏ 1 giao tác

< start T1 >
< commit T1 >
< abort T1 >

1.2. Checkpoint:
 Tạo 1 checkpoint:

<checkpoint>

1.3. Logging:


2. Một vài khái niệm cơ bản:
2.1. Crash:

Là các sự cố xảy ra khơng lường trước được, ví dụ như cúp điện, hư ổ cứng, RAM
hoặc các thiết bị khác … Nói chung các sự cố này xảy ra làm cho việc thực hiện các
transaction bị gián đoạn hoặc mất đi tình tồn vẹn dữ liệu. Như vậy có thể thấy có 2
trường hợp có thể xảy ra với 1 Transaction khi có sự cố:
 Transaction chưa thực hiện commit (begin trans mà khơng có commit). Ở
trường hợp này thì database
 Transaction đã thực hiện commit nhưng vẫn chưa lưu dữ liệu từ bộ nhớ đệm
xuống datafile (begin trans và commit).
2.2. Logging:
Là cơ chế lưu vết lại tất cả các yêu cầu thay đổi từ phía User. Cần phải chú ý rằng
đôi lúc việc kết quả truy vấn hay update cơ sở tưởng chừng như đã hồn tất ở phía
người dùng, tuy nhiên, trong 1 số trường hợp DBMS vẫn thực hiện vẫn chưa hồn
thành việc update (nói chính xác hơn là lưu trữ xuống datafile). Việc hiển thị kết quả chỉ
là do DBMS thực hiện trên bộ nhớ đệm.
2.3. Recovery:
Là phục hồi dữ liệu trên ổ cứng (datafile) về trạng thái đảm bảo tính tồn vẹn dữ
liệu gần nhất. Có 2 cơ chế phục hồi:

Defer Update: kết quả thay đổi của dữ liệu chỉ được lưu từ bộ nhớ đệm
xuống datafile khi transaction thực hiện commit. Như vậy rõ ràng, trước khi
giao tác này thực hiện commit, có sự có xảy ra thì cũng khơng ảnh hưởng đến
datafile bên dưới.

Immediate Update: kết quả thay đổi được lưu xuống datafile ngay sau khi
thực hiện 1 thao tác dữ liệu trong một giao tác mà không cần chờ đến lệnh
commit.
2.4. Checkpoint và cơ chế Logging:
 Theo cơ chế logging và kỹ thuật Recovery Immedia Update ở trên thì sau
mỗi lần commit hoặc abort của 1 giao tác thì DBMS lại yêu cầu DataFile
Management ghi toàn bộ dữ liệu xuống datafile đồng thời ghi 1 entry vào trong

logfile. Chú ý rằng việc lưu trữ này tiêu hao nhiều thời gian đặc biệt đối với hệ thống
nhiều User cùng thực hiện cùng lúc.
 Người ta đề ra checkpoint để giảm thiểu vấn đề trên. Như vậy sau 1 thời
gian hạn định thì DBMS thực hiện lưu 1 checkpoint mà tại đó các giao tác vừa
commit xong thì sẽ được lưu dữ liệu từ bộ nhớ đệm xuống datafile. Nếu trong
khoảng thời gian đó giao tác hiện thời chưa hồn tất(commit) thì DBMS sẽ đợi 1


khoảng thời gian cho đến khi giao tác này hoàn tất. Trong khoảng thời gian này
DBMS không nhận thêm bất kì 1 giao tác nào khác nữa. Sau khi lưu mọi thông tin
xuông datafile , Log Manager ghi 1 entry vào trong logfile.
Như vậy, có thể thấy ràng mọi cơng việc đã hồn tất trước checkpoint. Nếu có
1 sự cố xảy ra sau này chỉ cần quay lại vị trí checkpoint là đảm bảo các tính chất của
dữ liêu.
Tuy nhiên, cũng phải nhận định rằng, việc chờ đợi 1 giao tác hồn tất mà
khơng tiếp nhận bất kì 1 giao tác nào khác trong thời gian đó sẽ làm trì hoãn hoạt
động của DBMS, đặc biệt là với DBMS nhiều người dùng. Vì thế người ta đưa ra 1 kỹ
thuật mới là Nonquiescent Checkpoint.

Nonquiescent Checkpoint: Cơ chế hoạt động của loại checkpoint này là:
Ví dụ, chúng ta có 4 giao tác T1, T2, T3, T4. Ở thời điểm t1, Log Manager bắt đầu
thực hiện lưu checkpoint. Tại thời điểm này có 2 giao tác đang hoạt động là T1 và T2
còn T3 và T4 chưa bất đầu giao tác của mình. Log Manager lưu vào logfile: ckpt T1,T2>.
Log Manager tiếp tục đợi cho đến khi T1, T2 hoàn tất giao tác của mình cho đến
t2. Trong khoảng thời gian từ t1 đến t2 này nó khơng ngăn cản bất cứ 1 giao tác nào
vào hệ thống. Sau khi cả 2 giao tác hoàn tất Log Manager thực hiện lưu <end ckpt>.
Như vậy nếu 1 sự cố xảy ra ở thời điểm t3 > t2 > t1 thì 2 giao tác T1 và T2 xem
như đã hồn thành và khơng cần phục hồi nữa. Chỉ cần xét 2 giao tác T3 và T4 mà
thơi. Tiếp tục xét như vậy thì cũng có thể thấy được là T3 đã hồn thành trước thời

điểm t3 vì trong logfile sẽ tồn tại 1 entry lưu commit cho giao tác T3 này. Như vậy
công việc phục hồi chỉ cần thực hiện với T4 mà thôi.




3. DBMS áp dụng cơ chế phục hồi như thế nào:
3.1. Các kỹ thuật Recovery (3 kỹ thuật):
3.1.1. Undo Logging (Sử dụng cho cơ chế phục hồi Immediate Update):

Như đã trình bày ở trên, mỗi thao tác update trên CSDL đều được Log Manager
lưu lại 1 entry vào trong logfile. Việc phục hồi (Recovery) thực sự chỉ là việc rà soát và
thực hiện sửa các lỗi dựa theo việc Logging. Như vậy, cơ chế Recovery phải phụ thuộc và
được hỗ trợ bởi cơ chế lưu entry của Logging. Ở đây cơ chế Undo Logging hỗ trợ cho
thao tác phục hồi CSDL theo dạng Undo, có nghĩa là phục hồi lại CSDL ở trạng thái trước
khi 1 hoặc nhiều giao tác diễn ra nhưng chưa hồn tất thì xảy ra sự cố.
Quy tắc Logging:



Một entry có dạng: < Tn, X, v > . Trong đó, Tn là giao tác yêu cầu update
cơ sở dữ liệu, X là ĐVDL trên CSDL và v là giá trị trước khi thay đổi.
Ví dụ: UPDATE FROM Student AS s SET s.name= “Nam” WHERE s.id=”1”.
Vậy:
- X ở đây là entry student.name có id=1.
- Giá trị cũ là 1 giá trị “XYZ”.
 Entry trong logfile sẽ là < Tn, X, “XYZ” > mà không phải là
< Tn, X, “Nam” >




Entry trong logfile phải được ghi trước khi ghi cập nhật dữ liệu cho DVDL
X xuống datafile. Quy tắc này nhằm đảm bảo việc phục hồi nếu có sự cố
trong việc lưu dữ liệu từ bộ nhớ đệm xuống datafile. Nhw trong ví dụ
bên dưới thì việc lưu entry báo hiệu sự thay đổi vào logfile (2) phải được
thực hiện trước khi lưu A với giá trị mới là 103 vào trong datafile (3).
Công việc này gọi là Output(X) và được thực hiện ngầm định bên dưới
hoặc được triệu gọi bởi hàm flush(). Hàm này thực hiện đẩy toàn bộ dữ
liệu trong bộ nhớ đệm xuống vùng nhớ trên Datafile.



Entry <commit> phải được lưu cuối cùng, sau khi tất cả các công việc lưu
từ bộ đệm xuống datafile hồn tất. Quy tắc này nhằm thơng báo rằng
giao tác đã hồn tất 1 cách thành cơng. Nếu có 1 sự cố nào xảy ra trong
quá trình lưu trữ thì sẽ không tồn tại entry <commit> trong logfile. Điều
này thông báo việc cần phải phục hồi dữ liệu lại trạng thái gần nhất.


Time

Transaction T

1
2
3
4
5
6


Start T
T = Read(A)
T = T + 100
Write(A,T)
Ouput(A)
Commit

T

A
(on Buffer)

3
103
103

3
3
103

1

3

A
(on Disk)
3
3
3
3

103

LogFile
<start T>
2

<T,A,3>
<commit>

Như ví dụ trên, giả dụ có 1 sự cố xảy ra thì sẽ có 3 trường hợp như sau:




Sự cố điễn ra trước <start T>: Chẳng cần xét đến vì giao tác T cịn chưa bắt
đầu.
Sự cố diễn ra sau <commit> (hoặc abort): Cũng không cần xét đến việc phục
hồi vì giao tác T đã hồn thành trước đó.
Sự cố diễn ra trong khoảng <start T> và <commit> (hoặc abort): ví dụ ở đây
sự cố là cúp điện, vào thời điểm từ 1 5, như vậy sẽ chỉ tồn tại <start T>
trong logfile mà không tồn tại <commit> và <abort>. Khi hệ thống khởi động
lại sau đó. Nó sẽ đọc trong logfile và phát hiện dấu hiệu của sự cố này. Biện
pháp xử lý như sau:

Cơ chế Phục hồi: Phục hồi các giao tác chưa hoàn tất về trạng thái ban đầu.
B1: Đọc lại logfile từ dưới trở lên trên.
<start T>
<T,X,v>
B2: Với mỗi Entry có dạng <T,X,v> thì thực hiện lưu (phục hồi) vào DVDL X giá trị
cũ của X là v. Có nghĩa là thực hiện Write(X,v) và Output(X).

B3: Thực hiện B2 cho đến khi gặp <start T> thì dừng lại. Và thực hiện lưu entry
<abort> vào logfile để thơng báo kết thúc giao tác phục hồi.

Có thể thấy rằng việc Undo làm cho CSDL quay về trạng thái toàn vẹn gần nhất.
3.1.2. Undo Logging và Checkpoint:

Cũng tương tự như Undo Logging nhưng chú ý 1 vài điểm sau:


Đối với Checkpoint thông thường:




 Trong qua trình được ngược các entry trong logfile từ dưới lên trên:
o Khi gặp entry có dạng: <checkpoint> thì các Giao tác bắt đầu trước đó đã
hồn tất và khơng cần phục hồi vì đối với Checkpoint thơng thường thì
DBMS khơng tiếp nhận bất cứ 1 giao tác nào trong thời gian chờ đợi các
giao tác hiện đang hoạt động hồn tất. Dừng việc phục hồi tại đây.
Ví dụ: xem ví dụ trong slide Phục hồi sự cố.
Đối với Nonquisecent Checkpoint:
 Trong quá trình đọc ngườc các entry trong logfile từ dưới lên cần chú ý:
o Nếu gạp entry có dạng <end ckpt> thì các Giao tác bắt đầu trước ckpt T> đã hoàn tất. Loại bỏ các entry của giao tác này ra khỏi việc phục
hồi.
o Khi gặp entry có dạng: <start ckpt T> thì dừng cơng tác phục hồi.
Ví dụ: xem ví dụ trong slide Phục hồi sự cố.

Nhận xét: Cơ chế Undo Logging truy xuất ổ cứng nhiều.



3.1.3. Redo Logging (Sử dụng cho cơ chế phục hồi Defer Update):
Vì cơ chế Defer Update lưu tất cả các update trên bộ nhớ đệm cho đến khi Giao
tác thực hiện commit thì mới thực hiện đẩy dữ liệu xuống datafile.
Quy tắc Logging:
-

Lưu các entry update có dạng <T,X,u> trong đó u là giá trị mới được
dùng để thay đổi cho giá trị cũ của DVDL X.

Cơ chế Phục hồi: - Phục hồi lại các giao tác đã hoàn tất cả các giao tác đã hoàn
tất và bỏ qua các giao tất chưa hoàn tất.

B1: Đọc lại logfile từ dưới trở lên trên.
<start T>
<T,X,u>
B2:
 Đối với giao tác T mà tồn tại 2 entry <start T> và <commit T> trong
logfile thì thực hiện lại tất cả thao tác với tất cả entry của giao tác này từ entry
<start T> cho đến <commit T> .Mỗi Entry có dạng <T,X,v> thì thực hiện lưu
(phục hồi) vào DVDL X giá trị cũ của X là v. Có nghĩa là thực hiện Write(X,v) và
Output(X).
 Đối với giao tác T mà chỉ tồn tại entry <start T> mà khơng tồ tại T> thì bỏ qua giao tác này trong cơng tác phục hồi vì nó chưa hoàn tất. Và thực
hiện lưu entry <abort> vào logfile cho các giao tác chưa hoàn tất này.

Nhận xét: cơ chế này làm tốn bộ nhớ đệm .
3.1.4. Undo/ Redo Logging
Kết hợp 2 cơ chế Undo và Redo để đưa ra cơ chế chung giảm thiểu được các
nhược điểm của 2 cơ chế này, như vậy quy tắc và cơ chế ở đây được kết hợp lại là:

Quy tắc Logging:
-

Lưu các entry có dạng <T,X,v,u>. Trong đó:
o T là giao tác.
o X là ĐVDL.
o V là giá trị cũ.
o U là giá trị mới.


Cơ chế Phục hồi:
-

Phục hồi lại các giao tác chưa hoàn thành theo cơ chế Undo.
Phục hồi lại các giao tác đã hồn thành theo cơ chế Redo.

Ví dụ: xem trong slide Phục hồi sự cố.
4. Bài tập:
Các bài tập ở phần này có các dạng sau:
-

Dạng 1: Cho nội dung (các entry) của 1 logfile.
o Yêu cầu: Phát hiện cơ chế Logging đang được sử dụng và thực hiện phục
hồi lại dữ liệu.
o Hướng dẫn: Dựa vào cấu trúc của entry update để xét cơ chế Logging.
 <T,X,u>
 <T,X,v>
 <T,X,u,>
Sau đó dựa vào loại cơ chế mà thực hiện các thao tác phục hồi cho phù
hợp.


-

Dạng 2: Cho chuỗi thao tác của các thao tác T1,T2, T3 … .
o Yêu cầu: Thực hiện logging theo các cơ chế (Undo, Redo, Undo/Redo …)
và sau đó thực hiện phục hồi dữ liệu khi có sự cố xảy ra giữa 2 thao tác nào
đó.
o Hướng dẫn: Dựa vào loại cơ chế là Undo, Redo hay Undo, Redo mà thực
hiện lưu giá trị mới, cũ hay cả hai.
- Khi có sự cố xảy ra thì bài tốn quay về dạng 1.



×