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

chuong 5 khôi phục sự cố

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 (1 MB, 67 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>Khôi phục sự cốChương 5</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<small>l</small>

Giới thiệu

<small>l</small>

Phân loại sự cố

<small>l</small>

Mục tiêu của khôi phục sự cố

<small>l</small>

Nhật ký giao tác (transaction log)

<small>l</small>

Điểm lưu trữ (checkpoint)

<small>l</small> Checkpoint đơn giản

<small>l</small> Checkpoint linh động (nonquiescent checkpoint)

<small>l</small>

Phương pháp khôi phục

<small>l</small> Undo-Logging (immediate modification)

<small>l</small> Redo-Logging (deferred modification)Undo/Redo Logging

<b>Nội dung chi tiết</b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<small>l</small>

Tính tồn vẹn - đúng đắn, chính xác của dữ liệu

<small>l</small>

Tính tồn vẹn - nhất quán của ràng buộc

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<small>l</small>

Làm thế nào mà ràng buộc bị vi phạm?

<small>l</small> Lỗi lập trình của các giao tác (transaction bug)

<small>l</small> Lỗi lập trình của DBMS (DBMS bug)

<small>l</small> Hư hỏng phần cứng (hardware failure)

<small>l</small> Chia sẻ dữ liệu (data sharing)

<small>l</small>

Làm thế nào để sửa lỗi và khôi phục?

<small>l</small> Chia sẻ dữ liệu

<small>l</small> Sự cố

<b>Giới thiệu </b>

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>Sự cố</b>

CPU

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<small>l</small>

Sự cố trên thiết bị lưu trữ (media failure)

<small>l</small>

Sự cố của giao dịch (transaction failure)

<small>l</small>

Sự cố liên quan đến hệ thống (system failure)

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<small>l</small>

Dữ liệu sai hiển nhiên

<small>l</small> Nhập thiếu 1 số trong dãy số điện thoại

<small>l</small>

Dữ liệu sai không thể phát hiện

<small>l</small> Nhập sai 1 số trong dãy số điện thoại

<small>l</small>

DBMS cung cấp các cơ chế cho phép phát hiện lỗi

<small>l</small> Ràng buộc khóa chính, khóa ngoại

<small>l</small> Ràng buộc miền giá trị

<small>l</small> Trigger

<b>Sự cố do nhập liệu sai</b>

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<small>l</small>

Mất dữ liệu trên thiết bị lưu trữ

<small>l</small>

Không thể truy cập lên thiết bị lưu trữ

<small>l</small>

Ví dụ

<small>l</small> Đầu đọc của đĩa cứng hư

<small>l</small> Sector trên đĩa cứng hư

<small>l</small>

DBMS áp dụng

<small>l</small> Kỹ thuật RAID

<small>l</small> Duy trì CSDL trên băng từ hoặc đĩa quang (archive)

<b>Sự cố trên thiết bị lưu trữ</b>

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

<small>l</small>

Sự cố làm cho 1 giao tác kết thúc khơng bình thường

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<small>l</small>

Mất dữ liệu của bộ nhớ trong

<small>l</small>

Không thể truy cập bộ nhớ trong

<small>l</small>

Ví dụ

<small>l</small> Cúp điện

<small>l</small> Lỗi phần mềm DBMS hoặc OS

<small>l</small> Hư RAM

<small>l</small>

DBMS cần cứu chữa và phục hồi dữ liệu

<small>l</small> Nhật ký giao tác (transaction log)

<b>Sự cố hệ thống</b>

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<small>l</small>

Đưa CSDL về trạng thái nhất quán sau cùng nhất trước khi xảy ra sự cố

<small>l</small>

Đảm bảo 2 tính chất của giao tác

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<small>l</small>

Nhật ký giao tác là một chuỗi các mẫu tin (log record) ghi nhận lại các hành động của DBMS

<small>l</small> Một mẫu tin cho biết một giao tác nào đó đã làm những gì

<small>l</small>

Nhật ký là một tập tin tuần tự được lưu trữ trên bộ nhớ chính, và sẽ được ghi xuống đĩa ngay khi có thể

<b>Nhật ký giao tác</b>

<small>DataA = 8 </small><b><small>16</small></b>

<small>B = 8 </small><b><small>16</small></b>

<small>Disk</small>

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<small>lGhi nhận giao tác T cập nhật lên đơn vị dữ liệu X</small>

<small>lX có giá trị trước khi cập nhật là v và sau khi cập nhật là w</small>

<b>Nhật ký giao tác (tt)</b>

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<small>l</small>

<b>Khi sự cố hệ thống xảy ra</b>

<small>l</small> DBMS sẽ tra cứu nhật ký giao tác để khơi phục những gì mà các giao tác đã làm

<small>l</small> Một vài giao tác sẽ phải thực hiện lại (redo)

<small>lNhững giá trị đã cập nhật xuống CSDL sẽ phải cập nhật lần nữal</small> Một vài giao tác không cần phải thực hiện lại (undo)

<small>lCSDL sẽ được khôi phục về lại trạng thái trước khi thực hiện</small>

<b>Nhật ký giao tác (tt)</b>

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<small>l</small>

Giới thiệu

<small>l</small>

Nhật ký giao tác (transaction log)

<small>l</small>

Điểm lưu trữ (checkpoint)

<small>l</small> Checkpoint đơn giản

<small>l</small> Checkpoint linh động (nonquiescent checkpoint)

<small>l</small>

Phương pháp khôi phục

<b>Nội dung chi tiết</b>

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

<small>l</small>

Quá trình tra cứu nhật ký mất nhiều thời gian

<small>l</small> Do phải quét hết tập tin nhật ký.

<small>l</small>

Thực hiện lại các giao tác đã được ghi xuống đĩa làm cho việc phục hồi diễn ra lâu hơn.

<small>l</small> Nhật ký giao tác có thêm mẫu tin <checkpoint> hay <ckpt>

<small>l</small> Mẫu tin <checkpoint> sẽ được ghi xuống nhật ký định kỳ

<small>lVào thời điểm mà DBMS ghi tất cả những gì thay đổi của CSDL từ vùng đệm xuống đĩa</small>

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

<small>l</small>

<b>Khi đến điểm lưu trữ, DBMS </b>

<small>l</small> (1) Tạm dừng tiếp nhận các giao tác mới

<small>l</small> (2) Đợi các giao tác đang thực hiện

<small>lHoặc là hoàn tất (commit)</small>

<small>lHoặc là hủy bỏ (abort)</small>

và ghi mẫu tin <commit T> hay <abort T> vào nhật ký

<small>l</small> (3) Tiến hành ghi nhật ký từ vùng đệm xuống đĩa

<small>l</small> (4) Tạo 1 mẫu tin <checkpoint> và ghi xuống đĩa

<small>l</small> (5) Tiếp tục nhận các giao tác mới

<b>Điểm lưu trữ đơn giản</b>

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

<small>l</small>

Các giao tác ở phía trước điểm lưu trữ là những giao tác đã kết thúc  không cần làm lại

<small>l</small>

Và sau điểm lưu trữ là những giao tác chưa thực hiện xong  cần khôi phục

<small>l</small>

Không phải duyệt hết nhật ký

<small>l</small> Duyệt từ cuối nhật ký đến điểm lưu trữ

<b>Điểm lưu trữ đơn giản (tt)</b>

<small>Checkpoint </small>

<small>scan </small>

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

<small>l</small>

Trong thời gian checkpoint hệ thống gần như tạm ngưng hoạt động

<small>l</small> Chờ các giao tác hoàn tất hoặc hủy bỏ

<small>l</small> Cho phép tiếp nhận các giao tác mới trong quá trình checkpoint

<small>l</small> Mẫu tin <start ckpt (T<sub>1</sub>, T<sub>2</sub>, …, T<sub>k</sub>)>

<small>l</small> Mẫu tin <end ckpt>

<b>Điểm lưu trữ linh động </b>

<b>(Nonquiescent checkpoint)</b>

<small>Checkpoint </small>

<small>V</small>

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<small>l</small>

<b>Khi đến điểm lưu trữ, DBMS</b>

<small>l</small> (1) Tạo mẫu tin <start ckpt (T<sub>1</sub>, T<sub>2</sub>,…, T<sub>k</sub>)> và ghi xuống đĩa

<small>lT</small><sub>1</sub><small>, T</small><sub>2</sub><small>, …, T</small><sub>k</sub><small> là những giao tác đang thực thi</small>

<small>l</small> (2) Chờ cho đến khi T<sub>1</sub>, T<sub>2</sub>, …, T<sub>k</sub> hồn tất hay hủy bỏ,nhưng khơng ngăn các giao tác mới bắt đầu

<small>l</small> (3) Khi T<sub>1</sub>, T<sub>2</sub>, …, T<sub>k</sub> thực hiện xong, tạo mẫu tin <end ckpt> và ghi xuống đĩa

<b>Điểm lưu trữ linh động (tt)</b>

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

<small>l</small>

Giới thiệu

<small>l</small>

Phương pháp khôi phục

<small>l</small> Undo-Logging (immediate modification)

<small>l</small> Redo-Logging (deferred modification)

<small>l</small> Undo/Redo Logging

<b>Nội dung chi tiết</b>

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<small>l</small>

<b>Qui tắc</b>

<small>l</small> <b>(1) Một thao tác phát sinh ra 1 mẫu tin nhật ký</b>

<small>lMẫu tin của thao tác cập nhật chỉ ghi nhận lại </small><b><small>giá trị cũ</small></b>

<small>l</small> <b><small><T, X, v></small></b>

<small>l</small> <b>(2) Trước khi X được cập nhật xuống đĩa, mẫu tin <T, </b>

X, v> đã phải có trên đĩa

<small>l</small> <b>(3) Trước khi mẫu tin <commit, T> được ghi</b> xuống đĩa, tất cả các cập nhật của T đã được phản ánh lên đĩa

<small>lFlush-log: chỉ chép những block mẫu tin nhật ký mới chưa được chép trước đó</small>

<b>Phương pháp Undo-Logging </b>

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

<b>Ví dụ</b>

<small>Hành động</small>

<small>Mem AMem BDisk ADisk B</small>

<small>Mem Log<start T></small>

<small>6789101112</small>

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<small>l</small>

<b>Khôi phục</b>

<small>l</small> <b>(1) Gọi S là tập các giao tác chưa kết thúc</b>

<small>l</small> <b><small>Có <start T</small><sub>i</sub><small>> trong nhật ký nhưng </small></b>

<small>l</small> <b><small>Khơng có <commit T</small><sub>i</sub><small>> hay <abort T</small><sub>i</sub><small>> trong nhật ký</small></b>

<small>l</small> <b>(2) Với mỗi mẫu tin <T<sub>i</sub>, X, v> trong nhật ký (theo thứ tự cuối tập tin đến đầu tập tin)</b>

<small>l</small> <b><small>Nếu T</small><sub>i</sub><small>  Sthì- Write(X, v) - Output(X)</small></b>

<small>l</small> <b>(3) Với mỗi T<sub>i</sub>  S</b>

<b><small>Ghi mẫu tin <abort T> lên nhật ký</small></b>

<b>Phương pháp Undo-Logging (tt) </b>

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

<small>Sự cốT</small><sub>2</sub>

<small>Bỏ qua</small>

<small>Khôi phục dữ liệu </small>

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

<b>Ví dụ</b>

<small>Hành động</small>

<small>Mem A Mem BDisk ADisk B</small>

<small>Mem Log<start T></small>

<small>67891011</small>

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

<small>l</small>

<b>Vì T</b>

<b><sub>1</sub></b>

<b> và T</b>

<b><sub>2</sub></b>

<b> đang thực thi nên chờ</b>

<small>l</small>

<b>Sau khi T</b>

<b><sub>1</sub></b>

<b> và T</b>

<b><sub>2</sub></b>

<b> hoàn tất hoặc hủy bỏ</b>

<small>l</small>

<b>Ghi mẫu tin <checkpoint> lên nhật ký</b>

<b>Undo-Logging & Checkpoint</b>

<b><small><start T</small><sub>1</sub><small>> </small></b>

<b><small><T</small><sub>1</sub><small>, A, 5> <start T</small><sub>2</sub><small>> <T</small><sub>2</sub><small>, B, 10></small></b>

<small>Checkpoint</small>

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

<b>Undo-Logging & Checkpoint (tt)</b>

<small>l</small>

<b>Ví dụ:</b>

<small>l</small> <T<sub>3</sub>, F, 30>

<small>lT</small><sub>3</sub><small> chưa kết thúc</small>

<small>lKhơi phục F=30l</small> < T<sub>3</sub>, E, 25 >

<small>lKhôi phục E=25l</small> <checkpoint>

<b><small><start T</small><sub>1</sub><small>> <T</small><sub>1</sub><small>, A, 5> <start T</small><sub>2</sub><small>> <T</small><sub>2</sub><small>, B, 10> <T</small><sub>2</sub><small>, C, 15> <T</small><sub>2</sub><small>, D, 20> <commit T</small><sub>1</sub><small>> <commit T</small><sub>2</sub><small>> </small></b>

<b><small><checkpoint> </small></b>

<b><small><start T</small><sub>3</sub><small>> <T</small><sub>3</sub><small>, E, 25> <T</small><sub>3</sub><small>, F, 30></small></b>

<small>scan</small>

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

<small>l</small>

Vì T

<sub>1</sub>

và T

<sub>2</sub>

đang thực thi nên tạo <start ckpt (T

<sub>1</sub>

,T

<sub>2</sub>

)>

các giao tác mới

<b>Undo-Logging & Nonquiescent Checkpoint</b>

<b><small><start T</small><sub>1</sub><small>> <T</small><sub>1</sub><small>, A, 5> <start T</small><sub>2</sub><small>> <T</small><sub>2</sub><small>, B, 10></small></b>

<small>Nonquiescent Checkpoint</small>

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

<b>Undo-Logging & Nonquiescent Checkpoint (tt)</b>

<small>l</small>

<b>Ví dụ 1:</b>

<b><small><start T</small><sub>1</sub><small>> <T</small><sub>1</sub><small>, A, 5> <start T</small><sub>2</sub><small>> <T</small><sub>2</sub><small>, B, 10> </small></b>

<b><small><start ckpt (T</small><sub>1</sub><small>,T</small><sub>2</sub><small>)> </small></b>

<b><small><T</small><sub>2</sub><small>, C, 15> <start T</small><sub>3</sub><small>> <T</small><sub>1</sub><small>, D, 20> <commit T</small><sub>1</sub><small>> <T</small><sub>3</sub><small>, E, 25> </small></b>

<b><small><commit T</small><sub>2</sub><small>> <T, F, 30></small></b>

<b><small><start T</small><sub>1</sub><small>> <T</small><sub>1</sub><small>, A, 5> <start T</small><sub>2</sub><small>> <T</small><sub>2</sub><small>, B, 10> </small></b>

<b><small><start ckpt (T</small><sub>1</sub><small>,T</small><sub>2</sub><small>)> </small></b>

<b><small><T</small><sub>2</sub><small>, C, 15> <start T</small><sub>3</sub><small>> <T</small><sub>1</sub><small>, D, 20> <commit T</small><sub>1</sub><small>> <T</small><sub>3</sub><small>, E, 25> <commit T</small><sub>2</sub><small>> </small></b>

<b><small><end ckpt> </small></b>

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

<b>Undo-Logging & Nonquiescent Checkpoint (tt)</b>

<small>l</small>

<b>Ví dụ 1:</b>

<small>l</small> <T<sub>3</sub>, F, 30>

<small>lT</small><sub>3</sub><small> chưa kết thúc</small>

<small>lKhôi phục F=30l</small> <end ckpt>

<small>lNhững giao tác bắt đầu trước <start ckpt> đã hoàn tất</small>

<small>lT</small><sub>1</sub><small> và T</small><sub>2</sub><small> đã hoàn tấtl</small> < T<sub>3</sub>, E, 25 >

<b><small><start ckpt (T</small><sub>1</sub><small>,T</small><sub>2</sub><small>)> </small></b>

<b><small><T</small><sub>2</sub><small>, C, 15> </small></b>

<b><small><start T</small><sub>3</sub><small>> <T</small><sub>1</sub><small>, </small></b>

<b><small>D, 20> <commit T</small><sub>1</sub><small>> <T</small><sub>3</sub><small>, E, 25> </small></b>

<b><small><commit T</small><sub>2</sub><small>> </small></b>

<b><small><end ckpt> <T</small><sub>3</sub><small>, F, 30></small></b>

<small>scan</small>

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

<b>Undo-Logging & Nonquiescent Checkpoint (tt)</b>

<b><small><start, T</small><sub>2</sub><small>> <T</small><sub>2</sub><small>, B, 10> <start ckpt (T</small><sub>1</sub><small>,T</small><sub>2</sub><small>)> </small></b>

<b><small><T</small><sub>2</sub><small>, C, 15> <start, T</small><sub>3</sub><small>> <T</small><sub>1</sub><small>, D, 20> <commit T</small><sub>1</sub><small>> <T</small><sub>3</sub><small>, E, 25></small></b>

<small>scan</small>

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

<small>l</small>

<b>Qui tắc</b>

<small>l</small> <b>(1)</b> Một thao tác phát sinh ra 1 mẫu tin nhật ký

<small>lMẫu tin của thao tác cập nhật chỉ ghi nhận lại </small><b><small>giá trị mới</small></b>

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

<b>Ví dụ</b>

<small>Hành động</small>

<small>Mem AMem BDisk ADisk B</small>

<small>Mem Log<start T></small>

<b><small>Flush log</small></b>

<small><T, A, 16></small>

<small><T, B, 16><commit T></small>

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

<small>l</small>

<b>Khôi phục</b>

<small>l</small> <b>(1) Gọi S là tập các giao tác hoàn tất</b>

<small>l</small> <b><small>Có mẫu tin <commit T</small><sub>i</sub><small>> trong nhật ký</small></b>

<small>l</small> <b>(2) Với mỗi mẫu tin <T<sub>i</sub>, X, w> trong nhật ký (theo thứ tự cuối tập tin đến đầu tập tin)</b>

<small>l</small> <b><small>Nếu T</small><sub>i</sub><small>  Sthì- Write(X, w) - Output(X)</small></b>

<small>l</small> <b>(3) Với mỗi T<sub>j</sub>  S</b>

<small>l</small> <b><small>Ghi mẫu tin <abort T</small><sub>j</sub><small>> lên nhật ký</small></b>

<b>Phương pháp Redo-Logging (tt) </b>

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

<small>Sự cốT</small><sub>2</sub>

<small>Bỏ quaThực hiện lại </small>

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

<b>Ví dụ</b>

<small>Hành động</small>

<small>Mem A Mem BDisk ADisk B</small>

<small>Mem Log<start T></small>

<b><small>Flush log</small></b>

<small><T, A, 16></small>

<small><T, B, 16><commit T></small>

<b><small>Thực hiện lại T, ghi A=16 và B=16</small></b>

<b><small>Thực hiện lại T, ghi A=16 và B=16</small></b>

<b><small>Xem như T chưa hoàn tất, A và B khơng có thay đổi</small></b>

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

<small>l</small>

<b>Đến điểm lưu trữ, DBMS </b>

<small>l</small> <b>(1) </b>Tạo mẫu tin <start ckpt (T<sub>1</sub>, T<sub>2</sub>,…, T<sub>k</sub>)> và ghi xuống đĩa

<small>lT</small><sub>1</sub><small>, T</small><sub>2</sub><small>, …, T</small><sub>k</sub><small> là những giao tác đang thực thi</small>

<small>l</small> <b>(2)</b> Ghi xuống đĩa những dữ liệu của các giao tác đã hoàn tất trên vùng đệm

<small>l</small> <b>(3) </b>Tạo mẫu tin <end ckpt> và ghi xuống đĩa

<b>Redo-Logging & Checkpoint (tt)</b>

</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">

<b>Redo-Logging & Checkpoint (tt)</b>

<small>l</small>

<b>Ví dụ 1</b>

<small>l</small> T<sub>1</sub> đã hồn tất trước <start ckpt>

<small>lCó thể đã được ghi xuống đĩa</small>

<small>lNếu chưa thì trước khi <end ckpt> cũng được ghi xuống đĩa</small>

<b><small>ckpt (T</small><sub>2</sub><small>)> <T</small><sub>2</sub><small>, </small></b>

<b><small>C, 15> <start T</small><sub>3</sub><small>> <T</small><sub>3</sub><small>, D, 20> </small></b>

<b><small><end ckpt> </small></b>

<b><small><commit T</small><sub>2</sub><small>> <commit T</small><sub>3</sub><small>></small></b>

</div><span class="text_page_counter">Trang 41</span><div class="page_container" data-page="41">

<b>Redo-Logging & Checkpoint (tt)</b>

<small>lThực hiện lại T</small><sub>3</sub>

<small>lGhi D=20</small>

<b><small><start T</small><sub>1</sub><small>> <T</small><sub>1</sub><small>, A, 5> <start T</small><sub>2</sub><small>> <commit T</small><sub>1</sub><small>> <T</small><sub>2</sub><small>, B, 10> <start </small></b>

<b><small>ckpt (T</small><sub>2</sub><small>)> <T</small><sub>2</sub><small>, </small></b>

<b><small>C, 15> <start T</small><sub>3</sub><small>> <T</small><sub>3</sub><small>, D, 20> </small></b>

<b><small><end ckpt> </small></b>

<b><small><commit T</small><sub>2</sub><small>> <commit T</small><sub>3</sub><small>></small></b>

<small>scan</small>

</div><span class="text_page_counter">Trang 42</span><div class="page_container" data-page="42">

<b>Redo-Logging & Checkpoint (tt)</b>

<b><small>ckpt (T</small><sub>2</sub><small>)> <T</small><sub>2</sub><small>, </small></b>

<b><small>C, 15> <start T</small><sub>3</sub><small>> <T</small><sub>3</sub><small>, D, 20></small></b>

<small>scan</small>

</div><span class="text_page_counter">Trang 43</span><div class="page_container" data-page="43">

<small>l</small>

<b>Undo-logging (immediate modification)</b>

<small>l</small> <b>Khi giao tác kết thúc, dữ liệu được ghi xuống đĩa ngay lập tức</b>

<small>l</small> <b>Truy xuất đĩa nhiều</b>

<small>l</small> <b>Giữ lại các cập nhật trên vùng đệm cho đến khi giao tác hoàn tất và mẫu tin nhật ký được ghi xuống đĩa</b>

<small>l</small> <b>Tốn nhiều bộ nhớ</b>

<b>Nhận xét</b>

</div><span class="text_page_counter">Trang 44</span><div class="page_container" data-page="44">

<small>l</small>

<b>Qui tắc</b>

<small>l</small> <b>(1) Một thao tác phát sinh ra 1 mẫu tin nhật ký</b>

<small>l</small> <b><small>Mẫu tin của thao tác cập nhật ghi nhận giá trị cũ và mới của một đơn vị dữ liệu</small></b>

</div><span class="text_page_counter">Trang 45</span><div class="page_container" data-page="45">

<b>Ví dụ</b>

<small>Hành động</small>

<small>Mem AMem BDisk ADisk B</small>

<small>Mem Log<start T></small>

<b><small>Flush log</small></b>

<small><T, A, 8, 16></small>

<small><T, B, 8, 16></small>

<small><commit T></small>

</div><span class="text_page_counter">Trang 46</span><div class="page_container" data-page="46">

<small>l</small>

<b>Khôi phục</b>

<small>l</small> <b>(1) Khôi phục lại (undo) những giao tác chưa kết thúc </b>

<small>l</small> <b><small>Theo thứ tự từ cuối nhật ký đến đầu nhật ký</small></b>

<small>l</small> <b>(2) Thực hiện lại (redo) những giao tác đã hoàn tất</b>

<small>l</small> <b><small>Theo thứ tự từ đầu nhật ký đến cuối nhật ký</small></b>

<b>Phương pháp Undo/Redo-Logging (tt) </b>

</div><span class="text_page_counter">Trang 47</span><div class="page_container" data-page="47">

<small>Sự cốT</small><sub>2</sub>

<small>Khôi phụcThực hiện lại </small>

</div><span class="text_page_counter">Trang 48</span><div class="page_container" data-page="48">

<b>Ví dụ</b>

<small>Hành động</small>

<small>Mem AMem BDisk ADisk B</small>

<small>Mem Log<start T></small>

<small>67891011</small>

</div><span class="text_page_counter">Trang 49</span><div class="page_container" data-page="49">

<small>l</small>

<b>Khi đến điểm lưu trữ, DBMS</b>

<small>l</small> (1) Tạo mẫu tin <start ckpt (T<sub>1</sub>, T<sub>2</sub>,…, T<sub>k</sub>)> và ghi xuống đĩa

<small>lT</small><sub>1</sub><small>, T</small><sub>2</sub><small>, …, T</small><sub>k</sub><small> là những giao tác đang thực thi</small>

<small>l</small> (2) Ghi xuống đĩa những dữ liệu đang nằm trên vùng đệm

<small>lNhững đơn vị dữ liệu được cập nhật bởi các giao tác</small>

<small>l</small> (3) Tạo mẫu tin <end ckpt> trong nhật ký và ghi xuống đĩa

<b>Undo/Redo-Logging & Checkpoint</b>

</div><span class="text_page_counter">Trang 50</span><div class="page_container" data-page="50">

<small>l</small>

<b>Ví dụ 1:</b>

<b>Undo/Redo-Logging & Checkpoint (tt)</b>

<b><small><start T</small><sub>1</sub><small>> <T</small><sub>1</sub><small>, A, 4, 5> <start T</small><sub>2</sub><small>> <commit T</small><sub>1</sub><small>> <T</small><sub>2</sub><small>, B, 9, 10> </small></b>

<b><small><start ckpt (T</small><sub>2</sub><small>)> </small></b>

<b><small><T</small><sub>2</sub><small>, C, 14, 15> <start T</small><sub>3</sub><small>> <T</small><sub>3</sub><small>, D, 19, 20> <end ckpt> <commit T</small><sub>2</sub><small>> <commit T</small><sub>3</sub><small>></small></b>

<small>l</small> T<sub>1</sub> đã hồn tất trước <start ckpt>

<small>lCó thể đã được ghi xuống đĩa</small>

<small>lNếu chưa thì trước khi <end ckpt> cũng được ghi xuống đĩa</small>

<small>l</small> Giá trị B=10 đã được ghi xuống đĩa

</div><span class="text_page_counter">Trang 51</span><div class="page_container" data-page="51">

<small>l</small>

<b>Ví dụ 1:</b>

<b>Undo/Redo-Logging & Checkpoint (tt)</b>

<b><small><start T</small><sub>1</sub><small>> <T</small><sub>1</sub><small>, A, 4, 5> <start T</small><sub>2</sub><small>> <commit T</small><sub>1</sub><small>> <T</small><sub>2</sub><small>, B, 9, 10> </small></b>

<b><small><start ckpt (T</small><sub>2</sub><small>)> <T</small><sub>2</sub><small>, C, 14, 15> <start T</small><sub>3</sub><small>> <T</small><sub>3</sub><small>, D, 19, 20> <end ckpt> <commit T</small><sub>2</sub><small>> <commit T</small><sub>3</sub><small>></small></b>

<small>lThực hiện lại T</small><sub>3</sub><small> và ghi D=20</small>

<small>scan</small>

</div><span class="text_page_counter">Trang 52</span><div class="page_container" data-page="52">

<small>l</small>

<b>Ví dụ 2:</b>

<b>Undo/Redo-Logging & Checkpoint (tt)</b>

<b><small><start T</small><sub>1</sub><small>> <T</small><sub>1</sub><small>, A, 4, 5> <start T</small><sub>2</sub><small>> <commit T</small><sub>1</sub><small>> <T</small><sub>2</sub><small>, B, 9, 10> </small></b>

<b><small><start ckpt (T</small><sub>2</sub><small>)> <T</small><sub>2</sub><small>, C, 14, 15> <start T</small><sub>3</sub><small>> <T</small><sub>3</sub><small>, D, 19, 20> <end ckpt> <commit T</small><sub>2</sub><small>></small></b>

<small>lKhơi phục D=19</small>

<small>scan</small>

</div><span class="text_page_counter">Trang 53</span><div class="page_container" data-page="53">

<small>l</small>

<b>Ví dụ 3:</b>

<b>Undo/Redo-Logging & Checkpoint (tt)</b>

<b><small><start T</small><sub>1</sub><small>> <T</small><sub>1</sub><small>, A, 4, 5> <start T</small><sub>2</sub><small>> <commit T</small><sub>1</sub><small>> </small></b>

<b><small><start T</small><sub>3</sub><small>> <T</small><sub>2</sub><small>, B, 9, 10> <T</small><sub>3</sub><small>, E, 6, 7> </small></b>

<b><small><start ckpt (T</small><sub>2, </sub><small>T</small><sub>3</sub><small>)> <T</small><sub>2</sub><small>, C, 14, 15> <T</small><sub>3</sub><small>, D, 19, 20> <end </small></b>

<small>lKhơi phục D=19 và E=6</small>

<small>scan</small>

</div><span class="text_page_counter">Trang 54</span><div class="page_container" data-page="54">

<b>AN TỒN & BẢO MẬT DỮ LiỆU</b>

</div><span class="text_page_counter">Trang 55</span><div class="page_container" data-page="55">

<b>AN TOÀN & BẢO MẬT DỮ LiỆU</b>

</div><span class="text_page_counter">Trang 56</span><div class="page_container" data-page="56">

<b>AN TOÀN & BẢO MẬT DỮ LiỆU</b>

</div><span class="text_page_counter">Trang 57</span><div class="page_container" data-page="57">

<b>AN TOÀN & BẢO MẬT DỮ LiỆU</b>

</div><span class="text_page_counter">Trang 58</span><div class="page_container" data-page="58">

<b>AN TOÀN & BẢO MẬT DỮ LiỆU</b>

</div><span class="text_page_counter">Trang 59</span><div class="page_container" data-page="59">

<b>AN TOÀN & BẢO MẬT DỮ LiỆU</b>

</div><span class="text_page_counter">Trang 60</span><div class="page_container" data-page="60">

<b>AN TOÀN & BẢO MẬT DỮ LiỆU</b>

</div><span class="text_page_counter">Trang 61</span><div class="page_container" data-page="61">

<b>AN TOÀN & BẢO MẬT DỮ LiỆU</b>

</div><span class="text_page_counter">Trang 62</span><div class="page_container" data-page="62">

<b>AN TOÀN & BẢO MẬT DỮ LiỆU</b>

</div><span class="text_page_counter">Trang 63</span><div class="page_container" data-page="63">

<b>AN TOÀN & BẢO MẬT DỮ LiỆU</b>

</div><span class="text_page_counter">Trang 64</span><div class="page_container" data-page="64">

<b>AN TOÀN & BẢO MẬT DỮ LiỆU</b>

</div><span class="text_page_counter">Trang 65</span><div class="page_container" data-page="65">

<b>AN TOÀN & BẢO MẬT DỮ LiỆU</b>

</div><span class="text_page_counter">Trang 66</span><div class="page_container" data-page="66">

<b>AN TOÀN & BẢO MẬT DỮ LiỆU</b>

</div><span class="text_page_counter">Trang 67</span><div class="page_container" data-page="67">

<b>AN TOÀN & BẢO MẬT DỮ LiỆU</b>

</div>

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×