Chương này cho ta một cái nhìn bao quát về CSDL, HQTCSDL, các yêu cầu mà một HQTCSDL đặt ra cũng chính là những chức năng mà một HCSDL phải có. Một khái niệm quan trọng trong việc xây dựng một HCSDL đáp ứng được các yêu cầu đặt ra là khái niệm giao dịch (Transaction). Các tính chất mà một giao dịch phải có để đảm bảo một HQTCSDL, được xây dựng trên HCSDL tương ứng, trong suốt quá trình hoạt động sẽ luôn cho một CSDL tin cậy (có nghĩa là dữ liệu luôn nhất quán). Quản trị giao dịch nhằm đảm bảo mỗi giao dịch trong hệ thống có các tính chất mà một giao dịch phải có. Một điều cần chú ý là trong các tính chất của một giao dịch tính chất nhất quán trước hết phải được đảm bảo bởi người lập trình người viết ra giao dịch.
Trang 1MỤC LỤC
MỤC LỤC
DANH MỤC CÁC HÌNH VẼ
DANH MỤC CÁC BẢNG BIỂU
DANH MỤC TỪ VIẾT TẮT
LỜI CẢM ƠN
CHƯƠNG 1 5
TỔNG QUAN VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 5
1.1 CÁC KHÁI NIỆM 5
1.1.1 Định nghĩa hệ quản trị CSDL 5
1.1.2 Các chức năng của một hệ quản trị cơ sở dữ liệu 5
1.1.3 Các đặc trưng của giải pháp CSDL 6
1.2 KIẾN TRÚC HỆ QUẢN TRỊ CSDL 8
1.2.1 Cách nhìn CSDL 8
1.2.2 Mô hình dữ liệu 9
1.2.3 Ngôn ngữ CSDL 9
1.2.4 Quản trị giao dịch 10
1.2.5 Quản trị lưu trữ 11
1.2.6 Người quản trị cơ sở dữ liệu 11
1.2.7 Người sử dụng cơ sở dữ liệu 12
1.2.8 Cấu trúc hệ thống tổng thể 13
1.2.9 Kiến trúc hệ cơ sở dữ liệu 15
CHƯƠNG 2 24
QUẢN LÝ GIAO DỊCH 24
2.1 GIAO DỊCH 24
2.1.1 Khái niệm 24
2.1.2 Trạng thái giao dịch 24
2.1.3 Các thuộc tính của giao dịch 25
2.2 PHÂN TÍCH GIAO DỊCH SQL 27
2.2.1 Phân tách 27
2.2.1.1 Phân tách mềm 27
2.2.1.2 Phân tách cứng 28
2.2.2 Đóng kết 28
2.2.3 Thực thi 28
2.3 KIỂM SOÁT GIAO DỊCH ĐỒNG THỜI 28
2.3.1 Các vấn đề về sự đồng thời 29
2.3.2 Lập biểu và sự khả năng tuần tự 30
2.3.3 Tiêu chuẩn giao dịch ISO 30
2.3.3.1 Quản lý giao dịch trong Oracle 31
2.4 HIỆN THỰC KIỂM SOÁT ĐỒNG THỜI 32
2.4.1 Các phương pháp khoá 33
2.4.2 Các kiểu khoá 34
2.4.3 Chế độ khoá 35
2.4.4 Khoá tường minh trong Oracle 37
2.4.5 Quản lý khoá 38
2.5 Giao dịch độc lập 40
2.6 Khả năng có thể tiếp tục cấp phát lưu trữ 42
Trang 22.6.1 Các hoạt động có thể tiếp tục thực thi 43
2.6.2 Một số lỗi chung của hoạt động có thể tiếp tục 43
2.6.3 Sử dụng tính năng cấp phát lưu trữ có thể tiếp tục 43
2.6.4 Giám sát khả năng có thể tiếp tục cấp phát lưu trữ 45
2.7 Quản lý các giao dịch dài 45
2.7.1 Lợi ích khi sử dụng workspace Manager 45
2.7.2 Lập phiên bản bảng và Workspace 46
2.7.3 Quản lý Workspace Manager 51
CHƯƠNG 3 52
ĐIỀU KHIỂN CẠNH TRANH 52
3.1 Giao thức dựa trên chốt 52
3.1.1 Chốt ( Lock ) 52
3.1.3 Giao thức chốt hai kỳ (Two-phase locking protocol) 57
3.1.4 Giao thức dựa trên chốt (Graph-Based Protocol) 59
3.1.5 Đa hạt (Multiple Granularity) 61
3.2 Giao thức dựa trên tem thời gian (Timestamp-based protocol) 63
3.2.1 Tem thời gian (Timestamp) 63
3.2.2 Giao thức thứ tự tem thời gian (Timestamp-Ordering Protocol) 64
3.2.3 Quy tắc viết Thomas (Thomas' Write rule) 65
3.2.4 Giao thức dựa trên tính hợp lệ 66
3.3 Các sơ đồ đa phiên bản (Multiversion Schemes) 67
3.3.1 Thứ tự tem thời gian đa phiên bản 68
3.3.2 Chốt hai kỳ đa phiên bản 69
3.4 Quản trị Deadlock 69
3.4.1 Phòng ngừa Deadlock (Deadlock prevention) .70
3.4.2 Sơ đồ dựa trên Timeout 71
3.4.3 Phát hiện Deadlock và khôi phục 71
CHƯƠNG 4: 74
QUẢN TRỊ GIAO DỊCH VÀ ĐIỀU KHIỂN CẠNH TRANH TRÊN ORACLE 74
4.1.GIỚI THIỆU ROLLBACK SEGMENTS 74
4.1.1.Khái niệm 74
4.1.2 Mục đích sử dụng segment 74
4.1.3 Phân loại rollback segment 75
4.2 SỬ DỤNG ROLLBACK SEGMENT 75
4.2.1 Sử dụng rollback segment trong các transaction 75
4.2.2 Tăng trưởng đối với các rollback segments 76
4.2.3.Tối ưu các rollback segments 77
4.3 QUẢN LÝ ROLLBACK SEGMENTS 78
4.3.1 Sử dụng rollback segment 78
4.3.3 Thay đổi trạng thái của Rollback segments 80
4.3.4 Instance sử dụng rollback segment 81
4.3.5 Điều chỉnh khả năng lưu trữ của rollback segment 82
4.3.6 Giảm bớt độ rộng của rollback segment 82
4.3.7 Hủy bỏ rollback segment 83
4.3.8 Quản lý undo tự động 83
4.4 THÔNG TIN VỀ CÁC ROLLBACK SEGMENT 84
4.4.1 Xem thông tin chung về các rollback segment 84
4.4.2 Xem thông tin thống kê về rollback segment 85
Trang 31.5 CÁC VẤN ĐỀ LIÊN QUAN TỚI ROLLBACK SEGMENT 86
1.5.1 Không gian cho các transactions 86
1.5.2.Lỗi đọc dữ liệu không đồng nhất 87
TÀI LIỆU THAM KHẢO
DANH MỤC CÁC HÌNH VẼ Trang Hình 1.1 Khung nhìn CSDL
Hình 1.2 Kiến trúc của hệ cơ sở dữ liệu
Hình 1.3 Hệ thống Client-Server
Hình 1.4: Hệ thống server dữ liệu
Hình 1.5: Kiến trúc Bus
Hình 1.6: Mạng hợp nhật hình lưới và siêu lập phương
Hình 1.7: Mô hình kiến trúc cho các máy song song
Hình 1.8 Bộ nhớ chia sẻ
Hình 1.9 Mô hình đĩa chia sẻ
Hình 1.10 Mô hình không chia sẻ
Hình 1.11 Mô hình phân cấp
Hình 1.12 Mô hình hệ thống phân tán
Hình 1.13 Biểu đồ trạng thái giao dịch
hình 3.1 lịch trình tuân theo giao thức cây
Hình 3.2: Cây cơ sở dữ liệu
Hình 3.3 Đồ thị chờ (phi chu trình)
Hình 3.4 Đồ thị chờ Deadlock
Hình 4.1 Rollback segment
Hình 4.2 Mục đích của rollback segment
Hình 4.3 Sử dụng dữ liệu trong rollback segment
Hình 4.4 Tăng kích thước Rollback Segment
Hình 4.5 Giảm kích thước của Rollback segment
Hình 4.6 Các thông tin chính về rollback segments
Hình 4.7 Các thông tin thống kê về segments
Hình 4.8 Thông tin về các thao tác trên các segments
Hình 4.9 Chặn session
Trang 4DANH MỤC BẢNG BIỂU
Bảng 2.1 Các loại khóa trong Oracle
Bảng 3.1 Điều khiển cạnh tranh 2 giao dịch
Bảng 3.2 Lịch trình thực hiện 2 giao dịch T3 và T4
Bảng 3.3 Lịch trình Cascadeless
Bảng 3.4 Lịch trình khả tuần tự dưới giao thức cây
Bảng 3.5 Ma trận tương thích chốt
DANH MỤC TỪ VIẾT TẮT
HQTCSDL DataBase Management System - DBMS
DBA DataBase Administrator
Về viết thêm các từ viết tắt hay sử dụng vào
Trang 5CHƯƠNG 1
TỔNG QUAN VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
1.1 CÁC KHÁI NIỆM
1.1.1 Định nghĩa hệ quản trị CSDL
Một cơ sở dữ liệu (CSDL/DB: DataBase) là một tập hợp các tập tin có liên quan với
nhau, được thiết kế nhằm làm giảm thiểu sự lặp lại dữ liệu
Một hệ quản trị cơ sở dữ liệu (HQTCSDL/DBMS: DataBase Management System) là
một hệ thống gồm một CSDL và các thao tác trên CSDL đó, được thiết kế trên một nền tảng phần cứng và với một kiến trúc nhất định
Một hệ cơ sở dữ liệu (HCSDL/DBS:DataBase System) là một phần mềm cho phép xây
dựng một HQTCSDL
Định nghĩa một CSDL bao gồm việc đặc tả các kiểu dữ liệu, các cấu trúc và các ràng
buộc cho các dữ liệu sẽ được lưu trữ trong cơ sở
Xây dựng một CSDL là quá trình lưu trữ các dữ liệu trên các phương tiện lưu trữ được
HQTCSDL kiểm soát
- Thao tác một CSDL bao gồm các chức năng như truy vấn CSDL để lấy ra các dữ liệu
cụ thể, cập nhật CSDL để phản ánh các thay đổi trong thế giới nhỏ và tạo ra các báo cáo từ các dữ liệu
- Mục đích của một hệ CSDL là làm đơn giản và dễ dàng việc truy xuất dữ liệu Người
sử dụng hệ thống có thể không cần quan tâm đến chi tiết vật lý của sự thực thi hệ thống Phần lớn họ chỉ quan tâm đến hiệu năng của hệ thống (thời gian trả lời một câu vấn tin )
Chương này cho ta một cái nhìn bao quát về CSDL, HQTCSDL, các yêu cầu mà một HQTCSDL đặt ra cũng chính là những chức năng mà một HCSDL phải có Một khái niệm quan trọng trong việc xây dựng một HCSDL đáp ứng được các yêu cầu đặt ra là khái niệm
giao dịch (Transaction) Các tính chất mà một giao dịch phải có để đảm bảo một HQTCSDL,
được xây dựng trên HCSDL tương ứng, trong suốt quá trình hoạt động sẽ luôn cho một CSDL tin cậy (có nghĩa là dữ liệu luôn nhất quán) Quản trị giao dịch nhằm đảm bảo mỗi giao dịch trong hệ thống có các tính chất mà một giao dịch phải có Một điều cần chú ý là trong các tính chất của một giao dịch tính chất nhất quán trước hết phải được đảm bảo bởi người lập trình - người viết ra giao dịch
1.1.2 Các chức năng của một hệ quản trị cơ sở dữ liệu
Một HQTCSDL hiện nay có các chức năng sau:
Trang 6- Lưu trữ các định nghĩa, các mối liên kết dữ liệu (gọi là siêu dữ liệu: Meta Data)
vào một từ điển dữ liệu HQTCSDL sử dụng dữ liệu trong từ điển dữ liệu để tìm kiếm các cấu trúc thành phần dữ liệu và các mối liên kết được yêu cầu HQTCSDL giải phóng người sử dụng khỏi việc lập trình cho các mối liên kết phức tạp trong mỗi chương trình, việc sửa đổi các chương trình truy cập đến tệp CSDL đã bị sửa đổi Nói cách khác, HQTCSDL loại bỏ sự phụ thuộc giữa dữ liệu và cấu trúc ra khổi hệ thống
- Tạo ra các cấu trúc phức tạp theo yêu cầu để lưu trữ dữ liệu
- Biến đổi các dữ liệu được nhập vào để phù hợp với các cấu trúc dữ liệu Như vậy, HQTCSDL giúp người sử dụng phân biệt dạng logic và dạng vật lý của dữ liệu
- Tạo ra một hệ thống bảo mật và áp đặt tính bảo mật và riêng tư trong CSDL
- Tạo ra các cấu trúc phức tạp cho phép nhiều người sử dụng truy cập đến dữ liệu
- Cung cấp các thủ tục sao lưu, phục hồi dữ liệu đảm bảo an toàn và trọn vẹn dữ liệu
- Áp dụng các quy tắc an toàn để loại bỏ vấn đề toàn vẹn dữ liệu Điều đó cho phép
ta làm tối thiểu sự dư thừa dữ liệu và làm tối đa tính nhất quán dữ liệu
- Cung cấp việc truy cập dữ liệu thông qua một ngôn ngữ truy vấn Ngôn ngữ truy vấn là một ngôn ngữ phi thủ tục cho phép người sử dụng chỉ ra cái gì cần phải làm
mà không cần phải chỉ ra cho nó được làm như thế nào
1.1.3 Các đặc trưng của giải pháp CSDL
Hệ thống tệp (file) là một phương pháp được áp dụng trong việc quản lý Một tệp có thể
được xem là một cặp hồ sơ lưu trữ các thông tin liên quan đến từng công việc riêng biệt Việc
xử lý để lấy ra các thông tin như là các thống kê về lương, về quá trình công tác…, lúc đầu được thực hiện một cách thủ công Dần dần, khối lượng thông tin ngày càng lớn, việc xử lý các thông tin ngày càng phức tạp, người ta sử dụng máy tính vào việc quản lý Các cặp hồ sơ được chuyển thành các tệp trên máy vi tính và việc xử lý thông tin được thực hiện bằng cách lập trình
Việc quản lý theo giải pháp hệ thống tệp có rất nhiều nhược điểm như:
- Dư thừa dữ liệu và tính bất nhất (Data redundancy and inconsistency): Do các file và
các trình ứng dụng được tạo ra bởi các người lập trình khác nhau, nên các file có định dạng khác nhau, các chương trình được viết trong các ngôn ngữ lập trình khác nhau, cùng một thông tin có thể được lưu giữ trong các file khác nhau Tính không thống nhất và dư thừa này sẽ làm tăng chi phí truy xuất và lưu trữ, hơn nữa, nó sẽ dẫn đến tính bất nhất của dữ liệu: các bản sao của cùng một dữ liệu có thể không nhất quán
Trang 7- Khó khăn trong việc truy xuất dữ liệu: Môi trường của hệ thống xử lý file thông thường không cung cấp các công cụ cho phép truy xuất thông tin một cách hiệu quả và thuận lợi.
- Sự cô lập dữ liệu (Data isolation): Các giá trị dữ liệu được lưu trữ trong CSDL phải
thoả mãn một số các ràng buộc về tính nhất quán của dữ liệu (ràng buộc nhất quán/
consistency contraints) Trong hệ thống xử lý file thông thường, rất khó khăn trong
việc thay đổi các chương trình để thoả mãn các yêu cầu thay đổi ràng buộc Vấn đề trở nên khó khăn hơn khi các ràng buộc liên quan đến các hạng mục dữ liệu trong các file khác nhau
- Các vấn đề về tính nguyên tử (Atomicity problems): Tính nguyên tử của một hoạt
động (giao dịch) là: hoặc nó được hoàn tất trọn vẹn hoặc không có gì cả Điều này có nghĩa là một hoạt động chỉ làm thay đổi các dữ liệu bền vững khi nó đã hoàn tất (kết thúc thành công) nếu không, giao dịch không để lại một dấu vết nào trên CSDL Trong
hệ thống xử lý file thông thường khó đảm bảo được tính chất này
- Tính bất thường trong truy xuất cạnh tranh: Một hệ thống cho phép nhiều người sử dụng cập nhật dữ liệu đồng thời, có thể dẫn đến kết quả là dữ liệu không nhất quán Điều này đòi hỏi một sự giám sát Hệ thống xử lý file thông thường không cung cấp chức năng này
- Vấn đề an toàn (Security problems): một người sử dụng HCSDL không cần thiết và
cũng không có quyền truy xuất tất cả các dữ liệu Vấn dề này đòi hỏi hệ thống phải đảm bảo được tính phân quyền, chống truy xuất trái phép
Các bất lợi nêu trên đã gợi mở sự phát triển các DBMS Giải pháp CSDL ra đời đã giải quyết được những nhược điểm đó Cụ thể, giải pháp CSDL có những đặc trưng sau:
- Bản chất tự mô tả của HCSDL: Hệ thống CSDL không chỉ gồm có bản thân CSDL mà còn có cả định nghĩa hoặc mô tả đầy đủ về cấu trúc CSDL và các ràng buộc Định nghĩa này được lưu trong từ điển hệ thống, nó chứa các thông tin như là cấu trúc của mỗi tệp, kiểu và dạng lưu trữ của từng mục dữ liệu
- Sự độc lập giữa chương trình và dữ liệu: Trong hệ thống tệp, cấu trúc của các tệp CSDL được nhúng vào trong các chương trình truy cập, vì vậy bất kỳ một thay đổi nào
về cấu trúc của một tệp cũng đòi hỏi phải thay đổi tất cả các chương trình truy cập đến tệp đó Ngược lại, các chương trình truy cập của HQTCSDL không đòi hỏi việc thay thế như thế Cấu trúc của tệp dữ liệu được lưu trữ trong từ điển tách rời với các chương trình truy cập
- Hỗ trợ các khung nhìn dữ liệu nhiều thành phần: Một CSDL có nhiều ngưới sử dụng, mỗi người có thể đòi hỏi một phối cảnh hoặc một khung hình khác nhau Một khung
Trang 8hình có thể là một tập con của CSDL hoặc nó có thể chứa các dữ liệu ảo, đó là các dữ liệu được trích ra từ các tệp CSDL khác nhau nhưng không được lưu trữ một cách rõ ràng Một HQTCSDL nhiều người sử dụng phải cung cấp nhiều công cụ định nghĩa các khung nhìn nhiều thành phần.
- Chia sẻ dữ liệu và nhiều người sử dụng: Một HQTCSDL nhiều người dùng sử dụng phải cho phép nhiều người sử dụng truy cập đồng thời đến CSDL HQTCSDL phải có phần mềm kiểm tra cạnh tranh để đảm bảo rằng các người sử dụng cập nhật đến cùng một CSDL phải được thực hiện theo cách được kiểm tra để cho kết quả của các cập nhật là đúng đắn
1.2 KIẾN TRÚC HỆ QUẢN TRỊ CSDL
1.2.1 Cách nhìn CSDL
Tính hiệu quả của hệ thống đòi hỏi phải thiết kế các cấu trúc dữ liệu phức tạp để biểu diễn
dữ liệu trong cơ sở dữ liệu Các nhà phát triển che dấu sự phức tạp này thông qua các mức trừu tượng nhằm đơn giản sự trao đổi của người sử dụng với hệ thống:
Hình 1.1 Khung nhìn cơ sở dữ liệu
Mức vật lý (Physical level): Mức thấp nhất của sự trừu tượng, mô tả dữ liệu hiện được
lưu trữ thế nào Ở mức này, cấu trúc dữ liệu mức thấp, phức tạp được mô tả chi tiết
Mức logic (Logical level): Mức kế cao hơn về sự trừu tượng, mô tả dữ liệu gì được lưu
trữ trong CSDL và các mối quan hệ gì giữa các dữ liệu này Mức logic của sự trừu tượng được dùng bởi các người quản trị CSDL
Mức view (View level): Mức cao nhất của sự trừu tượng, mô tả chỉ một phần của CSDL
toàn thể Một người sử dụng HCSDL liên quan đến chỉ một bộ phận của CSDL Như vậy sự trao đổi của họ với hệ thống được làm đơn giản bởi việc định nghĩa view Hệ thống có thể cung cấp nhiều mức view đối với cùng một CSDL
Mức view
Mức luận lý
Mức vật lý
Trang 9Thể hiện và sơ đồ (Instances and schemas): Tập hợp các thông tin được lưu trữ trong CSDL tại một thời điểm được gọi là một thể hiện (instance) của CSDL Thiết kế tổng thể của CSDL được gọi là sơ đồ (schema) Các HCSDL có một vài sơ đồ, được phân tương ứng với các mức trừu tượng.Ở mức thấp nhất là sơ đồ vật lý (physical schema), ở mức trung gian là
sơ đồ logic (logical schema), ở mức cao nhất là sơ đồ con (subschema) Nói chung một
HCSDL hỗ trợ một sơ đồ vật lý, một sơ đồ logic và một vài sơ đồ con
Khả năng sửa đổi một định nghĩa ở một mức không ảnh hưởng một định nghĩa sơ đồ ở mức cao hơn được gọi là sự độc lập dữ liệu Có hai mức độc lập dữ liệu:
- Độc lập dữ liệu vật lý (Physical data independence) là khả năng sửa đổi sơ đồ vật
lý không làm cho các chương trình ứng dụng phải viết lại Các sửa đổi ở mức vật
lý là cần thiết để cải thiện hiệu năng
- Độc lập dữ liệu logic (Logical data independence) là khả năng sửa đổi sơ đồ logic
không làm cho các chương trình ứng dụng phải viết lại Các sửa đổi ở mức logic là cần thiết khi cấu trúc logic của CSDL bị thay thế
1.2.2 Mô hình dữ liệu
Nằm dưới cấu trúc của một CSDL là mô hình dữ liệu: một bộ các công cụ quan niệm để
mô tả dữ liệu, quan hệ dữ liệu, ngữ nghĩa dữ liệu và các ràng buộc nhất quán Có ba nhóm mô
hình: Các mô hình logic dựa trên đối tượng (Object-based logical models), các mô hình logic dựa trên mẩu tin (Record-based logical models), các mô hình vật lý (Physical models).
Các mô hình logic dựa trên đối tượng được dùng mô tả dữ liệu ở mức logic và mức view Chúng được đặc trưng bởi việc chúng cung cấp khả năng cấu trúc linh hoạt và cho phép các ràng buộc dữ liệu được xác định một cách tường minh Dưới đây là một vài mô hình được biết rộng rãi: Mô hình thực thể - quan hệ (entity-relationship model), mô hình hướng đối tượng (object-oriented model), mô hình dữ liệu ngữ nghĩa (semantic data model), mô hình dữ liệu hàm (function data model)
Các mô hình logic dựa trên mẩu tin được dùng để miêu tả dữ liệu ở mức logic hay mức view Chúng được dùng để xác định cấu trúc logic toàn thể của CSDL và cung cấp sự mô tả mức cao hơn việc thực hiện CSDL được cấu trúc ở dạng mẩu tin định dạng cố định (fixed format record): mỗi mẩu tin xác định một số cố định các trường, mỗi trường thường có độ dài
cố định Một vài mô hình được biết rộng rãi là: Mô hình quan hệ, mô hình mạng, mô hình phân cấp
Mô hình dữ liệu vật lý được dùng để mô tả dữ liệu ở mức thấp nhất Hai mô hình dữ liệu vật lý được biết rộng rãi nhất là mô hình hợp nhất (unifying model) và mô hình khung - bộ nhớ (frame-memory model)
1.2.3 Ngôn ngữ CSDL
Trang 10Một HCSDL cung cấp hai kiểu ngôn ngữ khác nhau: một để xác định sơ đồ CSDL, một để biểu diễn các vấn tin CSDL và cập nhật.
Ngôn ngữ định nghĩa dữ liệu (Data Definition Language): Dữ liệu cho phép xác định sơ
đồ CSDL Kết quả biên dịch các lệnh của dữ liệu là tập hợp các bảng được lưu trữ trong một
file đặc biệt được gọi tự điển dữ liệu (data dictionary) hay thư mục dữ liệu (data directory)
Tự điển dữ liệu là một file chứa metadata File này được tra cứu trước khi dữ liệu hiện hành được đọc hay sửa đổi Cấu trúc lưu trữ và phương pháp truy cập được sử dụng bởi HCSDL được xác định bởi một tập hợp các định nghĩa trong một kiểu đặc biệt của dữ liệu được gọi
là ngôn ngữ định nghĩa và lưu trữ dữ liệu (data storage and definition language) Kết quả
biên dịch của các định nghĩa này là một tập hợp các chỉ thị xác định sự thực hiện chi tiết của các sơ đồ CSDL (thường được che dấu)
Ngôn ngữ thao tác dữ liệu (Data manipulation language: DML) là ngôn ngữ cho phép
người sử dụng truy xuất hoặc thao tác dữ liệu Có hai kiểu ngôn ngữ thao tác dữ liệu: DML
thủ tục (procedural DML) yêu cầu người sử dụng đặc tả dữ liệu nào cần và làm thế nào để nhận được nó và DML không thủ tục (Nonprocedural DML) yêu cầu người sử dụng đặc tả dữ liệu nào cần nhưng không cần đặc tả làm thế nào để nhận được nó Một vấn tin (query) là một lệnh yêu cầu tìm lại dữ liệu (information retrieval) Phần ngôn ngữ DML liên quan đến sự tìm lại thông tin được gọi là ngôn ngữ vấn tin (query language)
1.2.4 Quản trị giao dịch
Thông thường, một số thao tác trên CSDL tạo thành một đơn vị logic công việc Ta hãy xét ví dụ chuyển khoản, trong đó một số tiền x được chuyển từ tài khoản A (A:=A-x) sang một tài khoản B (B:=B+x) Một yếu tố cần thiết là cả hai thao tác này hoặc cùng xảy ra hoặc không hoạt động nào xảy ra cả Việc chuyển khoản phải xảy ra trong tính toàn thể của nó
hoặc không Đòi hỏi toàn thể - hoặc - không này được gọi là tính nguyên tử (atomicity) Một
yếu tố cần thiết khác là sự thực hiện việc chuyển khoản bảo tồn tính nhất quán của CSDL: giá trị của tổng A + B phải được bảo tồn Đòi hỏi về tính chính xác này được gọi là tính nhất
quán (consistency) Cuối cùng, sau khi thực hiện thành công hoạt động chuyển khoản, các giá
trị của account A và B phải bền vững cho dù có thể có sự cố của hệ thống Đòi hỏi về tính bền
vững này được gọi là tính lâu bền (Durability)
Một giao dịch là một tập các hoạt động thực hiện chỉ một chức năng logic trong một ứng dụng CSDL Mỗi giao dịch là một đơn vị mang cả tính nguyên tử lẫn tính nhất quán Như vậy, các giao dịch phải không được vi phạm bất kỳ ràng buộc nhất quán nào Nếu CSDL là nhất quán khi một giao dịch khởi động thì nó cũng phải là nhất quán khi giao dịch kết thúc thành công Tuy nhiên, trong khi đang thực hiện giao dịch, phải cho phép sự không nhất quán tạm thời Sự không nhất quán tạm thời này tuy là cần thiết nhưng lại có thể dẫn đến các khó khăn nếu xảy ra sự cố
Trang 11Trách nhiệm của người lập trình là xác định đúng đắn các giao dịch sao cho mỗi một bảo tồn tính nhất quán của CSDL.
Đảm bảo tính nguyên tử và tính lâu bền là trách nhiệm của HCSDL nói chung và của
thành phần quản lý giao dịch (Transaction - management component) nói riêng Nếu không
có sự cố, tất cả giao dịch hoàn tất thành công và tính nguyên tử được hoàn thành dễ dàng Tuy nhiên, do các sự cố, một giao dịch có thể không hoàn tất thành công sự thực hiện của nó Nếu tính nguyên tử được đảm bảo, một giao dịch thất bại không gây hiệu quả đến trạng thái của CSDL Như vậy, CSDL phải được hoàn lại trạng thái của nó trước khi giao dịch bắt đầu Hệ CSDL phải có trách nhiệm phát hiện sự cố hệ thống và trả lại CSDL về trạng thái trước khi xảy ra sự cố
Khi một số giao dịch cạnh tranh cập nhật CSDL, tính nhất quán của dữ liệu có thể không được bảo tồn, ngay cả khi mỗi giao dịch là chính xác Bộ điều khiển cạnh tranh
(concurency-control manager) có trách nhiệm điều khiển các trao đổi giữa các giao dịch cạnh
tranh để đảm bảo tính thống nhất của CSDL
1.2.5 Quản trị lưu trữ
Các CSDL đòi hỏi một khối lượng lớn không gian lưu trữ, có thể lên đến nhiều Terabytes (1Terabyte = 103Gigabytes = 106Megabytes) Các thông tin phải được lưu trữ trên lưu trữ ngoài (đĩa) Dữ liệu được di chuyển giữa lưu trữ đĩa và bộ nhớ chính khi cần thiết Do việc di chuyển dữ liệu từ và vào đĩa tương đối chậm so với tốc độ của đơn vị xử lý trung tâm, điều này ép buộc hệ CSDL phải cấu trúc dữ liệu sao cho tối ưu nhu cầu di chuyển dữ liệu giữa đĩa
và bộ nhớ chính
Bộ quản trị lưu trữ (storage manager) là một module chương trình cung cấp giao diện
giữa dữ liệu mức thấp được lưu trữ trong CSDL với các chương trình ứng dụng và các câu vấn tin được đệ trình cho hệ thống Bộ quản trị lưu trữ có trách nhiệm trao đổi với bộ quản trị
file (file manager) Dữ liệu thô được lưu trữ trên đĩa sử dụng hệ thống file (file system), hệ
thống này thường được cung cấp bởi hệ điều hành Bộ quản trị lưu trữ dịch các câu lệnh DML thành các lệnh của hệ thống file mức thấp Như vậy bộ quản trị lưu trữ có nhiệm vụ lưu trữ, tìm lại và cập nhật dữ liệu trong CSDL
1.2.6 Người quản trị cơ sở dữ liệu
Một trong các lý do chính đối với việc sử dụng DBMS là có sự điều khiển trung tâm cho
cả dữ liệu lẫn các chương trình truy cập các dữ liệu này Người điều khiển trung tâm trên toàn
hệ thống như vậy gọi là nhà quản trị cơ sở dữ liệu (DataBase Administrator - DBA)
Các chức năng của DBA như sau:
Trang 12- Định nghĩa sơ đồ: DBA tạo ra sơ đồ CSDL gốc bằng cách viết một tập các định nghĩa
mà nó sẽ được dịch bởi trình biên dịch dữ liệu thành một tập các bảng được lưu trữ thường trực trong tự điển dữ liệu
- Định nghĩa cấu trúc lưu trữ và phương pháp truy xuất: DBA tạo ra một cấu trúc lưu trữ thích hợp và các phương pháp truy xuất bằng cách viết một tập hợp các định nghĩa mà nó sẽ được dịch bởi trình biên dịch lưu trữ dữ liệu và ngôn ngữ định nghĩa dữ liệu Sửa đổi sơ đồ và tổ chức vật lý
- Cấp quyền truy xuất dữ liệu: Việc cấp các dạng quyền truy cập khác nhau cho phép DBA điều hoà những phần của CSDL mà nhiều người có thể truy xuất Thông tin về quyền được lưu giữ trong một cấu trúc hệ thống đặc biệt mà nó được tham khảo bởi
hệ CSDL mỗi khi có sự truy xuất dữ liệu của hệ thống
- Đặc tả ràng buộc toàn vẹn (integrity-contraint): Các giá trị dữ liệu được lưu trữ trong
CSDL phải thoả mãn một số các ràng buộc nhất quán nhất định Ví dụ số giờ làm việc của một nhân viên trong một tuần không thể vượt quá một giới hạn 80 giờ chẳng hạn Một ràng buộc như vậy phải được đặc tả một cách tường minh bởi DBA Các ràng buộc toàn vẹn được lưu giữ trong một cấu trúc hệ thống đặc biệt được tham khảo bởi
hệ CSDL mỗi khi có sự cập nhật dữ liệu
1.2.7 Người sử dụng cơ sở dữ liệu
Mục đích đầu tiên của hệ CSDL là cung cấp một môi trường để tìm lại thông tin và lưu thông tin trong CSDL Các người sử dụng CSDL được phân thành bốn nhóm tuỳ theo cách thức họ trao đổi với hệ thống
- Các người lập trình ứng dụng: là nhà chuyên môn máy tính người trao đổi với hệ thống thông qua các lời gọi DML được nhúng trong một chương trình được viết trong một
ngôn ngữ chủ - host language (Pascal, C, Cobol ) Các chương trình này thường
được tham khảo như các chương trình ứng dụng Vì cú pháp DML thường rất khác với
cú pháp của ngôn ngữ chủ, các lời gọi DML thường được bắt đầu bởi một ký tự đặc biệt như vậy mã thích hợp mới có thể được sinh Một bộ tiền xử lý đặc biệt, được gọi
là tiền biên dịch (precompiler) DML, chuyển các lệnh DML thành các lời gọi thủ tục
chuẩn trong ngôn ngữ chủ Bộ biên dịch ngôn ngữ chủ sẽ sinh mã đối tượng thích hợp
Có những ngôn ngữ lập trình phối hợp cấu trúc điều khiển của các ngôn ngữ giống như Pascal với cấu trúc điều khiển để thao tác đối tượng CSDL Các ngôn ngữ này (đôi khi được gọi là ngôn ngữ thế hệ thứ tư) thường bao gồm các đặc điểm đặc biệt để làm dễ dàng việc sinh các dạng và hiển thị dữ liệu trên màn hình
- Các người sử dụng thành thạo (Sophisticated users): Trao đổi với hệ thống không qua
viết trình Thay vào đó họ đặt ra các yêu cầu của họ trong ngôn ngữ truy vấn CSDL
Trang 13(Database query language) Mỗi câu vấn tin như vậy được đệ trình cho bộ xử lý vấn
tin, chức năng của bộ xử lý vấn tin là "dịch" các lệnh DML thành các chỉ thị mà bộ quản trị lưu trữ hiểu Các nhà phân tích đệ trình các câu vấn tin thăm dò dữ liệu trong CSDL thuộc vào phạm trù này
- Các người sử dụng chuyên biệt (Specialized users): Là các người sử dụng thành thạo,
họ viết các ứng dụng CSDL chuyên biệt không nằm trong khung xử lý dữ liệu truyền thống Trong đó, phải kể đến các hệ thống thiết kế được trợ giúp bởi máy tính
(computer-aided design systems), cơ sở tri thức (knowledge-base) là hệ chuyên gia (expert systems), các hệ thống lưu trữ dữ liệu với kiểu dữ liệu phức tạp (dữ liệu đồ hoạ, hình ảnh, âm thanh) và các hệ thống mô hình môi trường (environment-modeling systems).
- Các người sử dụng ngây thơ (Naive users): là các người sử dụng không thành thạo, họ
trao đổi với hệ thống bởi cầu dẫn một trong các chương trình ứng dụng thường trực đã được viết sẵn
1.2.8 Cấu trúc hệ thống tổng thể
Một hệ CSDL được phân thành các module, mỗi một thực hiện một trách nhiệm trong hệ thống tổng thể Một số chức năng của HCSDL có thể được cung cấp bởi hệ điều hành Trong hầu hết các trường hợp, hệ điều hành chỉ cung cấp các dịch vụ cơ sở nhất, HCSDL phải xây dựng trên cơ sở đó Như vậy, thiết kế HCSDL phải xem xét đến giao diện giữa HCSDL và hệ điều hành
Các thành phần chức năng của HCSDL có thể được chia thành các thành phần xử lý vấn
tin (query processor components) và các thành phần quản trị lưu trữ (storage manager components)
Các thành phần xử lý vấn tin gồm:
- Trình biên dịch DML (DML compiler): dịch các lệnh DML trong một ngôn ngữ vấn tin thành các chỉ thị mức thấp mà engine định giá vấn tin (query evaluation engine) có thể hiểu Hơn nữa, trình biên dịch DML phải biến đổi một yêu cầu của
người sử dụng thành một đích tương đương nhưng ở dạng hiệu quả hơn có nghĩa là tìm một chiến lược tốt để thực hiện câu vấn tin
- Trình tiền biên dịch DML nhúng (Embedded DML Precompiler): biến đổi các lệnh
DML được nhúng trong một chương trình ứng dụng thành các lời gọi thủ tục chuẩn trong ngôn ngữ chủ Trình tiền biên dịch phải trao đổi với trình biên dịch DML để sinh mã thích hợp
- Bộ thông dịch dữ liệu (data interpreter): thông dịch các lệnh dữ liệu và ghi chúng
vào một tập hợp các bảng chứa metadata
Trang 14- Engine định giá vấn tin (Query evaluation engine): Thực hiện các chỉ thị mức thấp
được sinh ra bởi trình biên dịch DML
Hình 1.2 Kiến trúc của hệ cơ sở dữ liệu
Các thành phần quản trị lưu trữ cung cấp các giao diện giữa dữ liệu mức thấp được lưu trữ trong CSDL và các chương trình ứng dụng, các vấn tin được đệ trình cho hệ thống Các thành phần quản trị lưu trữ gồm:
Naive users Application programmers Sophisticcated user Database adminstrabr
Application
interfaces
Application programmers
scheme
Embedded DML precompiler
Query evaluation engine
DML compiler
DDL Interpreter
Transaction manager
File manager
Buffer manager
Authorization and integrity manager
Trang 15- Bộ quản trị quyền và tính toàn vẹn (Authorization and integrity manager): kiểm tra
sự thoả mãn các ràng buộc toàn vẹn và kiểm tra quyền truy xuất dữ liệu của người
sử dụng
- Bộ quản trị giao dịch (Transaction manager): Đảm bảo rằng CSDL được duy trì
trong trạng thái nhất quán cho dù hệ thống có sự cố và đảm bảo rằng các thực hiện giao dịch cạnh tranh tiến triển không xung đột
- Bộ quản trị file (File manager): Quản trị cấp phát không gian trên lưu trữ đĩa và
các cấu trúc dữ liệu được dùng để biểu diễn thông tin được lưu trữ trên đĩa
- Bộ quản trị bộ đệm (Buffer manager): có trách nhiệm đem dữ liệu từ lưu trữ đĩa
vào bộ nhớ chính và quyết định dữ liệu nào trữ trong bộ nhớ
Hơn nữa, một số cấu trúc dữ liệu cần đến như phần của thực hiện hệ thống vật lý:
- Các file dữ liệu: Lưu trữ CSDL
- Tự điển dữ liệu (Data Dictionary): lưu metadata về cấu trúc CSDL.
- Chỉ mục (Indices): cung cấp truy xuất nhanh đến các hạng mục dữ liệu chứa các
giá trị riêng
- Dữ liệu thống kê (Statistical data): lưu trữ thông tin thống kê về dữ liệu trong cơ sở
dữ liệu Thông tin này được dùng bởi bộ xử lý vấn tin để chọn những phương pháp hiệu quả thực hiện câu vấn tin
1.2.9 Kiến trúc hệ cơ sở dữ liệu
Kiến trúc HCSDL bị ảnh hưởng nhiều bởi hệ thống máy nền Các sắc thái của kiến trúc máy như mạng, song song và phân tán được phản ánh trong kiến trúc của HCSDL
- Mạng máy tính cho phép thực hiện một số công việc trên một hệ thống các server, một số công việc trên các hệ thống client Việc phân chia công việc này dẫn đến sự phát triển HCSDL client-server
- Xử lý song song trong một hệ thống máy tính làm tăng tốc độ các hoạt động của HCSDL, trả lời các giao dịch nhanh hơn Các vấn tin được xử lý theo cách khai thác tính song song Sự cần thiết xử lý vấn tin song song này dẫn tới sự phát triển của HCSDL song song
- Dữ liệu phân tán trên các site hoặc trên các phần trong một cơ quan cho phép các
dữ liệu thường trú tại nơi chúng được sinh ra nhưng vẫn có thể truy xuất chúng từ các site khác hay các phần khác Việc lưu nhiều bản sao của CSDL trên các site khác nhau cho phép các tổ chức lớn vẫn có thể tiếp tục hoạt động khi một hay một
Trang 16vài site bị sự cố HCSDL phân tán được phát triển để quản lý dữ liệu phân tán, trên phương diện địa lý hay quản trị, trải rộng trên nhiều HCSDL
Hệ thống tập trung: Các HCSDL tập trung chạy trên máy đơn và không trao đổi với các
máy khác Các hệ thống như vậy trải từ các HCSDL một người sử dụng chạy trên các máy cá
nhân (PC: Personal Computer) đến các HCSDL hiệu năng cao chạỵ trên các hệ mainframe
Một hệ máy tính mục đích chung hiện đại gồm một hoặc một vài CPU và một số bộ điều khiển thiết bị được nối với nhau thông qua một bus chung, cho phép truy xuất đến bộ nhớ chia sẻ CPU có bộ nhớ cache cục bộ lưu các bản sao của một số phần của bộ nhớ chính nhằm tăng tốc độ truy xuất dữ liệu Mỗi bộ điều khiển thiết bị phụ trách một kiểu thiết bị xác định Các CPU và các bộ điều khiển thiết bị có thể thực hiện đồng thời, canh tranh truy cập bộ nhớ
Bộ nhớ cache giúp làm giảm sự tranh chấp truy xuất bộ nhớ Ta phân biệt hai cách các máy tính được sử dụng: Hệ thống một người dùng và hệ thống nhiều người dùng HCSDL được thiết kế cho hệ thống một người dùng không hỗ trợ các điều khiển đồng thời, chức năng phục hồi hoặc là thiếu hoặc chỉ là một sự chép dự phòng đơn giản
Hệ thống Client-Server: Các máy tính cá nhân (PC) ngày càng trở nên mạnh hơn,
nhanh hơn, và rẻ hơn Có sự chuyển dịch trong hệ thống tập trung Các đầu cuối (terminal)
được nối với hệ thống tập trung bây giờ được thế chỗ bởi các máy tính cá nhân Chức năng
giao diện người dùng (user interface) thường được quản lý trực tiếp bởi các hệ thống tập
trung nay được quản lý bởi các máy tính cá nhân Như vậy, các hệ thống tập trung ngày nay hoạt động như các hệ thống server nó làm thoả mãn các đòi hỏi của các client Chức năng
CSDL có thể được chia thành hai phần: phần trước (front-end) và phần sau (back-end) Phần
sau quản trị truy xuất cấu trúc, định giá câu vấn tin và tối ưu hoá, điều khiển sự xảy ra đồng
thời và phục hồi Phần trước của hệ CSDL gồm các công cụ như: các mẫu (form), các bộ soạn báo cáo (report writer), giao diện đồ hoạ người dùng (graphical user interface) Giao
diện giữa phần trước và phần sau thông qua SQL hoặc một chương trình ứng dụng Các hệ
thống server có thể được phân thành các phạm trù: server giao dịch (transaction server), server dữ liệu (data server).
Hình 1.3 Hệ thống Client-Server
- Hệ thống server giao dịch (transaction-server systems): còn được gọi là hệ thống
server vấn tin (query-server system), cung cấp một giao diện mà các client có thể gửi đến nó
các yêu cầu thực hiện một hành động Để đáp ứng các yêu cầu, hệ thống thực hiện các hành động và gửi lại client các kết quả Các người sử dụng có thể đặc tả các yêu cầu trong SQL
Trang 17hoặc trong một giao diện trình ứng dụng sử dụng một cơ chế gọi thủ tục xa procedure-call).
(remote-Các servers giao dịch (Transaction servers): Trong các hệ thống tập trung, phần trước
(front-end) và phần sau (back-end) được thực hiện trong một hệ thống Kiến trúc server giao
dịch cho phép chia chức năng giữa phần trước và phần sau Chức năng phần trước được hỗ
trợ trên các máy tính cá nhân (PC) Các PC hành động như những khách hàng của các hệ
thống server nơi lưu trữ một khối lượng lớn dữ liệu và hỗ trợ các chức năng phần sau Các clients gửi các giao dịch đến các hệ thống server tại đó các giao dịch được thực hiện và các kết quả được gửi trả lại cho các clients, người giữ trách nhiệm hiển thị dữ liệu
ODBC (Open DataBase Connectivity) được phát triển để tạo giao diện giữa các clients và
các servers ODBC là một giao diện trình ứng dụng cho phép các clients sinh ra các lệnh SQL
và gửi đến một server tại đó lệnh được thực hiện Bất kỳ client nào sử dụng giao diện có thể nối với bất kỳ một server nào cung cấp giao diện này
Các giao diện client-server khác ODBC cũng được sử dụng trong trong một số hệ thống
xử lý giao dịch Chúng được xác định bởi một giao diện lập trình ứng dụng, sử dụng nó các
clients tạo ra các lời gọi thủ tục giao dịch từ xa (transactional remote procedure calls) trên
server Các lời gọi này giống như các lời gọi thủ tục gốc đối với người lập trình nhưng tất cả các lời gọi thủ tục từ xa của một client được bao trong một giao dịch ở server cuối Như vậy nếu giao dịch bỏ dở, server có thể huỷ bỏ hiệu quả của các lời gọi thủ tục xa riêng lẻ
- Hệ thống server dữ liệu ( Data-server systems ): cho phép các clients trao đổi với các
server bằng cách tạo ra các yêu cầu đọc hoặc cập nhật dữ liệu trong các đơn vị như file hoặc trang Ví dụ, các file - servers cung cấp một giao diện với hệ thống file tại đó các clients có thể tạo, cập nhật, đọc hoặc xoá files Các servers dữ liệu của CSDL cung cấp nhiều chức năng
hơn, chúng hỗ trợ các đơn vị dữ liệu nhỏ hơn file như trang, bộ (tuple) hoặc đối tượng Chúng cũng cung cấp phương tiện dễ dàng để lấy chỉ mục (indexing) dữ liệu, phương tiện dễ dàng
để tạo giao dịch
Các server dữ liệu (Data Servers): Các hệ thống server dữ liệu được sử dụng trong các
mạng cục bộ, trong đó có một nối kết tốc độ cao giữa các máy clients và máy server, các máy clients có sức mạnh xử lý tương thích với máy server và các công việc phải được thực hiện là tăng cường tính toán Trong một môi trường như vậy, có thể gửi dữ liệu đến các máy client để thực hiện tất cả các xử lý tại máy clients sau đó gửi dữ liệu trở lại đến máy server Kiến trúc này đòi hỏi các tính năng back-end đầy đủ tại các clients Kiến trúc server dữ liệu thường
được gặp trong các HCSDL hướng đối tượng (Object-Oriented DataBase Systems)
Gửi trang đối lại với gửi hạng mục (Page shipping versus item shipping): Đơn vị liên lạc
dữ liệu có thể là các "hạt thô" (Coarse granularity) như một trang, hay hạt min (fine
Trang 18granularity) như một bộ (tuple)/ đối tượng (object) Ta dùng thuật ngữ hạng mục để chỉ bộ
hay đối tượng Nếu đơn vị liên lạc là một hạng mục sẽ dẫn đến tổng chi phí truyền thông điệp
tăng Đem về hạng mục (fetching item) trước khi nó được yêu cầu, được gọi là đem về trước (Prefetching) Gửi trang có thể được xem như một dạng của đem về trước nếu một trang chứa
nhiều hạng mục
Chốt (Locking): Các chốt thường được cấp bởi server trên các hạng mục mà nó gửi cho
các máy clients Khi client giữ một chốt trên một hạng mục dữ liệu nó có quyền “sử dụng” hạng mục dữ liệu này, hơn nữa trong khoảng thời gian client giữ chốt trên hạng mục dữ liệu không một client nào khác có thể sử dụng hạng mục dữ liệu này Bất lợi của gửi trang là các máy client có thể được cấp các chốt "hạt quá thô" một chốt trên một trang ẩn chứa các chốt
trên tất cả các hạng mục trong trang Các kỹ thuật nhằm tiết giảm chốt (lock deescalation)
được đề nghị, trong đó server có thể yêu cầu các clients truyền trả lại các chốt trên các hạng mục cấp phát trước Nếu máy client không cần hạng mục cấp phát trước, nó có thể truyền trả lại các chốt trên hạng mục cho server và các chốt này có thể được cấp phát cho các clients khác
Trữ dữ liệu (Data caching): Dữ liệu được gửi đến một client với danh nghĩa một giao
dịch có thể được trữ ở client, ngay cả khi giao dịch đã hoàn tất, nếu không gian lưu trữ có sẵn Các giao dịch liên tiếp tại cùng một client có thể dùng dữ liệu được trữ Tuy nhiên, sự kết dính dữ liệu là một vấn đề cần phải được xem xét: một giao dịch tìm thấy dữ liệu được trữ, nó phải chắc chắn rằng dữ liệu này là "mới nhất" vì các dữ liệu này có thể được cập nhật bởi một client khác sau khi chúng được trữ Như vậy, vẫn phải trao đổi với server để kiểm tra tính hợp lệ của dữ liệu và để giành được một chốt trên dữ liệu
Trữ chốt (Lock caching): Các chốt cũng có thể được trữ lại tại máy client Nếu một hạng
mục dữ liệu được tìm thấy trong cache và chốt yêu cầu cho một truy xuất đến hạng mục dữ liệu này cũng tìm thấy trong cache, thì việc truy xuất có thể tiến hành không cần một liên lạc nào với server Tuy nhiên, server cũng phải lưu lại vết của các chốt được trữ Nếu một client đòi hỏi một chốt từ server, server phải gọi lại tất cả các chốt xung đột trên cùng hạng mục dữ liệu từ tất cả các máy clients đã trữ các chốt
Hình 1.4: Hệ thống server dữ liệu
Trang 19- Các hệ song song (Parallel Systems): Các hệ song song cải tiến tốc độ xử lý và tốc độ
I/O bằng cách sử dụng nhiều CPU và nhiều đĩa song song Trong xử lý song song, nhiều
hoạt động được thực hiện đồng thời Một máy song song "hạt thô" (coarse-grain) gồm một
số nhỏ các bộ xử lý mạnh Một máy song song đồ sộ (massivly parallel) hay "hạt mịn" (fine-grain) sử dụng hàng ngàn bộ xử lý nhỏ hơn Có hai biện pháp chính để đánh giá hiệu năng của một hệ CSDL Thứ nhất là năng lực truyền qua (throughput): số công việc có thể được hoàn tất trong một khoảng thời gian đã cho Thứ hai là thời gian đáp ứng (response time): lượng thời gian cần thiết để hoàn thành một công việc từ lúc nó được đệ trình Một hệ
thống xử lý một lượng lớn các giao dịch nhỏ có thể cải tiến năng lực truyền qua bởi xử lý song song nhiều giao dịch Một hệ thống xử lý các giao dịch lớn có thể cải tiến thời gian đáp
ứng cũng như năng lực truyền qua bởi thực hiện song song các công việc con (subtask) của
mỗi giao dịch
- Tăng tốc độ và tăng quy mô ( Speedup & Scaleup ): Tăng tốc độ ám chỉ việc chạy một
công việc đã cho trong thời gian ngắn hơn bằng cách tăng bậc song song Tăng quy mô ám chỉ việc quản lý các công việc lớn bằng cách tăng bậc song song Chúng ta hãy xét một ứng dụng CSDL chạy trên một hệ thống song song với một số processor và một số đĩa Giả sử, chúng ta tăng kích cỡ của hệ thống bằng cách tăng số processor, đĩa, và các thành phần khác của hệ thống Mục đích là xử lý công việc trong thời gian tỷ lệ nghịch với số processor và đĩa được cấp phát
Giả sử, thời gian thực hiện một công việc trên một máy tính lớn là TL, thời gian thực hiện cùng công việc này trên máy tính nhỏ là TS Tăng tốc độ nhờ song song được định nghĩa là tỷ
số TS/TL, hệ thống song song được gọi là tăng tốc độ tuyến tính nếu tốc độ tăng là N khi hệ thống lớn có N lần tài nguyên (CPU, đĩa ) lớn hơn hệ thống nhỏ Nếu tốc độ tăng nhỏ
hơn N, hệ thống được gọi là tăng tốc độ hạ tuyến tính (sublinear)
Tăng quy mô liên quan đến khả năng xử lý các công việc lớn trong trong cùng một lượng thời gian bằng cách cung cấp thêm tài nguyên Giả sử, Q là một công việc, QN là một công việc N lần lớn hơn Q Giả sử thời gian thực hiện công việc Q trên một máy MS là TS và thời gian thực hiện công việc QN trên một máy song song ML N lần lớn hơn MS là TL Tăng quy
mô được định nghĩa là TS/TL Hệ song song ML được gọi là tăng quy mô tuyến tính trên công việc Q nếu TS = TL Nếu TL > TS, hệ thống được gọi là tăng quy mô hạ tuyến tính
Tăng quy mô là một độ đo (metric) quan trọng hơn trong đo lường hiệu quả của các hệ
CSDL song song Đích của song song trong các hệ CSDL là đảm bảo hệ CSDL có thể tiếp tục thực hiện ở một tốc độ chấp nhận được, ngay cả khi kích cỡ của CSDL và số giao dịch tăng lên Tăng khả năng của hệ thống bằng cách tăng sự song song cung cấp một con đường thuận tiện hơn cho sự phát triển hơn là thay thế một hệ tập trung bởi một máy nhanh hơn Một số
Trang 20nhân tố ảnh hưởng xấu đến tính hiệu quả của hoạt động song song và có thể làm giảm cả tăng tốc độ và tăng quy mô là:
- Chi phí khởi động (Startup Costs): Có một chi phí khởi động kết hợp với sự khởi động
một xử lý Trong một hoạt động song song gồm hàng ngàn xử lý, thời gian khởi động
(Startup time) có thể làm lu mờ thời gian xử lý hiện tại, ảnh hưởng bất lợi tới tăng tốc độ.
- Sự giao thoa (Interference): Các xử lý thực hiện trong một hệ song song thường truy
nhập đến các tài nguyên chia sẻ, một sự giao thoa của mỗi xử lý mới khi nó cạnh tranh với các xử lý đang tồn tại trên các tài nguyên bị chiếm như bus hệ thống, đĩa chia sẻ, thậm chí cả đồng hồ Hiện tượng này ảnh hướng đến cả tăng tốc độ lẫn tăng quy mô
- Sự lệch (Skew): Bằng cách chia một công việc thành các bước song song, ta làm giảm
kích cỡ của bước trung bình Tuy nhiên, thời gian phục vụ cho bước chậm nhất sẽ xác định thời gian phục vụ cho toàn bộ công việc Thường khó có thể chia một công việc thành các phần cùng kích cỡ, như vậy cách mà kích cỡ được phân phối là bị lệch Ví dụ: một công việc
có kích cỡ 100 được chia thành 10 phần và sự phân chia này bị lệch, có thể có một số phần có kích cỡ nhỏ hơn 10 và một số nhiệm vụ có kích cỡ lớn hơn 10, giả sử trong đó có phần kích
cỡ 20, độ tăng tốc nhận được bởi chạy các công việc song song chỉ là 5, thay vì 10
- Các mạng hợp nhất (Interconnection Network): Các hệ thống song song gồm một tập
hợp các thành phần (Processors, memory và các đĩa) có thể liên lạc với nhau thông qua một
mạng hợp nhất Các ví dụ về các mạng hợp nhất là:
- Bus: Toàn bộ các thành phần hệ thống có thể gửi và nhận dữ liệu qua một bus liên lạc
Các kiến trúc bus làm việc tốt với một số nhỏ các processor Tuy nhiên, chúng không có cùng quy mô khi tăng sự song song vì bus chỉ điều khiển liên lạc từ chỉ một thành phần tại một thời điểm
Hình 1.5: Kiến trúc Bus
- Lưới (Mesh): Các thành phần được sắp xếp như các nút của một lưới, mỗi thành phần
được nối với tất cả các thành phần kề với nó trong lưới Trong một lưới hai chiều mỗi nút được nối với 4 nút kề
- Siêu lập phương (Hypercube): Các thành phần được đánh số theo nhị phân, một thành
phần được nối với thành phần khác nếu biểu diễn nhị nhân số của chúng sai khác nhau đúng một bit Như vậy, mỗi một thành phần trong n thành phần được nối với log(n) thành phần khác Có thể kiểm nghiệm được rằng trong một sự hợp nhất siêu lập phương một thông điệp
Trang 21từ một thành phần đến một thành phần khác đi quá nhiều nhất log(n) nối kết, còn trong lưới là
Ġ
Hình 1.6: Mạng hợp nhật hình lưới và siêu lập phương
- Các kiến trúc cơ sở dữ liệu song song: Có một số kiến trúc cho các máy song song
Hình 1.7: Mô hình kiến trúc cho các máy song song
- Bộ nhớ chia sẻ (Shared memory): Tất cảc các processor chia sẻ một bộ nhớ chung
Trong mô hình này các processor và các đĩa truy xuất một bộ nhớ chung, thường thông qua một bus hoặc một mạng hợp nhất Thuận lợi của chia sẻ bộ nhớ là liên lạc giữa các processor
là cực kỳ hiệu quả: dữ liệu trong bộ nhớ chia sẻ có thể được truy xuất bởi bất kỳ processor nào mà không phải di chuyển bởi phần mềm Một processor có thể gửi thông điệp cho một processor khác bằng cách viết vào bộ nhớ chia sẻ, cách liên lạc này nhanh hơn nhiều so với các liên lạc khác Tuy nhiên, các máy bộ nhớ chia sẻ không thể hỗ trợ nhiều hơn 64 processor
vì nếu nhiều hơn, bus hoặc mạng hợp nhất sẽ trở nên dễ bị nghẽn (bottle-neck) Kiến trúc bộ
nhớ chia sẻ thường có những cache lớn cho mỗi processor, như vậy việc tham khảo bộ nhớ chia sẻ có thể tránh được mỗi khi có thể
Hình 1.8 Bộ nhớ chia sẻ
- Đĩa chia sẻ (Shared disk): Tất cả các processor chia sẻ đĩa chung Mô hình này còn
được gọi là cụm (cluster) Trong mô hình này tất cả các processor có thể truy xuất trực tiếp
đến tất cả các đĩa thông qua một mạng hợp nhất, nhưng mỗi processor có bộ nhớ riêng
Trang 22Hình 1.9 Mô hình đĩa chia sẻ
Kiến trúc này có các điểm thuận lợi là: thứ nhất, bus bộ nhớ không bị bottle-neck, thứ hai, cho một phương pháp rẻ để cung cấp một mức độ lượng thứ lỗi - một processor bị hỏng hóc, các processor khác có thể tiếp tục công việc của nó Ta có thể tạo ra hệ thống con các đĩa tự lượng thứ lỗi bằng cách sử dụng kiến trúc RAID (được trình bày sau này ) Vấn đề chính của chia sẻ đĩa là sự hợp nhất các hệ thống con các đĩa trở nên bottle-neck, đặc biệt trong tình huống CSDL truy xuất đĩa nhiều So sánh với bộ nhớ chia sẻ, chia sẻ đĩa có thể hỗ trợ một số lương processor lớn hơn, nhưng việc liên lạc giữa các processor chậm hơn
- Không chia sẻ (Shared nothing): Các processor không chia sẻ bộ nhớ chung, cũng
không chia sẻ đĩa chung Trong hệ thống này mỗi nút của máy có một processor, bộ nhớ và một vài đĩa
Hình 1.10 Mô hình không chia sẻ
Các processor ở mỗi nút có thể liên lạc với các processor khác qua mạng hợp nhất tốc độ cao Chức năng của một nút, như server, dữ liệu được chứa trên các đĩa của nó Mô hình không chia sẻ gì chỉ có vấn đề về việc truy xuất các đĩa không cục bộ và việc truyền các quan
hệ kết quả qua mạng Hơn nữa, đối với các hệ thống không chia sẻ gì, các mạng hợp nhất thường được thiết kế để có thể tăng quy mô, sao cho khả năng truyền của chúng tăng khi các nút mới được thêm vào
- Phân cấp (hierarchical): Mô hình này là một sự lai kiểu của các kiến trúc trước.
Kiến trúc này tổ hợp các đặc trưng của các kiến trúc chia sẻ bộ nhớ, chia sẻ đĩa và không chia sẻ gì ở mức cao nhất, hệ thống bao gồm những nút được nối bởi mạng hợp nhất và không chia sẻ đĩa cũng như bộ nhớ với nút khác Như vậy, mức cao nhất là kiến trúc không chia sẻ gì Mỗi nút của hệ thống có thể là hệ thống chia sẻ bộ nhớ với một vài processor Kế tiếp, mỗi nút có thể là một hệ thống chia sẻ đĩa Mỗi một hệ thống chia sẻ đĩa lại có thể là một hệ thống chia sẻ bộ nhớ Như vậy, hệ thống có thể được xây dựng như một sự phân cấp
Trang 23Hình 1.11 Mô hình phân cấp
Hệ thống phân tán (Distributed Systems): Trong một hệ thống CSDL phân tán, CSDL
được lưu trữ trên một vài máy tính Các máy tính trong một hệ thống phân tán liên lạc với một máy khác qua nhiều dạng phương tiện liên lạc khác nhau: mạng tốc độ cao, đường điện thoại Chúng không chia sẻ bộ nhớ cũng như đĩa Các máy tính trong hệ thống phân tán có thể rất đa dạng về kích cỡ cũng như chức năng - từ các workstation đến các mainframe Các máy tính trong hệ thống phân tán được tham chiếu bởi một số các tên khác nhau - site , node - phụ thuộc vào ngữ cảnh mà máy được đề cập Ta sẽ sử dụng thuật ngữ site để nhấn mạnh sự phân tán vật lý của các hệ thống này
Trang 24(SQL, PASCAL…), và được phân cách bởi các câu lệnh (hoặc các lời gọi hàm) có dạng begin
transaction và end transaction 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ột giao dịch gồm một hoặc nhiều phát biểu tương tác dữ liệu SQL thực hiện một đơn vị công việc logic Các giao dịch phải được thực thi riêng biệt và cô lập với các giao dịch khác Một giao dịch bắt đầu khi phát biểu SQL có thể thực thi đầu tiên và tiếp tục xử lý tất cả các SQL cho đến khi một trong bốn sự kiện sau đay xảy ra :
- Commit : Nếu một giao dịch gặp lệnh commit, tất cả những thay đổi được ghi nhận
lâu dài trong CSDL
- Rollback : Nếu một giao dịch gặp lệnh rollback tất cả những thay đổi đã thực hiện
bị huỷ
- Kết thúc chương trình bình thường : Nếu chương trình kết thúc không lỗi, tất cả
thay đổi được xác nhận ngầm định bởi CSDL
- Lỗi chương trình bất thường: Nếu chương trình bị hỏng hoặc kết thúc bất thường,
tất cả những thay đổi đã thực hiện được trở lui ngầm định bởi CSDL
2.1.2 Trạng thái giao dịch
Một giao dịch phải được ở một trong các trạng thái sau :
- Hoạt động (Active) : Trạng thái khởi đầu; giao dịch giữ trong trạng thái này trong
khi nó đang thực hiện
- Được bàn giao bộ phận (Partially Committed) : Sau khi thực hiện lệnh cuối cùng
được thực hiện
- Thất bại (Failed): Sau khi phát hiện rằng sự thực hiện không thể tiếp tục được nữa.
- 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.
Trang 25Ta nói một giao dịch đã được bàn giao (Committed) chỉ nếu nó đã đi vào trạng thái
Committed, tương tự, một giao dịch bị bỏ dở nếu nó đã đi vào trạng thái Aborted 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ằng trạng thái Active Khi nó kết thúc lệnh sau cùng của nó, nó chuyển sang trạng thái Partially committed Tại thời điểm này, giao dịch đã hoàn thành sự thực hiện của nó, nhưng
nó vẫn có thể bị bỏ dở do đầu ra hiện tại vẫn có thể trú tạm thời trong bộ nhớ chính và như thế một sự cố phần cứng vẫn có thể ngăn cản sự hoàn tất của giao dịch HCSDL khi đó đã kịp viết lên đĩa đầy đủ thông tin giúp việc tái tạo các cập nhật đã được thực hiện trong quá trình thực hiện giao dịch, khi hệ thống tái khởi động sau sự cố 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:
Hình 1.13 Biểu đồ trạng thái giao dịch
Với giả thiết hệ thống không gây ra sự mất dữ liệu trên đĩa, một giao dịch đi vào 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ở Tại thời điểm này, hệ thống có hai sự lựa chọn:
- Khởi động lại giao dịch : nhưng chỉ là giao dịch bị bỏ dở là do lỗi phần cứng hoặc
phần mềm nào đó không liên quan đến logic bên trong của giao dịch Giao dịch được khởi động lại được xem là một giao dịch mới
- Giết giao dịch : thường được tiến hành hoặc do lỗi logic bên trong giao dịch, lỗi
này được chỉnh sửa bởi viết chương trình ứng dụng hoặc do đầu vào xấu hoặc do
dữ liệu mong muốn không tìm thấy trong CSDL
2.1.3 Các thuộc tính của giao dịch
Để đảm bảo tính toàn vẹn của dữ liệu, ta yêu cầu HCSDL duy trì các tính chất sau của giao dịch :
- Tính nguyên tử (Atomicity): 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ả
Activ e
Partially Committed
Faile d
Committed
Aborted
Trang 26- Tính nhất quán (Consistency): 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
- Tính cô lập (Isolation): 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 Ti , Tj , hoặc Tj kết thúc thực hiện trước khi Ti khởi động hoặc Tj bắt đầu sự thực hiện sau khi Ti 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
- Tính bền vững (Durability): Sau khi một giao dịch hoàn thành thành công, các
thay đổi đã được tạo ra với CSDL vẫn còn ngay cả khi xảy ra sự cố hệ thống
Các tính chất này thường được gọi là các tính chất ACID.
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 Tại thời điểm hiện tại, ta giả thiết rằng CSDL nằm trên đĩa, nhưng một vài phần của nó đang nằm tạm thời trong bộ nhớ Các truy xuất CSDL được thực hiện bởi hai hoạt động sau:
- READ(X) : chuyển hạng 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 hạng mục X từ buffer của giao dịch thực hiện WRITE đến
CSDL
Trong hệ CSDL thực, hoạt động WRITE không nhất thiết dẫn đến sự cập nhật trực tiếp dữ liệu trên đĩa; hoạt động WRITE có thể được lưu tạm thời trong bộ nhớ và được thực hiện trên đĩa muộn hơn Trong ví dụ, ta giả thiết hoạt động WRITE cập nhật trực tiếp CSDL
Ti 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:
Ta xem xét các yêu cầu ACID:
- 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 bị phá huỷ bởi giao dịch
- Tính nguyên tử : Giả sử rằng ngay trước khi thực hiện giao dịch Ti , giá trị của các tài khoản A và B tương ứng là 200 và 500 Giả sử rằng trong khi thực hiện giao
Trang 27dịch Ti một sự cố xảy ra sau khi hoạt động WRITE(A) đã được thực hiện và trước khi hoạt động WRITE(B) được thực hiện Trong trường hợp này giá trị của tài khoản A và B là 150 và 500 Ta đã phá huỷ 50$ Tổng A+B không được bảo toàn.
- Trạng thái trên được gọi là trạng thái không nhất quán Ta phải đảm bảo rằng tính bất nhất này không xuất hiện trong một HCSDL.Chú ý rằng, cho dù thế nào tại một thời điểm, hệ thống cũng phải ở trong trạng thái không nhất quán Ngay cả khi giao dịch Ti, trong quá trình thực hiện cũng tồn tại thời điểm tại đó giá trị tài khoản A là
150 và B là 500 - một trạng thái không nhất quán Ý tưởng cơ sở để đảm bảo tính nguyên tử là như sau: HCSDL lưu vết (trên đĩa) các giá trị cũ của bất kỳ dữ liệu nào trên đó giao dịch đang thực hiện viết, nếu giao dịch không hoàn tất, giá trị cũ được khôi phục để đặt trạng thái trước khi giao dịch diễn ra
- Tính 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 CSDL vẫn còn đó, ngay cả khi xảy ra sự cố hệ thống có thể gây ra việc mất dữ liệu trong bộ nhớ chính, nhưng dữ liệu trên đĩa thì không mất
- 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 thì 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 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
2.2 PHÂN TÍCH GIAO DỊCH SQL
2.2.1 Phân tách
Trong giai đoạn phân tách, Oracle thực hiện một số việc để kiểm tra phát biểu SQL của bạn Oracle kiểm tra cú pháp xem có đúng không, từ điển dữ liệu được dùng để xem đặc tả cột và bảng có đúng không Sau việc này, Oracle đảm bảo rằng bạn có các đặc quyền đẻ thực hiện các hoạt động bạn đang cố thông qua các phát biểu SQL
Ngay khi thực hiện những kiểm tra cú pháp và ý nghĩa, Oracle đưa ra kế hoạch thực thi cho phát biểu, bao gồm chọn phương pháp truy cập tốt nhất cho các đối tượng trong phát biểu Oracle cũng kiểm tra xem có mô tả đã phân tách của phát biểu sẵn trong bộ nhớ Nếu
có, người dùng có thể thực thi mô tả đã phân tách này mà không xử lý phân tách tất cả lại.Sau khi hoạt động phân tách kết thúc, Oracle chuyển vùng SQL chia sẻ cho phát biểu Những người dùng khác có thể truy cập phiên bản đã phân tách này miễn là nó còn nằm trong
Trang 28hoạch thực thi cho phát biểu, gồm các chi tiết cách đối tượng được truy cập, trong số những việc khác Oracle sẽ bắt đầu thật sự thực thi phát biểu sử dụng kế hoạch tìm thấy Quá trình
đó được gọi là phân tách mềm và nó là kỹ thuật được thích dùng hơn trong xử lý phát biểu SQL Bởi nó sử dụng kế hoạch thực thi được hình thành trước đó phân tách mềm nhanh và hiệu quả
2.2.1.2 Phân tách cứng
Oracle sẽ thực hiện kiểu phân tách này khi nó không tìm thấy giá trị băm SQL trong bộ nhớ cho phát biểu nó muốn thực thi Phân tách cứng dùng nhiều bộ nhớ hệ thống và các tài nguyên khác Oracle cũng phải tạo kế hoạch thực thi từ đầu, nghĩa là một số lớn việc phải được đánh giá bởi Oracle và chọn kế hoạch tốt nhất Trong quá trình này, Oracle cần truy cập vùng lưu thư viện và vùng lưu tự điển nhiều lần để kiểm tra từ điển dữ liệu Mỗi lần truy cập những vùng chung này, Oracle cần sử dụng chốt được xem như cơ chế kiểm soát sự tuần tự
mức thấp để bảo vệ cấu trúc dữ liệu chia sẻ trong System Global Area (SGA) Như thế, phân
tách cứng góp phần gia tăng tranh đua chốt dữ liệu
Bất kỳ lúc nào có vài sự tranh đua tài nguyên trong khi xử lý phát biểu, thời gian thực thi
sẽ tăng Hãy nhớ rằng nếu giá trị băm SQL không được tìm thấy thường xuyên trong vùng nhớ chia sẻ, nghĩa là có nhiều phân tách cứng sẽ dẫn đến phân mảnh vùng nhớ chia sẻ và làm cho vấn đề tranh đua tồi tệ hơn
2.2.2 Đóng kết
Trong giai đoạn đóng kết, Oracle nhận các giá trị cho các biến được dùng trong giai đoạn phân tách Sự thực thi phát biểu không thể tiếp tục cho đến khi Oracle nhận được những giá trị này cho các biến được dùng trong giai đoạn phân tách
2.2.3 Thực thi
Ngay khi Oracle hoàn tất giai đoạn phân tách và đóng kết, nó thực thi phát biểu Nó thực thi hoặc là truy vấn hoặc là các hoạt động DML trong phát biểu SQL Trong khi thực thi CSDL nhận dữ liệu từ đĩa và bộ nhớ (nếu nó không tìm thấy dữ liệu có sẵn) CSDL cũng sẽ quản lý tất cả khóa cần thiết và đảm bảo bất kỳ thay đổi nào đã thực hiện trong khi thực thi SQL đều được ghi lại Sau khi thực thi phát biểu SQL, Oracle tự động đóng con trỏ
2.3 KIỂM SOÁT GIAO DỊCH ĐỒNG THỜI
Giao dịch đồng thời là quá trình quản lý công việc đồng thời bởi nhiều người dùng mà không có bất kỳ sự can thiệp nào giữa họ Sự tương tác không thích hợp giữa các giao dịch có thể gây cho CSDL trở nên không nhất quán CSDL cần kiểm soát các hoạt động của các giao dịch khác Nếu bạn là người dùng duy nhất của CSDL, bạn không cần lo lắng về kiểm soát giao dịch đồng thời Tuy nhiên trong hầu hết trường hợp, CSDL cho phép hàng ngàn người dùng kiểm soát giao dịch đồng thời Các người dùng sẽ truy cập và thực hiện đồng thời các
Trang 29giao dịch chọn, cập nhật và xoá trên cùng bảng Làm cách nào một số người dùng chọn dữ liệu có ý nghĩa từ các bảng, trong khi các người dùng khác xoá dữ liệu từ cùng các bảng đó? Người dùng chọn dữ liệu sẽ đợi người dùng xoá dữ liệu?
Một giải pháp là khoá bảng trong khi xoá, nhưng điều này nghĩa là truy cập tới bảng bị giảm rất nhiều Như bạn thấy, Oracle sử dụng cơ chế khoá để giữ liệu nhất quán giữa các người dùng khác, nhưng khoá được thực hiện ở cách hạn chế nhất
2.3.1 Các vấn đề về sự đồng thời
Truy cập đồng thời tới CSDL bởi nhiều người dùng sẽ đưa một vấn đề trong xử lý giao dịch Các phần sau đây mô tả chi tiết các vấn đề quan trọng nhất gặp phải trong xử lý giao dịch đồng thời
Vấn đề đọc dữ liệu vô nghĩa: Đọc dữ liệu vô nghĩa xảy ra khi một giao dịch đọc dữ liệu
được truy cập nhưng chưa được xác nhận với CSDL Nếu một giao dịch được phép xem kết quả của một giao dịch đang diễn ra trước khi nó xác nhận, bạn có thể gặp phải vấn đề dọc dữ liệu vô nghĩa Ví dụ nói rằng một giao dịch B đang đọc dữ liệu tức thời từ giao dịch A Giao dịch A vừa cập nhật giá trị của một cột, mà bây giờ được đọc bởi giao dịch A Điều gì xảy ra nếu giao dịch A trở lui giao dịch của nó do có chủ ý hay bị huỷ vì một lý do nào đó? Giá trị của cột được cập nhật sẽ được trở lui về giá trị cũ Không may, giao dịch B đã được giá trị mới của cột mà bây giờ không còn đúng bởi vì sự trở lui của giao dịch A
Lời khuyên: Như bạn thấy, vấn đề đã mô tả trong phần này có thể tránh được bằng
cách áp đặt quy tắc đơn giản Đừng để bất kỳ giao dịch nào đọc tức thời kết quả của giao dịc khác trước khi giao dịch khác hoặc là được xác nhận hoặc trở lui Bằng cách này, việc đọc được đảm bảo là nhất quán.
Vấn đề đọc dữ liệu không thực: Giả sử bạn đang đọc dữ liệu từ bảng Bạn thực thi truy vấn
của bạn sau khoảng thời gian trôi qua và trong một thới điểm nào đó, một số người dùng khác thêm dữ liệu mới vào bảng Bởi vì truy vấn thứ hai của bạn sẽ có thêm vài dòng mà không có trong lần đọc thứ nhất, chúng được xem như là đọc ảo và đó là vấn đề đọc dữ liệu không có thực Vấn đề này bị gây ra bởi sự xuất hiện của dữ liệu mới giữa hai hoạt động CSDL trong một giao dịch
Vấn đề thiếu cập nhật: Bị gây ra bởi các giao dịch đang cố gắng đọc dữ liệu trong khi nó
đang được cập nhật bởi các giao dịch khác Nếu một giao dịch A đang đọc dữ liệu của một bản trong khi nó đang được cập nhật bởi giao dịch B, giao dịch B kết thúc thành công và được xác nhận Nếu giao dịch A đọc dữ liệu trước khi giao dịch B kết thúc thì nó có thể kết thúc với việc đọc dữ liệu không nhất quán Cho phép các giao dịch đọc và cập nhật một bản trước khi kết thúc giao dịch khác gây ra vấn đề trong trường hợp này
Trang 30Vấn đề không thể lập lại: Khi một giao dịch thấy rằng dữ liệu nó được trước đó đã được
thay đổi bởi một số giao dịch khác, bạn gặp một vấn đề không thể lặp lại Giả sử bạn truy cập
dữ liệu ở một bảng ở thời điểm nào đó và sau đó ít lâu bạn cố gắng truy cập cùng dữ liệu, chỉ
để thấy rằng dữ liệu đã khác ở lần đọc thứ hai Vấn đề dữ liệu không nhất quán này trong cùng một giao dịch là vấn đề đọc không thể lặp lại
2.3.2 Lập biểu và sự khả năng tuần tự
Giả sử rằng một giao dịch được thực thi cô lập sẽ luôn để CSDL ở trạng thái nhất quán khi giao dịch kết thúc Nếu CSDL cho phép truy cập đồng thời sau đó cần xem xét hiệu quả luỹ tích của tất cả các giao dịch trên sự nhất quán của CSDL Để làm được điều này ta sử dụng khái niệm lập biểu Biểu thời gian là một chuỗi các hoạt động từ một hay nhiều giao dịch Nếu tất cả giao dịch được thực thi tuần tự, biểu thời gian sẽ là tuần tự Nếu có thể đưa ra một biểu thời gian tương đương về hiệu quả của nó tới một biểu thời gian tuần tự, mặc dù nó có thể được nhận từ một tập các giao dịch đồng thời, được gọi là biểu thời gian tuần tự Biểu thời gian tuần tự gồm một chuỗi các hoạt động CSDL trộn lẫn từ một số giao dịch và kết quả cuối cùng của nó là CSDL nhất quán
2.3.3 Tiêu chuẩn giao dịch ISO
Chuẩn ISO cho các giao dịch trên hai phát biểu kết thúc giao dịch chủ chốt: commit và rollback Tất cả giao dịch theo chuẩn ISO đều bắt đầu với phát biểu select, update, insert và delete Không giao dịch nào có thể xem kết quả tức thì của giao dịch khác Kết quả của giao dịch thứ hai sẵn sàng với giao dịch thứ nhất chỉ sau khi giao dịch thứ hai kết thúc
Tất cả các giao dịch phải đảm bảo rằng chíng giữ cho CSDL nhất quán trước khi giao dịch bắt đầu và nó phải ở trạng thái nhất quán khi giao dịch kết thúc Nếu có cách để tránh được vấn đề đã đề cập ở phần trước sẽ đảm bảo được mức độ tương tác đồng thời cao trong CSDL giữa các giao dịch Nhưng lại gặp phải một điều: cố gắng giảm sự bất thường kết quả sẽ giảm
sự đồng thời Chuẩn giao dịch ISO nghĩa là đảm bảo sự phù hợp của giao dịch với các thuộc tính nguyên tử và cô lập tránh vấn đề đồng thời đã giải thích trong phần trước
Ta có thể tránh được vấn đề đó và luôn đảm bảo tính nhất quán bằng cách áp đặt qui tắc đơn giản: không thể bắt đầu một giao dịch mới cho tới khi giao dịch hiện thời được xác nhận hoặc trở lui Tuy nhiên muốn thực hiện được điều này thì phải loại trừ hoàn toàn ý tưởng đồng thời trong truy cập CSDL Công việc của CSDL là đảm bảo các giao dịch thực thi đồng thời giữ sự nhất quán của CSDL
Sự nhất quán có thể đạt được bằng cách buộc sử dụng tuần tự CSDL …Nhưng không thực
tế Như vậy, mục đích thực tế là tìm những kiểu giao dịch đồng thời không ảnh hưởng đến nhau, nói một cách khác giao dịch đảm bảo bản biểu tuần tự Miễn là cấp phát đồng thời hoặc
Trang 31một hỗn hợp giao dịch đọc và ghi trong CSDL Thứ tự của giao dịch trở nên rất quan trọng trừ khi chúng là những giao dịch chỉ đọc.
2.3.3.1 Quản lý giao dịch trong Oracle
Một giao dịch Oracle bắt đầu với phát biểu SQL có thể thực thi đầu tiên và kết thúc khi giao dịch gặp lệnh commit hoặc rollback Giao dịch cũng có thể kết thúc khi người dùng ngắt kết nối hoặc tiến trình người dùng hỏng Khi giao dịch bắt đầu Oracle gán một rollback segment cho giao dịch để ghi nhận dữ liệu ban đầu mà ở đó dữ liệu được thay đổi Phát biểu đầu tiên sau khi kết thúc giao dịch sẽ đánh dấu vị trí bắt đầu giao dịch mới
Xác nhận:
Phát biểu commit kết thúc giao dịch thành công Tất cả những thay đổi thực hiện bởi tất cả các phát biểu SQL từ khi bắt đầu giao dịch được ghi nhận lâu dài trong CSDL Trước khi phát biểu commit được phát hành, các thay đổi có thể không được nhìn thấy bởi các giao dịch khác Có thể xác nhận bằng giao dịch sau:
SQL > commit
Trước khi Oracle có thể phát hành lệnh commit, những việc sau đây xảy ra trong CSDL:
- Oracle sinh ra các mẩu tin trở lui trong vùng nhớ đệm rollback segment SGA Như bạn biết, các mẩu tin trở lui chứa giá trị cũ của các dòng được cập nhật hoặc bị xoá
- Oracle sinh ra các mục nhập trong redo log trong vùng bộ nhớ đệm redo log của SGA
- Oracle thay đổi vùng đệm CSDL trong SGA
Lưu ý: Vùng đệm CSDL đã thay đổi có thể được ghi lên đĩa trước khi phát biểu commit được phát hành Tương tự các mục nhập trong redo log có thể được ghi vào tệp tin redo log trước khi phát biểu commit được phát hành.
Khi một giao dịch Oracle được xác nhận, ba việc sau đây xảy ra:
- Các bảng giao dịch trong mẫu tin redo được đánh dấu với số thay đổi hệ thống duy nhất (SCN) của giao dịch được xác nhận
- Tiến trình ghi log ghi thông tin redo log cho giao dịch từ vùng đệm redo log tới tệp tin redo log trên đĩa, cùng với SCN của giao dịch Đây là điểm mà sự xác nhận được xem là kết thúc trong Oracle
Lưu ý: Nếu trong SQL * PLUS bạn thiết lập biến autocommit là on, Oracle sẽ tự động xác nhận giao dịch ngay cả khi không có phát biểu commit rõ ràng.
Trở lui:
Trang 32Phát biểu rollback bỏ qua hoặc kết thúc một giao dịch không thành công Không có thay đổi nào đã thực hiện bởi các phát biểu SQL từ lúc bắt đầu giao dịch được ghi nhận lâu dài vào CSDL Phát biểu rollback đảo ngược tất cả những thay đổi bởi giao dịch Có thể trở lui tất cả những thay đổi đã thực hiện trong giao dịch hoặc nếu bạn dùng save point trong giao dịch, bạn chỉ có thể trở lui đến lệnh save point gần nhất trong giao dịch Lệnh save point hoạt động giống như điểm đánh dấu cho phát biểu không được xác nhận trong giao dịch.
Ví dụ minh hoạ:
SQL > rollback;
SQL > rollback to savepoint pointA;
Oracle sử dụng các mẩu tin hoàn tác trong không gian bảng hoàn tác để trở lui giao dịch sau lệnh rollback Nó cũng giải phóng bất kỳ khoá nào được giữ và đánh dấu giao dịch như kết thúc Nếu như rollback đến điểm đánh dấu thay vì cả giao dịch, giao dịch được cho rằng chưa hoàn tất và giao dịch có thể tiếp tục
2.4 HIỆN THỰC KIỂM SOÁT ĐỒNG THỜI
Một CSDL có thể có nhiều cách để hiện thực đồng thời Bao gồm cơ chế khoá để đảm bảo
sử dụng độc quyền bảng bởi giao dịch Phương pháp đóng dấu thời gian cho phép tuần tự giao dịch và lập biểu giao dịch dựa trên kiểm tra sự hợp lệ Phương pháp khoá được gọi là bi quan vì chúng cho rằng các giao dịch đó sẽ xung đột biểu thời gian tuần tự trừ khi chúng được ngăn chặn cụ thể Phương pháp đóng dấu thời gian và kiểm tra sự hợp lệ được xem là lạc quan vì chúng không giả định các giao dịch bị xung đột với biểu thời gian tuần tự Như ta thấy phương pháp khoá gây ra chậm trễ hơn bởi vì chúng giữ các giao dịch đang đụng độ đợi truy cập các đối tượng CSDL bị khoá
Ở mặt tích cực phương pháp khoá không huỷ bỏ giao dịch bởi vì chúng ngăn chặn các giao dịch đang đụng độ khỏi tương tác các giao dịch khác Phương pháp tích cực (lạc quan) thường huỷ bỏ giao dịch khi chúng có thể đụng độ với biểu thời gian tuần tự Phương pháp khoá thì ngăn chặn biểu thời gian tuần tự bằng cách ngăn không cho nhiều hơn một hoạt động truy cập cùng phần tử dữ liệu Phương pháp đóng dấu thời gian gán thời gian cho từng giao dịch và buộc tuần tự bằng cách đảm bảo rằng dấu thời gian giao nhận một giao dịch, dữ liệu
đã thay đổi được kiểm tra được sự hợp lệ với những mục đã thay đổi của giao dịch tích cực hiện thời để loại trừ bất kỳ biểu thời gian không tuần tự Oracle sử dụng kết hợp các phương pháp có sẵn Nó sử dụng khoá cùng với điều được gọi là hệ thống kiểm soát đồng thời đa phiên bản để quản lý đồng thời
Phương pháp khoá cung cấp sự tuần tự bằng cách buộc các giao dịch hoàn tất Khoá được thiết kế để ngăn chặn tương tác tiêu huỷ giữa các giao dịch cho cùng nguồn dữ liệu Các nguồn này có thể là các đối tượng như bảng, chỉ mục hay cấu trúc vùng nhớ chia sẻ trong
Trang 33SGA Oracle thực hiện khoá ngầm, không phải lo việc bảng nào phải khoá hay khoá bằng cách nào, Oracle sẽ tự động đặt khoá khi cần Mặc định Oracle lưu thông tin dòng bị khoá trong các khối dữ liệu Oracle cũng không bao giờ khoá leo thang, tức là nó không đi từ khoá cấp dòng lên khoá cấp bảng.
Oracle sử dụng hệ thống kiểm soát đồng thời đa phiên bản là một biến thể của tiếp cận đóng dấu thời gian để kiểm soát đồng thời Đóng dấu thời gian đa phiên bản duy trì các phiên bản cũ hơn của dữ liệu bảng để bất kỳ giao dịch nào cũng có thể đọc dữ liệu ban đầu ngay cả sau khi nó bị thay đổi bởi các giao dịch khác Không giống như khoá, không có sự chờ đợi ở đây Các giao dịch dùng các phiên bản khác nhau của cùng bảng Oracle sử dụng phân đoạn hoàn tác Khi Oracle muốn truy nhập dòng, trước hết Oracle ghi “ảnh ban đầu” vào phân đoạn hoàn tác Như vậy các truy vấn sẽ có được dữ liệu đầu ra nhất quán Hệ thống kiểm soát đồng thời đa phiên bản được dùng bởi Oracle là lý do bạn có thể nhận bởi chế độ đọc đã xác nhận thay vì dùng mức cô lập tuần tự chậm hơn nhưng an toàn hơn
Sử dụng phân đoạn hoàn tác, Oracle đảm bảo đọc nhất quán ở cấp phát biểu Nghĩa là truy vấn chỉ thấy dữ liệu từ một thời điểm duy nhất Sử dụng cùng cơ chế Oracle cũng có thể cung cấp nhất quán cấp giao dịch, nghĩa là các phát biểu riêng biệt trong giao dịch có thể thấy dữ liệu từ một thời điểm duy nhất Để buộc đọc nhất quán cấp giao dịch, phải chạy CSDL ở chế
độ tuần tự không mặc định
Một số tính năng quan trọng của khoá trong Oracle:
- Oracle hiện thực khoá bằng cách thiết lập một bit trong mục dữ liệu bị khoá Thông tin khoá được lưu trong khối dữ liệu chứa dòng
- Khoá được giữ suốt thời gian giao dịch và được giải phóng khi phất biểu commit hay rollback được phát hành
- Oracle không sử dụng leo thang khoá Khi nó lưu trữ thông tin khoá trong khối dữ liệu riêng
- Oracle sử dụng chuyển đổi khoá gồm việc thay đổi hạn chế của khoá trong khi đảm bảo khoá vẫn được duy trì Ví dụ khoá bảng chia sẻ dòng được chuyển thành khoá bảng loại trừ dòng hạn chế hơn khi phát biểu select for uplate bắt đầu cập nhật các dòng bị khoá trong bảng
2.4.1 Các phương pháp khoá
Oracle sử dụng khoá để kiểm soát truy cập tới hai kiểu đối tượng rõ ràng Đối tượng người dùng bao gồm bảng và đối tượng hệ thống bao gồm cấu trúc vùng nơi chia sẻ và đối tượng từ điển dữ liệu Chiến lược khoá được hướng dẫn bằng hai cách tiếp cận: lạc quan và bi quan Tiếp cận lạc quan dực trên giả thuyết sự đụng độ không xảy ra Tiếp cận bi quan trong chờ sử dụng độ tiềm ẩn và sẽ khoá một số giao dịch không được tương tác với các giao dịch khác để tránh sự đụng độ giữa các giao dịch đồng thời
Trang 34Tính chất hột trong ngữ cảnh khoá là kích thước của đơn vị dữ liệu được dùng bởi cơ chế khoá Oracle sử dụng tính chất hột cấp hàng để khoá đối tượng, là cấp hạn chế thấp nhất Một
số CSDL, kể cả Microsoft SQL Server chỉ cung cấp khoá cấp trang, không có khoá cung cấp dòng Khoá cấp trang (một trang tương đương khối dữ liệu trong Oracle) nghĩa là trong khi cập nhật một số dòng, một số dòng ngoài ảnh hưởng, bị khoá Tất nhiên nếu những người dùng khác cần dòng bị khoá mà không thuộc thành phần cập nhật họ phải đợi khoá trên trang được giải phóng Ví dụ nếu kích thước khối hoặc trang là SKB và chiều dài trung bình dòng
là 100 byte, khoảng 80 dòng trong khối Nếu một trong các dòng được cập nhật, một khoá cấp khối hạn chế truy cập tới 79 dòng trong khối Điều này nghĩa là khoá ở cấp lớn hơn cấp dòng
sẽ giảm sự đồng thời của dữ liệu, một trong những chức năng chủ yếu của CSDL quan hệ.Oracle giữ khoá bao lâu? Tất cả các khoá được yêu cầu bởi các phát biểu trong giao dịch được giữ bởi Oracle cho đến khi giao dịch kết thúc Khi một giao dịch phát hành lệnh commit hoặc rollback cụ thể hoặc ngầm định Oracle sẽ giải phóng bất kỳ khoá nào mà phát biểu trong giao dịch nắm giữ Nếu Oracle trở lui tới một điểm đánh dấu, nó giải phóng bất kỳ khoá nào được yêu cầu sau điểm đánh dấu
2.4.2 Các kiểu khoá
Khoá ngăn chặn tương tác tiêu cực giữa các giao dịch bằng cách cho phép truy cập có thứ
tự tới các tài nguyên Những tài nguyên này có thể là các đối tượng CSDL như bạn hoặc cấu trúc CSDL chia sẻ trong bộ nhớ Dựa trên kiểu đối tượng bị khoá, khoá Oracle có thể được chia thành hai loại: khoá DML, khoá dữ liệu, chốt , khoá nội bộ và khoá phân tán
Khoá DML: Là khoá để bảo vệ dữ liệu trong bảng và chỉ mục Bất cứ khi nào DML tìm
đến để thay đổi dữ liệu trong bảng, Oracle tự động đặt khoá cấp dòng trên các dòng trong bảng được thay đổi Mỗi giao dịch đang thực hiện hoạt động DML như insert, update, delete, select for update sẽ đòi hỏi một khoá DML duy nhất trên mỗi dòng trong hoạt động DML Có thể đặt khoá cấp dòng hoặc cấp bảng Khoá DML cấp dòng đảm bảo tiến trình cấp dữ liệu không phải đợi tiến trình ghi dữ liệu và ngược lại Tiến trình ghi sẽ phải đợi khi chúng muốn cập nhật cùng dòng đang được thay đổi hiện thời bởi các giao dịch khác Bất kỳ truy vấn phát hành giao dịch sẽ không can thiệp với bất kỳ giao dịch khác, bởi vì tất cả chúng là đọc dữ liệu, chứ không sửa đổi dữ liệu Các truy vấn trong đề cập này không chỉ bao gồm các phát biểu select mà còn gồm cả các phát biểu như insert, update và delete, tất cả dùng phát biểu select ngầm định Các truy vấn không bao giờ cần khoá, không bao giờ phải đợi các khoá khác được giải phóng Nói tóm lại, tất cả các khoá được áp dụng ngầm định bởi Oracle trong giao dịch DML là khoá cấp dòng và Oracle không leo thang những khoá này đến dạng hạn chế hơn (khoá bảng) Loại khoá cấp thấp này bởi Oracle cho mức độ đồng thời cao
Khoá dữ liệu: Oracle tự động đặt khoá dữ liệu trên các bảng đang ở trong quá trình có
một số dòng được thay đổi bởi một giao dịch Lưu ý rằng mặc dù một giao dịch chỉ giữ khoá
Trang 35cấp dòng cho một hoạt động DML, nó cũng đồng thời giữ một khoá dữ liệu cấp bảng trên bảng, sẽ ngăn chặn các giao dịch khác không thay thế hoặc loại bỏ bảng trong khi các giao dịch DML của nó chưa kết thúc Bạn cũng có thể đặt khoá dữ liệu trên bảng để kiểm soát hoạt động dữ liệu mà không có bất kỳ giao dịch DML nào đi cùng.
Chốt, khoá nội bộ và khoá phân tán: Chốt là cơ chế nội bộ bảo vệ cấu trúc dữ liệu chia
sẻ trong SGA Ví dụ, các mục nhập từ điển dữ liệu được truy cập trong vùng đệm bởi nhiều tiến trình Chốt kiểm soát truy ccập tới những cấu trúc bộ nhớ bởi các tiến trình Ví dụ các cấu trúc dữ liệu liệt kê các khối hiện thời trong bộ nhớ thường xuyên được kiểm tra trong khi chạy thể hiện Oracle Các tiến trình server và nền sau cần thay đổi hoặc đọc dữ liệu trong cấu trúc dữ liệu sẽ yêu cầu một khoá rất ngắn (được gọi là chốt) trên đối tượng
Hiện thực chốt bao gồm những đặc tả một quá trình sẽ đợi bao lâu thường chỉ ra bởi hệ điều hành Các khoá từ điển dữ liệu được dùng bởi Oracle bất cứ khi nào đối tượng từ điển được thay đổi Các khoá phân tán là cơ chế khoá đặc biệt được dùng trong hệ thống CSDL phân tán hoặc trong môi trường Oracle Real Aplication Cluster Oracle sử dụng khoá nội để bảo vệ truy cập tới các cấu trúc như tập tin dữ liệu, không gian bảng va rollback segment
2.4.3 Chế độ khoá
Oracle dùng một số kiểu cơ chế khoá Cơ chế được dùng phụ thuộc trên loại tài nguyên bị khoá và cách chúng bị khoá Ta có thể tạo phận biệt cơ bản giữa các chế độ khoá Oracle dựa trên việc chúng là loại trừ hay chia sẻ Chế độ khoá loại trừ luôn nhận được để thay đổi dữ liệu một giao dịch đòi hỏi khoá loại trừ trên bảng là giao dịch duy nhất có thể thay đổi dữ liệu trong bảng cho đến khi nó giải phóng khoá Khoá chia sẻ cho phép một số giao dịch truy cập đồng thời tới tài nguyên, thường là để đọc hơn là thay đổi dữ liệu Nếu bạn muốn thay đổi các dòng của bảng phải có khoá loại trừ trên các dòng đó
Các chế độ khoá chính trong Oracle:
Khoá bảng chia sẻ dòng (RS) Chế độ khoá hạn chế ít nhất Các giao dịch khác có thể dùng
khoá RS trên cùng bảngKhoá bảng loại trừ dòng (RX) Chế độ khoá không chia sẻ Được dùng cho cập nhật, xoá và
thêm dữ liệu
Khoá chia sẻ trong bảng (S) Các giao dịch khác chỉ có thể truy vấn dữ liệu Nhiều khoá chia
sẻ có thể được phát hànhKhoá bảng loại trừ chia sẻ dòng
(SRX) Chỉ cho phép các truy vấn trên các dòng bị khoá
Khoá loại trừ bảng (X) Chỉ cho những truy vấn được phép bởi các giao dịch khác
Bảng 2.1 Các loại khóa trong Oracle
Oracle tự động yêu cầu khoá dòng trong chế độ loại trừ để thực hiện cập nhật Mỗi giao dịch tích cực đòi hỏi một khoá Một khoá dòng bị thay đổi luôn bị khoá loại trừ để ngăn giao
Trang 36dịch khác sửa đổi dữ liệu khi giao dịch đầu tiên được xác nhận hoặc trở lui Khi một giao dịch yêu cầu khoá dòng loại trừ, nó luôn tự động đòi hỏi khoá bảng trên chính bảng Khoá bảng ngăn chặn sự xung đột các hoạt động dữ liệu bởi các giao dịch khác.
Lưu ý: Khoá cấp dòng và sử dụng kiểm soát đồng thời đa phiên bản trong Oracle nghĩa là
vì mục đích thực tế, chỉ xung đột thực sự giữa các giao dịch muốn cập nhật cùng các dòng đồng thời Tiến trình đọc dữ liệu không đợi tiến trình ghi bởi vì các phân đoạn hoàn tác cung cấp đọc dữ liệu nhất quán Tiến trình ghi dữ liệu không đợi tiến trình đọc và ngược lại.
Khoá bảng được giữ cho các hoạt động insert, update, delete và select for update Các hoạt động DML cần khoá bảng để đảm bảo một số hoạt động khác không thay đổi định nghĩa bảng trong khi thay đổi dữ liệu Nghĩa là một bảng không thể được thay thế hoặc loại bỏ trong một giao dịch chưa được xác nhận vẫn giữ khoá bảng trên bảng Khoá bảng có thể trải từ chế độ rất hạn chế đến chế độ ít hạn chế nhất
Mô tả một số chế độ chính trong Oracle có thể triển khai với các khoá cấp bảng:
- Khoá bảng chia sẻ dòng: Khoá bảng chia sẻ dòng là ít hạn chế nhất của khoá cấp
bảng Các giao dịch khác được phép chọn, cập nhật, thêm và xoá từ các bảng bị khoá chia sẻ dòng đồng thời Các giao dịch khác bị ngăn chặn không truy cập ghi loại trừ tới các bảng bị khoá trong chế độ này Ví dụ:
SQL > select * from accounts for update;
SQL > lock table accounts in row share mode;
Khoá bảng chia sẻ dòng là giao dịch đặt khoá này khoá một hoặc nhiều dòng trong bảng, liên quan tới cập nhật chúng Khoá này cho phép các giao dịch khác chọn, cập nhật, xoá hoặc khoá dòng trong bảng trong khi giao dịch này giữ khoá bảng Tuy nhiên các giao dịch khác không thể khoá bảng trong chế độ loại trừ
- Khoá bảng loại trừ dòng: Khoá bảng loại trừ dòng chỉ ra rằng một giao dịch giữ
khoá cập nhật một hoặc nhiều dòng trong bảng Khoá này hơi hạn chế hơn khoá bảng các giao dịch khác được phép chọn, thêm, cập nhật, xoá hoặc khoá dòng trong cùng bảng đồng thời Tuy nhiên các giao dịch khác không thể khoá bảng loại trừ cho việc đọc và ghi của nó Các phát biểu thêm, cập nhật và xoá buộc khoá loại trừ dòng và có thể buộc khoá này cụ thể như sau:
SQL > lock table accounts in row exclusive mode;
- Khoá bảng chia sẻ: Khoá bảng chia sẻ hạn chế hơn hai chế độ khoá đã mô tả trên
Các giao dịch khác cơ bản chỉ có thể phát hành phát biểu select trên bảng bị khoá trong chế độ khoá chia sẻ Tuy nhiên, các khoá giao dịch khác có thể dành sẵn một
số dòng cho các cập nhật tương lai bởi phát biểu select for update Các giao dịch khác cũng được phép các khoá chia sẻ của riêng chúng trên bảng này Khi có nhiều
Trang 37hơn một giao dịch phát hành khoá chia sẻ trên bảng, không bảng nào được phếp cập nhật dòng trong bảng đó Cách yêu cầu khoá:
SQL > lock table accounts in share mode;
- Khoá bảng loại trừ dòng chia sẻ: Khoá này hạn chế hơn khoá bảng chia sẻ Sự
khác nhau giữa khoá loại trừ dòng chia sẻ và khoá bảng chia sẻ là khoá loại trừ dòng chia sẻ chỉ có thể được giữ bởi phát biểu đầu tiên phát hành nó Cũng như khoá bảng chia sẻ, khoá loịa trừ dòng chia sẻ không được phếp cập nhật tới dòng bởi các giao dịch khác, chỉ cho phép các hoạt động chọn Ví dụ:
SQL > lock table accounts in row exclusive mode;
- Khoá bảng loại trừ: Khoá bảng loại trừ là chế độ khoá hạn chế nhất, nó ngăn bất
kỳ giao dịch nào thực hiện các hoạt động DML hoặc yêu cầu bất kỳ loại khoá nào trên cùng bảng Giao dịch phát hành khoá bảng loại trừ là khoá duy nhất có thể ghi
tớ bảng Tất cả các giao dịch khác có thể đọc dữ liệu trong bảng
2.4.4 Khoá tường minh trong Oracle
Oracle tự động áp dụng khoá cần thiết cho bảng và các đối tượng khác dựa vào giao dịch được thực hiện trong ứng dụng Cơ chế khoá của Oracle làm việc tự động để đảm bảo nhất quán đọc cấp phát biểu và đồng thời, nhưng trong một số trường hợp, khi đó tốt hơn là nên khoá bảng bằng tay Thỉnh thoảng giao dịch cần xem dữ liệu nhất quán trên nhiều bảng liên kết, nó có thể thực hiện khoá cụ thể Trong trường hợp khác, một giao dịch có thể không muốn đợi giao dịch khác kết thúc Ngoài ra nếu không muốn giá trị dữ liệu bị thay đổi trong giao dịch dài thì có thể áp dụng khoá cụ thể
Oracle cung cấp tính năng khoá tường minh để đè các khoá ngằm định đặt bởi Oracle thay cho giao dịch Có thể đè khoá mặc định của Oracle ở cấp giao dịch hoặc cấp phiên làm việc Nếu muốn đè tất cả cơ chế khoá mặc định của Oracle, bạn có thể sử dụng lệnh set transaction isolation level ở cấp phiên làm việc Cùng phát biểu này cũng sẽ đè chế độ khoá mặc định ở cấp giao dịch
Các kỹ thuật khoá bằng tay:
Khoá bảng loại trừ: Phát biểu sau khoá bảng Customers ở chế độ loại trừ, chỉ ra rằng nó
sẽ không đợi khoá trên bảng Customers bằng cách dùng tuỳ chọn nowait khi yêu cầu khoá Phát biểu sau đây khoá bảng ở chế độ loại trừ:
SQL > lock table Customers
In exclusive mode nowait;
Ngay khi khoá bảng ở chế độ loại trừ, không phiên làm việc nào có thể thực hiện bất kỳ hoạt động DML nào trên bảng cho đến khi khoá được giải phóng bởi phiên làm việc Rõ ràng kiểu khoá này hạn chế cao nên làm giảm mạnh mức độ đồng thời
Trang 38Chọn để cập nhật: Có thể dùng lệnh select for update để đè chế độ khoá mặc định của
Oracle Lệnh select for update sẽ khoá tất cả các dòng có mặt trong lệnh select để cập nhật sau đó Khoá được giải phóng sau khi cập nhật hoàn tất bằng lệnh commit hoặc rollback Cách sử dụng lệnh select for update, trong ví dụ sau Oracle sẽ chỉ khoá một dòng cho đến khi cập nhật hoàn tất:
SQL > select sales where rownum < 2 for update;
Chọn để cập nhật với tuỳ chọn Nowait: Phát biểu select for update có thể được dùnh trong
chế độ hạn chế hơn bằng cách dùng tuỳ chọn nowait Phát biểu này buộc Oracle hoặc cấp một khoá trên đối tượng yêu cầu hoặc báo lỗi nhưng không buộc phiên làm việc đang yêu cầu đợi khoá đó Ví dụ:
SQL > select * from employees where mannage_id=2349 for update of employee_name nowait;
Trong ví dụ trên, tất cả các dòng trong bảng tương ứng với manager_id=2349 đều bị khoá
để cập nhật trong tương lai Phát biểu for update employee_name chỉ ra rằng employee_name
là cột bạn muốn cập nhật và từ khoá nowait chỉ ra rằng bạn không muốn phát biểu này đợi cho đến khi các khoá hiện thời khác được giải phóng trên bảng Ví dụ nếu có các khoá hiện thời trên cùng bảng phát biểu sẽ trả về lỗi hơn là đợi Nếu bây giờ giao dịch khác phát hành lệnh update hoặc select for update, chúng sẽ không thành công Giao dịch thứ hai sẽ gặp lỗi bởi vì khoá bị áp đặt bởi lệnh select for update được phát hành bởi phát biểu đầu tiên
2.4.5 Quản lý khoá
Như dã nói, khoá trong Oracle thường được thực hiện ngầm định bởi Oracle ở cấp hạn chế nhất Người dùng có thể đè khoá mặc định của Oracle, nhưng nói chung lại không muốn có quá nhiều trường hợp ở đó bạn phải xử lý với các khoá do người dùng quản lý Hầu hết việc quản lý khoá trên CSDL hoạt động sẽ được nhìn thấy nếu bất kỳ khoá tyích cực nào đang được giữ mà đang khoá người dùng khỏi việc kiểm soát các hoạt động DML Oracle cung cấp một script được goi là utlockt, cho bạn đồ hình khoá đợi ở dạng cấu trúc cây và các phiên làm việc đang giữ khoá đang ảnh hưởng các phiên làm việc khác Sử dụng script này người dùng
có thể thấy một phiên bản làm việc đang đợi khoá nào và phiên làm việc nào đang giữ khoá Script nằm trong thư mục ORACLE_HOME\rdbms\admin Sau đây là ví dụ thực thi script để nhận ra thông tin khoá trong CSDL
SQL > @E:\ Oracle\ora92\rdbms\adminutloakt SQL Session Waiting Type Mde requested Mode Held Lock Id1
Trang 39Session Id 682 là điều mà session 363 đang đợi Thông tin được in tiếp theo trên mỗi dòng cho thấy thông tin khoá cho khóa đang đợi Như thế session 682 mặc dù đang giữ khoá, không cho thấy bất kỳ thông tin nào trong cột thông tin khoá, bởi vì nó không đợi bất kỳ khoá nào Tuy nhiên session 363 cho biết rằng đã yêu cầu khoá chia sẻ và đang đợi session
682 để giải phóng khoá loại trừ của nó trên bảng
Lưu ý: Các bảng từ điển dữ liệu cần tìm thông tin khoá là DBA_LOCKS, DBA_BLOCKERS và DBA_WAITERS Nêu vì lý do gì đó không thấy view DBA_BLOCKERS, chạy script tại ORACLE_HOME\rdbms\admin\catproc.sql để tạo nó.
Khoá khối:
Khoá khối xảy ra khi một khoá trên đối tượng bởi người dùng ngăn chặn hoặc khoá các người dùng khác không được truy cập cùng đối tượng bảng DBA_BLOCKERS cung cấp thông tin này Bảng này cho biết phiên làm việc hiện thời đang giữ khoá trên đối tượng mà các đối tượng đang đợi Bằng cách kết hợp thông tin trong bảng DBA_BLOCKERS với bảng V$SESSION có thể biết được ai giữ phiên làm việc bị khoá bằng cách dùng phát biểu sau:
SQL > select a username, a.program, a.sid, a.serials
2 from v$session a, dba_blockers b;
3 where a.sid = b.holding_session;
Khi biết được phiên làm việc bị khoá, có thể quyết định phiên làm việc bằng cách dùng lệnh alter system kill session nếu phiên làm việc bị khóa bởi phiên làm việc khác không thực hiện được tác vụ của nó Nếu quá trình hoặc phiên làm việc không được giải phóng chuyển qua hệ điều hành để giết chết quá trình hoặc tiến trình đã sinh ra phiên làm việc Oracle
DEADLOCK
Deadock xảy ra trong bất kỳ HQTCSDL nào khi hai phiên làm việc khoá lẫn nhau trong khi đợi tài nguyên mà phiên làm việc khác hiện thời đang giữ Bởi vì phát biểu không thể bị phá vỡ bởi một phiên làm việc đơn phương nào Trong trường hợp như vậy, Oracle triệt tiêu một trong các phiên làm việc và trở lui giao dịch của nó Oracle nhanh chóng nhận ra hai phiên làm việc bị deadlock và kết thúc giao dịch giữ khoá áp dụng gần nhất Điều này giải phóng đối tượng khoá các phiên làm việc khác đang đợi Như vậy không cần thực hiện bất cứ điều gì khi xảy ra deadlock mặc dù thấy thông điệp trong thư mục dump báo rằng hiện thời có deadlock trong CSDL
Khi Oracle gặp deadlock giữa các giao dịch, nó cung cấp trong tập tin truy vết (thư mục udump) session ID, phát biểu SQL đã phát hành trong giao dịch và tên đối tượng và các dòng
mà khoá đang giữ trong mỗi phiên làm việc bị deadlock Oracle cho biết deadlock không phải
là một lỗi của Oracle, mà là lỗi trong thiết kế ứng dụng hoặc do phát hành SQL không dự tính trước Người thiết kế ứng dụng phải viết mã quản lý ngoại lệ để trở lui giao dịch bị huỷ và bắt
Trang 40lại giao dịch Có thể tránh deadlock bằng cách đầu tư trong giai đoạn thiết kế để đảm bảo khoá đúng thứ tự của đối tượng.
Dùng OME để quản lý các khoá phiên làm việc
Có thể dùng Lock Manager của OEM hoặc TopSessions để xem khoá nào hiện thời đang tồn tại trong thể hiện Một trong hai phương pháp đều cho người dùng một lượng lớn thông tin khoá của phiên làm việc như loại khoá, tên người dùng, session ID và tên đối tượng Hầu hết các khoá thấy trong Lock Manager hoặc TopSession là vô hại Chúng là những khoá Oracle thường để duy trì đồng thời
Để biết khoá này đang gây ra sự tranh đua trong hệ thống, DrillDown > Blocking/Waiting Locks Chart từ trình đơn trong màn hình Lock Manager Nếu màn hình này không hiển thị thông tin nào thì nói chung là không có khoá nào hiện thời trong thể hiện Ngay khi xác định một phiên làm việc đang khoá một vài phiên làm việc khác, Lock Manager cho phép giết phiên làm việc gây ra khoá bằng cách chọn DrillDowwn > Kill Session từ trình đơn
Lưu ý: Để chạy Lock Manager hoặc TopSession, người dùng chạy Oracle Enterprise Manager (OEM), từ trình đơn Tools trong OEM để chọn Diagnostics Pack.
2.5 Giao dịch độc lập
Một giao dịch có thể là một phần của giao dịch khác Trong trường hợp như vậy, giao dịch cha được gọi là giao dịch chính và giao dịch con độc lập được gọi là giao dịch độc lập Một giao dịch độc lập được định nghĩa như một giao dịch không phụ thuộc, có thể được gọi từ bất
kỳ giao dịch nào khác Lưu ý rằng mỗi giao dịch con được gọi từ giao dịch cha nhưng nó độc lập với giao dịch cha Các gói, thủ tục, hàm và trigger có thể bao gồm các giao dịch độc lập Người dùng phải định hướng trong giao dịch chính để Oracle biết được khuynh hướng sử dụng giao dịch độc lập trong giao dịch chính Giao dịch độc lập có các phát biểu rollback và commit của riêng nó giống như các giao dịch bình thường Giao dịch chính bằng cách sử dụng giao dịch độc lập có thể dừng các giao dịch của nó lại, thực thi các giao dịch độc lập và tiếp tục từ nơi nó dừng Nói cách khác người dùng có thể rời khỏi ngữ cảnh giao dịch gọi, thực thi giao dịch độc lập, hoặc xác nhận hoặc trở lui giao dịch và tiếp tục giao dịch cha từ sự trở lại ngữ cảnh của giao dịch gọi Lưu ý rằng giao dịch độc lập không chia sẻ tài nguyên giao dịch chẳng hạn như khoá với giao dịch cha
Giao dịch độc lập cung cấp cho người phát triển khả năng tạo nhiều giao dịch liên kết nhau Người dùng có thể có các giao dịch độc lập lồng nhau xác nhận hoặc trở lui giao dịch chúng độc lập với giao dịch cha đang gọi
Lưu ý: Nếu không sử dụng giao dịch độc lập, tất cả thay đổi trong phiên làm việc sẽ được
xác nhận hoặc trở lui một lần Giao dịch độc lập cho người dùng khả năng xác nhận hoặc trở