« Home « Kết quả tìm kiếm

Quản Lý Dữ Liệu - Cơ Sở Dữ Liệu phần 6


Tóm tắt Xem thử

- Full Recovery model: Là mô hình phục hồi toàn bộ hoạt động giao dịch của dữ liệu (Insert, Update, Delete, hoạt động bởi lệnh bcp, bulk insert).
- Quản lý giao dịch 1.
- Một giao dịch là một đơn vị thực hiện chương trình truy xuất và có thể cập nhật nhiều mục dữ liệu.
- Một giao dịch thường là kết quả của sự thực hiện một chương trình người dùng được viết trong một ngôn ngữ thao tác dữ liệu mức cao hoặc một ngôn ngữ lập trình (SQL, COBOL, PASCAL.
- Giao dịch bao gồm tất cả các hoạt động được thực hiện giữa begin và end transaction..
- Để đảm bảo tính toàn vẹn của dữ liệu, ta yêu cầu hệ CSDL duy trì các tính chất sau của giao dịch:.
- Hoặc toàn bộ các hoạt động của giao dịch được phản ánh đúng đắn trong CSDL hoặc không có gì cả..
- Sự thực hiện của một giao dịch là cô lập (Không.
- có giao dịch khác thực hiện đồng thời) để bảo tồn tính nhất quán của CSDL..
- Cho dù nhiều giao dịch có thể thực hiện đồng thời, hệ thống phải đảm bảo rằng đối với mỗi cặp giao dịch T i , T j , hoặc T j kết thúc thực hiện trước khi T i khởi động hoặc T j bắt đầu sự thực hiện sau khi T i kết thúc.
- Như vậy mỗi giao dịch không cần biết đến các giao dịch khác đang thực hiện đồng thời trong hệ thống..
- Sau một giao dịch hoàn thành, các thay đổi đã được tạo ra đối với CSDL vẫn còn ngay cả khi xảy ra sự cố hệ thống..
- Ta xét một ví dụ: một hệ thống ngân hàng gồm một số tài khoản và một tập các giao dịch truy xuất và cập nhật các tài khoản.
- READ(X): chuyển mục dữ liệu X từ CSDL đến buffer của giao dịch thực hiện hoạt động READ này..
- WRITE(X): chuyển mục dữ liệu X từ buffer của giao dịch thực hiện WRITE đến CSDL..
- T i là một giao dịch chuyển 50 từ tài khoản A sang tài khoản B.
- Giao dịch này có thể được xác định như sau:.
- Tính nhất quán: Đòi hỏi nhất quán ở đây là tổng của A và B là không thay đổi bởi sự thực hiện giao dịch.
- Nếu không có yêu cầu nhất quán, tiền có thể được tạo ra hay mất bởi giao dịch.
- Dễ dàng kiểm nghiệm rằng nếu CSDL nhất quán trước một thực hiện giao dịch, nó vẫn nhất quán sau khi thực hiện giao dịch.
- cho một giao dịch là trách nhiệm của người lập trình ứng dụng người đã viết ra giao dịch.
- Tính nguyên tử: giả sử rằng ngay trước khi thực hiện giao dịch T i , giá trị của các tài khoản A và B tương ứng là 1000 và 2000.
- Giả sử rằng trong khi thực hiện giao dịch T i , một sự cố xảy ra cản trở T i hoàn tất thành công sự thực hiện của nó.
- Ví dụ giao dịch T i , trong quá trình thực hiện cũng tồn tại thời điểm tại đó giá trị của tài khoản A là 950 và tài khoản B là 2000 – một trạng thái không nhất quán.
- Trạng thái này được thay thế bởi trạng thái nhất quán khi giao dịch đã hoàn tất.
- Như vậy, nếu giao dịch không bao giờ khởi động hoặc được đảm bảo sẽ hoàn tất, trạng thái không nhất quán sẽ không bao giờ xảy ra.
- Đảm bảo tính nguyên tử là trách nhiệm của hệ CSDL, và được quản lý bởi một thành phần được gọi là thành phần quản trị giao dịch (transaction- management component)..
- Tính bền vững: tính chất bền vững đảm bảo rằng mỗi khi một giao dịch hoàn tất, tất cả các cập nhật đã thực hiện trên cơ sở dữ liệu vẫn còn đó, ngay cả khi xảy ra sự cố hệ thống sau khi giao dịch đã hoàn tất.
- Hai thành phần quản trị giao dịch và quản trị phục hồi quan hệ mật thiết với nhau..
- Tính cô lập: ngay cả khi tính nhất quán và tính nguyên tử được đảm bảo cho mỗi giao dịch, trạng thái không nhất quán vẫn có thể xảy ra nếu trong hệ thống có một số giao dịch được thực hiện đồng thời và các hoạt động của chúng đan xen theo một cách không mong muốn.
- Một giải pháp cho vấn đề các giao dịch thực hiện đồng thời là thực hiện tuần tự các giao dịch, tuy nhiên giải pháp này làm giảm hiệu năng của hệ thống.
- Các giải pháp khác cho phép nhiều giao dịch thực hiện tương tranh đã được phát triển ta sẽ thảo luận về chúng sau này.
- Tính cô lập của một giao dịch đảm bảo rằng sự thực hiện đồng thời các giao dịch dẫn đến một trạng thái hệ thống tương đương với một trạng thái có thể nhận được bởi thực hiện các giao dịch này một tại một thời điểm theo một thứ tự nào đó.
- Trạng thái giao dịch.
- Nếu không có sự cố, tất cả các giao dịch đều hoàn tất thành công.
- Tuy nhiên, một giao dịch trong thực tế có thể không thể hoàn tất sự thực hiện của nó.
- Giao dịch như vậy được gọi là bị bỏ dở.
- Nếu ta đảm bảo được tính nguyên tử, một giao dịch bị bỏ dở không được phép làm ảnh hưởng tới trạng thái của CSDL.
- Như vậy, bất kỳ thay đổi nào từ giao dịch bị bỏ dở này đều phải bị hủy bỏ.
- Mỗi khi các thay đổi do giao dịch bị bỏ dở bị hủy bỏ, ta nói rằng giao dịch bị cuộn lại (rolled back).
- Khi một giao dịch hoàn tất một cách thành công sự thực hiện của nó được gọi là được bàn giao (committed).
- Một giao dịch được bàn giao, các lệnh cập nhật sẽ biến đổi CSDL sang một trạng thái nhất quán mới và nó là bền vững ngay cả khi có sự cố.
- Mỗi khi một giao dịch là được bàn giao, ta không thể hủy bỏ các hiệu quả của nó bằng cách bỏ dở nó.
- Cách duy nhất để hủy bỏ các hiệu quả của một giao dịch được bàn giao là thực hiện một giao dịch bù (compensating transaction), nhưng không phải luôn luôn có thể tạo ra một giao dịch bù.
- Do vậy trách nhiệm viết và thực hiện một giao dịch bù thuộc về người sử dụng và không được quản lý bởi hệ CSDL..
- Một giao dịch phải ở trong một trong các trạng thái sau:.
- giao dịch giữ trong trạng thái này trong khi nó đang thực hiện..
- Bỏ dở (Aborted): sau khi giao dịch đã bị cuộn lại và CSDL đã phục hồi lại trạng thái của nó trước khi khởi động giao dịch..
- Được bàn giao (Committed): sau khi hoàn thành thành công giao dịch..
- Một giao dịch được gọi là kết thúc nếu nó hoặc là committed hoặc là Aborted.
- Một giao dịch khởi đầu bởi trạng thái Active.
- Sau khi các thông tin sau cùng này được viết lên đĩa, giao dịch chuyển sang trạng thái committed..
- Biểu đồ trạng thái tương ứng với một giao dịch như sau:.
- Với giả thiết sự cố hệ thống không gây ra sự mất dữ liệu trên đĩa, một giao dịch đi đến trạng thái Failed sau khi hệ thống xác định rằng giao dịch không thể tiến triển bình thường được nữa (do lỗi phần cứng hoặc phần mềm).
- Như vậy, giao dịch phải được cuộn lại rồi chuyển sang trạng thái bỏ dở.
- Giao dịch được khởi động lại được xem là một giao dịch mới..
- Hầu hết các hệ thống cho phép các thao tác viết như thế xảy ra chỉ khi giao dịch đã di vào trạng thái committed.
- Nếu hệ thống thất bại sau khi giao dịch đi vào trạng thái committed nhưng trước khi hoàn tất các tháo tác viết ngoài, hệ CSDL sẽ làm các thao tác viết ngoài này (sử dụng dữ liệu trong lưu trữ không hay thay đổi) khi hệ thống khởi động lại..
- Ta không thể cho phép xuất ra dữ liệu khả quan sát như vậy trừ phi ta buộc phải làm tổn hại tính nguyên tử giao dịch.
- Hầu hết các hệ thống giao dịch hiện hành đảm bảo tính nguyên tử và do vậy cấm dạng trao đổi với người dùng này..
- Sơ đồ này giả thiết rằng chỉ một giao dịch là hoạt động tại một thời điểm và được dựa trên việc tạo bản sao của CSDL được gọi là các bản sao khuất (shadow copies).
- Trong sơ đồ CSDL khuất (shadow-database), một giao dịch muốn cập nhật CSDL, đầu tiên tạo ra một bản sao đầy đủ của CSDL.
- Nếu tại một thời điểm bất kỳ giao dịch bị bỏ dở, bản sao mới bị xoá.
- Nếu giao dịch hoàn tất, nó được được bàn giao như sau: đầu tiên, hỏi hệ điều hành để đảm bảo rằng tất cả các trang của bản sao mới đã được viết lên đĩa (flush).
- Giao dịch được gọi là đã được được bàn giao tại thời điểm sự cập nhật con trỏ db_pointer được ghi lên đĩa.
- Ta xét kỹ thuật này quản lý sự cố giao dịch và sự cố hệ thống ra sao? Trước tiên, ta xét sự cố giao dịch.
- Nếu giao dịch thất bại tại thời điểm bất kỳ trước khi con trỏ db_pointer được cập nhật, nội dung cũ của CSDL không bị ảnh hưởng.
- Ta có thể bỏ dở giao dịch bởi xoá bản sao mới.
- Mỗi khi giao dịch được được bàn giao, tất cả các cập nhật mà nó đã thực hiện là ở trong CSDL được trỏ bởi db_pointer.
- Như vậy, hoặc tất cả các cập nhật của giao dịch đã được phản ánh hoặc không kết quả nào được phản ánh,.
- bất chấp tới sự cố giao dịch.
- Do vậy, khi hệ thống khởi động lại, nó sẽ đọc db_pointer và sẽ thấy nội dung của CSDL sau tất cả các cập nhật đã thực hiện bởi giao dịch.
- Tính nguyên tử và tính bền vững của giao dịch được đảm bảo bởi việc thực thi bản sao bóng của thành phần quản trị phục hồi.
- Sự thực thi này cực kỳ thiếu hiệu quả trong ngữ cảnh CSDL lớn, do sự thực hiện một giao dịch đòi hỏi phải sao toàn bộ CSDL.
- Hơn nữa sự thực thi này không cho phép các giao dịch thực hiện đồng thời với các giao dịch khác.
- Hệ thống xử lý giao dịch thường cho phép nhiều giao dịch thực hiện đồng thời.
- Việc cho phép nhiều giao dịch cập nhật dữ liệu đồng thời gây ra những khó khăn trong việc bảo đảm sự nhất quán dữ liệu.
- Bảo đảm sự nhất quán dữ liệu mà không quan tâm tới sự thực hiện tương tranh các giao dịch sẽ cần thêm các công việc phụ.
- Một phương pháp tiến hành là cho các giao dịch thực hiện tuần tự: đảm bảo rằng một giao dịch khởi động chỉ sau khi giao dịch trước đã hoàn tất.
- Một giao dịch gồm nhiều bước.
- Sự song song của hệ thống CPU và I/O có thể được khai thác để chạy nhiều giao dịch song song.
- Trong khi một giao dịch tiến hành một hoạt động đọc/viết trên một đĩa, một giao dịch khác có thể đang chạy trong CPU, một giao dịch thứ ba có thể thực hiện đọc/viết trên một đĩa khác.
- như vậy sẽ tăng lượng đầu vào hệ thống có nghĩa là tăng số lượng giao dịch có thể được thực hiện trong một lượng thời gian đã cho, cũng.
- Có thể có sự trộn lẫn các giao dịch đang chạy trong hệ thống, cái thì dài cái thì ngắn..
- Nếu thực hiện tuần tự, một quá trình ngắn có thể phải chờ một quá trình dài đến trước hoàn tất, mà điều đó dẫn đến một sự trì hoãn không lường trước được trong việc chạy một giao dịch.
- Thực hiện tương tranh làm giảm sự trì hoãn không lường trước trong việc chạy các giao dịch, đồng thời làm giảm thời gian đáp ứng trung bình: Thời gian để một giao dịch được hoàn tất sau khi đã được đệ trình..
- Khi một vài giao dịch chạy đồng thời, tính nhất quán CSDL có thể bị vi phạm cho dù mỗi giao dịch là đúng.
- Hệ CSDL phải điều khiển sự trao đổi giữa các giao dịch tương tranh để ngăn ngừa chúng phá huỷ sự nhất quán của CSDL.
- Giả sử T 1 và T 2 là hai giao dịch chuyển khoản từ một tài khoản sang một tài khoản khác.
- Giao dịch T 1 chuyển 50$ từ tài khoản A sang tài khoản B.
- Giao dịch T 2 chuyển 10% số dư từ tài khoản A sang tài khoản B, và được xác định như sau:.
- Giả sử rằng hai giao dịch này được thực hiện theo trình tự:.
- Trường hợp 1: thực hiện xong giao dịch T 1 rồi đến giao dịch T 2.
- Trường hợp 2: thực hiện xong giao dịch T 2 rồi đến giao dịch T 1.
- Ví dụ, đối với giao dịch T 1 , chỉ thị Write(A) phải xuất hiện trước chỉ thị Read(B), trong bất kỳ thời lịch hợp lệ nào.
- Khi một số giao dịch được thực hiện đồng thời, thời lịch tương ứng không nhất thiết là tuần tự.
- Sau khi thực hiện giao dịch này, ta đạt tới trạng thái trong đó giá trị cuối của A và B tương ứng là 950$ và 2100$.
- Trạng thái này là một trạng thái không nhất quán (A+B trước khi thực hiện giao dịch là 3000$ nhưng sau khi giao dịch là 3050.
- Hệ CSDL phải điều khiển sự thực hiện tương tranh các giao dịch để đảm bảo rằng trạng thái CSDL giữ nguyên ở trạng thái nhất quán.
- Vì các giao dịch là các chương trình, nên thật khó xác định các hoạt động chính xác được thực hiện bởi một giao dịch là hoạt động gì và

Xem thử không khả dụng, vui lòng xem tại trang nguồn
hoặc xem Tóm tắt