DBMS - Phục hồi dữ liệu
Khôi phục sự cố
DBMS là một hệ thống rất phức tạp với hàng trăm giao dịch được thực hiện mỗi giây. Độ bền và tính mạnh mẽ của DBMS phụ thuộc vào kiến trúc phức tạp cũng như phần cứng và phần mềm hệ thống cơ bản của nó. Nếu nó không thành công hoặc bị treo giữa các giao dịch, hệ thống sẽ tuân theo một số loại thuật toán hoặc kỹ thuật để khôi phục dữ liệu bị mất.
Phân loại thất bại
Để xem vấn đề đã xảy ra ở đâu, chúng tôi tổng quát lỗi thành nhiều loại khác nhau, như sau:
Giao dịch thất bại
Một giao dịch phải hủy bỏ khi nó không thực hiện được hoặc khi nó đạt đến điểm mà từ đó nó không thể tiến xa hơn. Đây được gọi là thất bại trong giao dịch khi chỉ có một vài giao dịch hoặc quy trình bị ảnh hưởng.
Lý do giao dịch không thành công có thể là:
Logical errors - Trường hợp giao dịch không thể hoàn tất vì nó có một số lỗi mã hoặc bất kỳ điều kiện lỗi nội bộ nào.
System errors- Trường hợp hệ thống cơ sở dữ liệu tự kết thúc một giao dịch đang hoạt động do DBMS không thể thực thi nó, hoặc nó phải dừng lại do một số điều kiện hệ thống. Ví dụ, trong trường hợp bế tắc hoặc không có tài nguyên, hệ thống sẽ hủy một giao dịch đang hoạt động.
Sự cố hệ thống
Có các vấn đề - bên ngoài hệ thống - có thể khiến hệ thống dừng đột ngột và khiến hệ thống gặp sự cố. Ví dụ, gián đoạn nguồn điện có thể gây ra lỗi phần cứng hoặc phần mềm bên dưới.
Ví dụ có thể bao gồm lỗi hệ điều hành.
Hỏng ổ đĩa
Trong những ngày đầu tiên của sự phát triển công nghệ, đó là một vấn đề phổ biến khi ổ đĩa cứng hoặc ổ lưu trữ thường xuyên bị lỗi.
Lỗi đĩa bao gồm hình thành các thành phần xấu, không thể truy cập vào đĩa, lỗi đầu đĩa hoặc bất kỳ lỗi nào khác, điều này sẽ phá hủy toàn bộ hoặc một phần dung lượng lưu trữ trên đĩa.
Cấu trúc lưu trữ
Chúng tôi đã mô tả hệ thống lưu trữ. Tóm lại, cấu trúc lưu trữ có thể được chia thành hai loại:
Volatile storage- Như tên cho thấy, một bộ nhớ dễ bay hơi không thể tồn tại các sự cố hệ thống. Các thiết bị lưu trữ dễ bay hơi được đặt rất gần CPU; thông thường chúng được nhúng vào chính chipset. Ví dụ, bộ nhớ chính và bộ nhớ đệm là những ví dụ về lưu trữ dễ bay hơi. Chúng nhanh nhưng chỉ có thể lưu trữ một lượng nhỏ thông tin.
Non-volatile storage- Những ký ức này được tạo ra để tồn tại các sự cố hệ thống. Chúng có dung lượng lưu trữ dữ liệu rất lớn nhưng khả năng truy cập chậm hơn. Ví dụ có thể bao gồm đĩa cứng, băng từ, bộ nhớ flash và RAM không bay hơi (pin dự phòng).
Phục hồi và nguyên tử
Khi hệ thống gặp sự cố, nó có thể có một số giao dịch đang được thực hiện và nhiều tệp khác nhau được mở để chúng sửa đổi các mục dữ liệu. Các giao dịch được thực hiện bằng các hoạt động khác nhau, có bản chất là nguyên tử. Nhưng theo thuộc tính ACID của DBMS, tính nguyên tử của các giao dịch nói chung phải được duy trì, nghĩa là tất cả các hoạt động được thực hiện hoặc không có hoạt động nào.
Khi một DBMS phục hồi sau sự cố, nó phải duy trì những điều sau:
Nó sẽ kiểm tra trạng thái của tất cả các giao dịch đang được thực hiện.
Một giao dịch có thể đang ở giữa một số hoạt động; DBMS phải đảm bảo tính nguyên tử của giao dịch trong trường hợp này.
Nó sẽ kiểm tra xem liệu giao dịch có thể được hoàn tất ngay bây giờ hay nó cần phải được quay trở lại.
Không có giao dịch nào được phép để DBMS ở trạng thái không nhất quán.
Có hai loại kỹ thuật có thể giúp DBMS khôi phục cũng như duy trì tính nguyên tử của giao dịch -
Duy trì nhật ký của mỗi giao dịch và ghi chúng vào một số bộ nhớ ổn định trước khi thực sự sửa đổi cơ sở dữ liệu.
Duy trì phân trang bóng, nơi các thay đổi được thực hiện trên bộ nhớ dễ bay hơi và sau đó, cơ sở dữ liệu thực tế được cập nhật.
Phục hồi dựa trên nhật ký
Nhật ký là một chuỗi các bản ghi, lưu giữ các bản ghi của các hành động được thực hiện bởi một giao dịch. Điều quan trọng là nhật ký được viết trước khi sửa đổi thực tế và được lưu trữ trên phương tiện lưu trữ ổn định, được bảo vệ an toàn.
Khôi phục dựa trên nhật ký hoạt động như sau:
Tệp nhật ký được lưu giữ trên phương tiện lưu trữ ổn định.
Khi một giao dịch vào hệ thống và bắt đầu thực hiện, nó sẽ ghi nhật ký về nó.
<Tn, Start>
Khi giao dịch sửa đổi một mục X, nó sẽ ghi nhật ký như sau:
<Tn, X, V1, V2>
Nó đọc T n đã thay đổi giá trị của X, từ V 1 thành V 2 .
- Khi giao dịch kết thúc, nó ghi lại -
<Tn, commit>
Cơ sở dữ liệu có thể được sửa đổi bằng hai cách tiếp cận:
Deferred database modification - Tất cả nhật ký được ghi vào bộ nhớ ổn định và cơ sở dữ liệu được cập nhật khi một giao dịch thực hiện.
Immediate database modification- Mỗi nhật ký tuân theo một sửa đổi cơ sở dữ liệu thực tế. Đó là, cơ sở dữ liệu được sửa đổi ngay lập tức sau mỗi hoạt động.
Phục hồi với các giao dịch đồng thời
Khi nhiều hơn một giao dịch đang được thực hiện song song, các bản ghi sẽ được xen kẽ. Tại thời điểm khôi phục, hệ thống khôi phục sẽ khó có thể truy xuất tất cả các nhật ký và sau đó bắt đầu khôi phục. Để giảm bớt tình trạng này, hầu hết các DBMS hiện đại sử dụng khái niệm 'điểm kiểm tra'.
Trạm kiểm soát
Lưu giữ và duy trì nhật ký trong thời gian thực và trong môi trường thực có thể lấp đầy tất cả không gian bộ nhớ có sẵn trong hệ thống. Khi thời gian trôi qua, tệp nhật ký có thể phát triển quá lớn để có thể xử lý được. Checkpoint là một cơ chế mà tất cả các bản ghi trước đó được xóa khỏi hệ thống và được lưu trữ vĩnh viễn trong đĩa lưu trữ. Checkpoint tuyên bố một điểm mà trước đó DBMS ở trạng thái nhất quán và tất cả các giao dịch đã được cam kết.
Hồi phục
Khi một hệ thống có các giao dịch đồng thời gặp sự cố và phục hồi, nó sẽ hoạt động theo cách sau:
Hệ thống khôi phục đọc ngược các bản ghi từ cuối đến điểm kiểm tra cuối cùng.
Nó duy trì hai danh sách, một danh sách hoàn tác và một danh sách làm lại.
Nếu hệ thống khôi phục thấy một nhật ký có <T n , Start> và <T n , commit> hoặc chỉ <T n , commit>, nó sẽ đưa giao dịch vào danh sách làm lại.
Nếu hệ thống khôi phục thấy một nhật ký có <T n , Start> nhưng không tìm thấy nhật ký cam kết hoặc hủy bỏ, nó sẽ đưa giao dịch vào danh sách hoàn tác.
Tất cả các giao dịch trong danh sách hoàn tác sau đó sẽ được hoàn tác và nhật ký của chúng bị xóa. Tất cả các giao dịch trong danh sách làm lại và nhật ký trước đó của chúng sẽ bị xóa và sau đó được thực hiện lại trước khi lưu nhật ký của chúng.