Các đối tượng Sau khi hoàn thành bài học này, bạn có thể: Xác định các nhân tố ảnh hưởng đến việc thực hiện khóa Danh sách các đối tượng được điều khiển Xác định các đặc trưng c
Trang 1Chuẩn bị cho kỳ thi 730 cơ bản về DB2 9, Phần 6: Nhất quán dữ liệu
Roger Sanders, Quản lý cao cấp, EMC
Tóm tắt: Bài viết này giới thiệu khái niệm cơ bản của tính nhất quán cơ sở dữ
liệu và các cơ chế khác nhau trong sử dụng của DB2 để cho phép làm việc trong
cả môi trường dữ liệu một người dùng và nhiều người dùng Đây là bài viết thứ 6 trong bảy bài viết hỗ trợ bạn bắt đầu làm việc với DB2 9 trên hệ điều hành Linux, UNIX, và Windows™ chuẩn bị cho bài thi lấy chứng chỉ 730
Trước khi bạn bắt đầu
Về loạt bài viết này
Suy nghĩ về việc có được/đạt được chứng chỉ DB2 (Bài thi số 730)? Để đạt được điều này bạn tiếp cận một cách chính xác theo các hướng dẫn Đây là loạt bài gồm bảy bài viết chuẩn bị cho cuộc thi lấy chứng chỉ DB2 loạt bài viết này giới thiệu mọi thứ cơ bản cần thiết Các chủ đề này bạn cần phải hiểu rõ trước khi bạn làm bài kiểm tra đầu tiên Thậm chí kể cả khi bạn chưa có kế hoạch để có được chứng chỉ này, thì tập hợp các bài viết này vẫn là nơi tốt để bạn tìm hiểu xem cái gì mới khi sử dụng DB2 9
Về bài viết này
Bài viết này sẽ chỉ dẫn cho bạn khái niệm cơ bản nhất của tính nhất quán dữ liệu
và các cơ chế khác nhau được sử dụng bởi DB2 9 trong Linux, UNIX và Windows
để thực thi được trong cả hai môi trường cơ sở dữ liệu một người và nhiều người
sử dụng
Đây là bài viết thứ sáu trong loạt bảy bài viết bạn có thể sử dụng để chuẩn bị cho các bài thi Cơ bản về DB2 9 (DB2 9 Fundamental) Điểm trọng yếu của bài viết
Trang 2này là giới thiệu các mục tiêu chính, đó là "tính nhất quán của dữ liệu" Bạn có thể xem các mục tiêu này tại: http://www-03.ibm.com/certify/tests/obj730.shtml
Các đối tượng
Sau khi hoàn thành bài học này, bạn có thể:
Xác định các nhân tố ảnh hưởng đến việc thực hiện khóa
Danh sách các đối tượng được điều khiển
Xác định các đặc trưng của các khóa DB2
Xác định mức độc lập được sử dụng để đưa ra trạng tái
Các điều kiện tiên quyết
Để hiểu được một số vấn đề quan trọng của bài viết này, bạn nên tham gia vào các phần sau:
Đối tượng: Là bất kỳ cái gì trong cơ sở dữ liệu mà có thể được tạo ra hay
thực thi với SQL (Ví dụ: các bảng, các chỉ mục, các gói, )
Bảng: Là một cấu trúc logic được sử dụng để hiển thị dữ liệu như là một
tập hợp của các hàng không định thứ tự với một số cột xác định Mỗi một cột chứa một tập giá trị, trong đó mỗi giá trị là cùng kiểu với nhau (hoặc
Trang 3kiểu con của kiểu dữ liệu cột); định nghĩa cột cho phép xác định cấu trúc của bảng và các hàng của bảng chứa dữ liệu chính xác của bảng đó
Bản ghi: Thể hiện dữ liệu lưu trữ theo từng hàng trong bảng
Trường: Thể hiện của cột được lưu trong bảng
Giá trị: Xác định thành phần dữ liệu cái được tìm thấy tại mỗi hàng và cột
trong bảng cơ sở dữ liệu
Ngôn ngữ truy vấn cấu trúc (SQL): Là ngôn ngữ chuẩn được sử dụng để
định nghĩa các đối tượng và thực thi dữ liệu trong cơ sở dữ liệu quan hệ Để
có nhiều thông tin hơn về SQL hãy xem bài viết thứ tư trong loạt bài viết này
Bộ tối ưu hóa DB2: Là thành phần của bộ tiền biên dịch SQL
(precompiler) là cái được chọn để truy cập cho câu lệnh SQL Data
Manipulation Language (DML)(Ngôn ngữ xử lý dữ liệu) bằng việc mô hình hóa giá trị thực thi của một số truy cập riêng biệt và được chọn như là một cách với số chi phí cần thiết nhỏ nhất
Các yêu cầu hệ thống
Bạn không cần thiết phải có bản sao chép của DB2 9 để hoàn thành bài học này Tuy nhiên, bạn sẽ nhận được nhiều kết quả của bài học này hơn nếu bạn tải phiên bản dùng thử của IBM DB2 9 để làm việc trong bài học này
Trang 4Các phiên làm việc
Tìm hiểu tính nhất quán dữ liệu
Tính nhất quán dữ liệu là gì? Cách để đưa được câu trả lời tốt nhất cho câu hỏi này
đó làm dựa vào ví dụ Công ty bạn làm việc là một chuỗi các nhà hàng và công việc bạn cần làm là xây dựng một cơ sở dữ liệu để có thể lưu trữ được dữ liệu cho từng nhà hàng này Để phiên làm việc giải quyết vấn đề này đơn giản, cơ sở dữ liệu của bạn chứa bảng thống kê cho từng nhà hàng trong chuỗi các nhà hàng Mỗi khi hàng hóa được cung cấp hoặc được sử dụng bởi từng nhà hàng riêng biệt thì bảng thống kê tương ứng của từng nhà hàng sẽ được sửa chữa tương ứng phù hợp với thay đổi đó
Bây giờ, khi có một số chai nước sốt cà chua được di chuyển từ một nhà hàng này tới một nhà hàng khác Khi đó, bảng thống kê báo cáo sẽ bị thay đổi tương ứng, số chai nước sốt cà chua của nhà hàng ban đầu cần phải giảm bớt đi và số chai nước sốt cà chua của nhà hàng nhận sẽ được tăng lên tương ứng Nếu bạn chỉ giảm số chai nước sốt cà chua của nhà hàng ban đầu mà lại không tăng được số chai nước
sốt cà chua của nhà hàng nhận trong bảng thống kê, dữ liệu sẽ trở lên mâu thuẫn -
và vì thế tổng số chai nước sốt cà chua của chuỗi nhà hàng là không được chính xác
Dữ liệu trong cơ sở dữ liệu có thể trở lên mâu thuẫn nếu người dùng quên thực hiện các thao tác thay đổi cần thiết (như trong ví dụ trước), nếu hệ thống bị phá vỡ trong khi người dùng đang thực hiện các thay đổi hoặc khi ứng dụng cơ sở dữ liệu
vì một lý do nào đó bị dừng đột ngột Sự mâu thuẫn cũng có thể xảy ra khi các người sử dụng truy cập đến cùng một bảng cơ sở dữ liệu tại cùng một thời gian
Để tránh việc xảy ra mâu thuẫn dữ liệu, đặc biệt phải thận trọng khi sử dụng trong môi trường nhiều người dùng, DB2 được thiết kế hỗ trợ để tránh sự mâu thuẫn trong dữ liệu:
Trang 5 Các phiên làm việc (transactions)
Các mức cô lập (iosolation levels)
Các khóa (locks)
Các phiên làm việc và các khung phiên làm việc
Mỗi phiên làm việc (được biết như đơn vị công việc) là một dãy gồm một hoặc
nhiều các xử lý SQL được nhóm lại với nhau như một đơn vị riêng lẻ, phiên làm việc thường được sử dụng để xử lý ứng dụng Sự bắt đầu và kết thúc của phiên làm việc được định nghĩa là tập hợp các điểm xác định của cơ sở dữ liệu; sẽ có hai trường hợp hoặc là các xử lý SQL thực thi cho các cách phiên làm việc được áp dụng cho cơ sở dữ liệu (được xử lý - committed) hoặc là các xử lý của SQL không được thực hiện đầy đủ và bỏ qua (quay trở lại - rolled back)
Với việc nhúng các ứng dụng SQL và các tập mã lệnh (script) từ Command Center (Trung tâm câu lệnh) hoặc trên Script Center (Trung tâm tập lệnh) hoặc Command Line Processor (Xử lý dòng lệnh) các cách phiên làm việc được khởi tạo một cách
tự động cho lần đầu khi các câu lệnh SQL được thực thi, hay là sau khi kết nối đến
cơ sở dữ liệu thành công thì các phiên làm việc lúc này mới bị ngắt Cho một lần khởi tạo, phiên làm việc phải được ngắt bởi người dùng hoặc bởi ứng dụng đã
khởi động phiên làm việc đó trừ khi bộ xử lý biết trao quyền tự động (trong trường
hợp này mỗi một câu lệnh SQL cho phép xử lý được xem như một phiên làm việc đơn lẻ khi đó xử lý được nhanh chóng thực hiện)
Trong hầu hết các trường hợp, các phiên làm việc được thực thi hoặc bằng câu lệnh COMMIT hoặc bằng câu lệnh ROLLBACK Khi câu lệnh COMMIT được
Trang 6thực thi, tất cả các thay đổi tới cơ sở dữ liệu khi các phiên làm việc khởi tạo được
cố định có nghĩa là các thay đổi sẽ được lưu trữ tới đĩa Khi câu lệnh
ROLLBACK được thực thi tất cả các thay đổi được tạo ra tới cơ sở dữ liệu khi phiên làm việc được khởi tạo được quay lại và cơ sở dữ liệu được trả lại ở trạng thái trước khi phiên làm việc được thực hiện Trong một trường hợp khác dữ liệu được đảm bảo trả lại trạng thái phù hợp khi hoàn thành phiên làm việc
Điều quan trọng là trong khi phiên làm việc cung cấp cơ sở dữ liệu đảm bảo thì sự thay đổi dữ liệu chỉ bị ngắt sau khi phiên làm việc được thực hiện thành công, điều
đó dẫn tới người dùng hay các ứng dụng cho phép đảm bảo rằng một dãy các xử lý SQL được thực hiện trong mỗi phiên làm việc luôn luôn đưa ra kết quả trong cơ sở
dữ liệu xác định
Hiệu quả của các xử lý COMMIT và ROLLBACK
Chú ý rằng, các phiên làm việc thường bị ngắt khi thực thi câu lệnh SQL dạng COMMIT hay ROLLBACK Để hiểu rõ các câu lệnh này làm việc như thế nào, bạn tham khảo tới ví dụ trong phần này
Nếu theo các câu lệnh SQL được hiển thị phần sau:
Ví dụ 1 Dòng công việc đơn giản gồm ba phiên làm việc
Trang 7
CONNECT TO MY_DB
CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20))
INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL')
INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING')
Trang 8ba được chèn thêm vào bảng DEPARTMENT và đồng thời bảng được trả lại ở trạng thái trước khi câu lệnh chèn thêm phần tử này được thực hiện Cuối cùng, khi câu lệnh COMMIT thứ hai được thực hiện thì thực hiện chèn thêm bản ghi thứ
tư xác định vào bảng DEPARMENT và cơ sở dữ liệu tiếp tục trả lại trạng thái phù hợp
Khi bạn nhìn thấy ví dụ này, lệnh xử lý xác nhận hoặc quay trở lại chỉ thực hiện thay đổi phù hợp để tạo ra phiên làm việc cái mà câu lệnh commit hay câu lệnh rollback thực hiện xử lý Khi mà dữ liệu bị thay đổi không được xem xét thì các người sử dụng và các ứng dụng khác luôn luôn không thể nhìn thấy chúng (tất nhiên có một ngoại lệ cái mà sẽ được trình bày ở phần sau), và chúng có thể quay lại kết quả đơn giản trước khi thực hiện xử lý quay trở lại Tuy nhiên khi một dữ liệu thay đổi được xem xét chúng trở lên có tác dụng với các người dùng và các ứng dụng khác và có thể không mất thời gian di chuyển bởi xử lý quay trở lại
Trang 9
Tác dụng của các phiên làm việc không thực hiện thành công
Chúng tôi đã trình bày điều gì xảy ra khi một phiên làm việc bị ngắt bởi câu lệnh COMMIT hoặc câu lệnh ROLLBACK Nhưng vấn đề gì xảy ra nếu hệ thống xảy
ra lỗi trước khi phiên làm việc có thể hoàn thành? Trong trường hợp này, Hệ quản trị cơ sở dữ liệu DB2 sẽ quay lại tất cả các sự thay đổi không được xem xét để có thể lưu giữ cơ sở dữ liệu phù hợp với giả định là có tồn tại ngay từ khi phiên làm việc được khởi tạo Hình 1 so sánh tác dụng của phiên làm việc thành công với các phiên làm việc bị lỗi trước khi nó được ngắt thành công
Hình 1 So sánh sự giữa phiên làm việc thành công và không thành công
Trang 10việc chạy tuần tự có tiềm tàng khả năng cản trở với các phiên làm việc chạy ở chế
độ chen vào hoặc song song, điều này có nghĩa là các kết quả của chạy song song
đồng thời nhận được so với các kết quả chạy tuần tự Khi các phiên làm việc song song được sử dụng trong các môi trường nhiều người dùng, có bốn trường hợp hay các điều ngoại lệ có thể xảy ra:
Cập nhật thiếu (Lost update): Điều này xảy ra khi hai phiên làm việc
cùng đọc và sau đó cập nhật cho cùng một dữ liệu và khi đó có một trong hai phiên làm việc cập nhật bị mất Ví dụ: Phiên làm việc 1 và Phiên làm việc 2 cùng đọc một dòng của dữ liệu và cả hai đều thực hiện tính toán dựa trên dữ liệu đã đọc được Nếu Phiên làm việc 1 thực hiện cập nhật giá trị mới cho hàng và Phiên làm việc 2 cũng thực hiện tương tự thì thao tác xử
lý cập nhật của Phiên làm việc 1 là bị mất Bởi vì vậy nên DB2 được thiết
kế không cho phép xảy ra trường hợp đặc biệt này
Đọc dư thừa (Dirty read): Điều này xảy ra khi mà phiên làm việc thực
hiện đọc dữ liệu không được xem xét Ví dụ: Phiên làm việc 1 thay đổi hàng của dữ liệu và Phiên làm việc 2 đọc đến dữ liệu đã bị thay đổi trước khi Phiên làm việc 1 thực hiện được thao tác thay đổi đó Nếu Phiên làm
Trang 11việc 1 thực hiện quay lại làm thay đổi này, Phiên làm việc 2 sẽ đọc đến dữ liệu tính toán mà thực tế không tồn tại
Đọc không lặp lại (Nonrepeatable read): Điều này xảy ra khi phiên làm
việc đọc đến một hàng hai lần nhưng dữ liệu thu được lại là khác nhau cho từng lần đọc Ví dụ: Phiên làm việc 1 đọc một hàng dữ liệu và Phiên làm việc 2 thực hiện thay đổi hoặc xóa ngay chính hàng đó Vì vậy khi Phiên làm việc 1 thực hiện đọc lại chính hàng đó nó sẽ thu được các giá trị khác
so với trước (nếu hàng đã được cập nhật) hoặc cảnh báo hàng đó không tồn tại (nếu hàng đã bị xóa)
Không xảy ra (Phantom): Điều này xảy ra khi một hàng dữ liệu phù hợp
với điều kiện tìm kiếm không được khởi tạo thực hiện lần thứ nhất nhưng lại được thực hiện trong lần xử lý sau Ví dụ: Phiên làm việc 1 đọc một tập các hàng phù hợp với một số điều kiện tìm kiếm và Phiên làm việc 2 chèn thêm hàng mới cũng phù hợp với điều kiện tìm kiếm trong Phiên làm việc
1 Nếu Phiên làm việc 1 thực hiện lại thao tác xử lý thì kết quả thu được một tập các hàng là có sự khác biệt so với các hàng đã thực hiện lần trước
Để duy trì tính ổn định của cơ sở dữ liệu và tính toàn vẹn của dữ liệu thì khi cho phép nhiều ứng dụng cùng truy cập đến cùng một dữ liệu tại cùng một thời điểm
thì phải đảm bảo tính thống nhất Một trong các cách mà DB2 cho phép thống nhất cơ sở dữ liệu đó là sử dụng các mức độc lập, cái mà cho phép xác định dữ
liệu được sử dụng như thế nào trong một phiên làm việc hoặc tính độc lập từ các phiên làm việc khác trong khi phiên làm việc đầu tiên thực hiện DB2 sử dụng các mức độc lập sau cho phép thống nhất sử dụng dữ liệu:
Đọc lặp lại (Repeatable read)
Đọc ổn định (Read stability)
Trang 12 Tham khảo ổn định (Cursor stability)
Đọc không được xem xét (Uncommitted read)
Mức độ độc lập đọc lặp lại cung cấp tất cả các trường hợp đặc biệt để làm giảm lượng lớn của sự đồng nhất (một số các phiên làm việc có thể được truy cập tới cùng một nguồn cùng lúc) Mức đọc độc lập không xem xét cung cấp mức lớn nhất của sự thống nhất nhưng cho phép cả ba trường hợp đặc biệt để xảy ra
Mức độc lập của đọc lặp lại
Mức độc lập của đọc lặp lại là mức độc lập giới hạn tốt nhất Khi nó được sử dụng, hiệu quả của một phiên làm việc là hoàn toàn độc lập từ tác dụng của phiên làm việc đồng nhất khác: đọc dư thừa, đọc không lặp lại, và không xảy ra Với
việc đọc lặp lại mọi hàng có thể được tham chiếu trong manner bởi phiên làm việc
thuộc quyền sở hữu và các dòng này là bị khóa trong suốt quá trình thực hiện phiên làm việc Với kết quả này, nếu cùng một câu lệnh SELECT được sử dụng hai hoặc nhiều lần hơn trong cùng một phiên làm việc, tập kết quả thu được luôn luôn là giống nhau Hơn thế, phiên làm việc chạy ở mức độc lập này có thể khôi phục cùng một tập các hàng nhiều lần và thực hiện xử lý các thao tác đó cho đến khi bị ngắt bởi xử lý xác nhận thực hiện lệnh hay quay trở lại Tuy nhiên, một phiên làm việc khác được ngăn chặn từ việc thực hiện chèn, cập nhập hoặc xóa thì điều này có thể ảnh hưởng đến bất kỳ hàng nào đã được truy cập thành công bởi phiên làm việc khi mà phiên làm việc dư thừa ra Để bảo đảm cho hành động này,
mỗi một hàng được tham chiếu đến bởi một phiên làm việc xác định được khóa lại
- không cho các hàng này được khôi phục hoặc sửa chữa tiếp Vì thế nếu phiên
Trang 13làm việc quét qua 1,000 dòng để khôi phục 10 dòng thì khóa được yêu cầu và đánh dấu tất cả 1,000 dòng đó cho đến khi 10 dòng được khôi phục
Làm thế nào mức độc lập đọc lặp lại làm việc được trong tình huống thế giới thực?
Vì mục đích này bạn có thể sử dụng cơ sở dữ liệu DB2 để lưu giữ các bản ghi của khách sạn bao gồm thông tin đặt chỗ và thông tin các phòng và bạn có ứng dụng dựa trên nền Web để cho phép các cá nhân riêng lẻ có thể đặt phòng cho những lần đến đầu tiên một cách đơn giản Nếu ứng dụng dành riêng của bạn chạy dưới mức độc lập đọc lặp lại, khách hàng quét cơ sở dữ liệu để hiển thị các phòng chưa thuê để họ đăng ký ngày thuê và đồng thời cung cấp cho bạn (người quản lý) để thay đổi trạng thái của phòng để cập nhật vào cơ sở dữ liệu khi mà thực hiện yêu cầu xử lý của khách hàng Tương tự, những khách hàng khác không thể thực hiện hay hủy bỏ giao dịch nếu như một phòng nào đó đã được đăng ký thuê rồi Tuy nhiên bạn có thể cho phép thay đổi giá phòng cho bất kỳ phòng nào khi mà khách hàng chưa đăng ký thuê phòng Điều đó có nghĩa là, các khách hàng khác có thể thực hiện hay hủy bỏ việc đặt phòng cho bất kỳ phòng nào trong khi phòng đó chưa được đăng ký thuê Đặc trưng này được mô tả ở trong hình 2
Trang 14dư thừa và không lặp lại Khi mức độc lập này được sử dụng chỉ các dòng được khôi phục chính xác hoặc được sửa chữa bởi chính phiên làm việc đó được khóa lại Vì vậy, nếu phiên làm việc quét 1,000 dòng để khôi phục 10 dòng, khóa chỉ yêu cầu và nắm giữ 10 dòng đã được khôi phục đó chứ không phải khóa hết 1,000 dòng đã quét Với kết quả này, nếu cùng câu lệnh SELECT được thực hiện hai hay nhiều lần trong cùng một phiên làm việc thì tập kết quả có thể không giống nhau cho mỗi lần thực hiện
Trang 15Khi với mức độc lập đọc lặp lại, phiên làm việc được chạy dưới mức độc lập đọc
ổn định có thể khôi phục tập các hàng và thực thi bất kỳ thao tác xử lý nào trong
số đó cho đến khi bị ngắt Các phiên làm việc được ngăn lại từ thực thi cập nhật hay xử lý xóa có thể bị ảnh hưởng bởi tập các hàng được khôi phục từ chính phiên làm việc cũng như do phiên làm việc tồn tại, tuy nhiên các phiên làm việc khác có thể thực thi việc chèn vào các thao tác xử lý Nếu một dòng được chèn vào phù hợp với điều kiện lựa chọn của truy vấn bởi chính phiên làm việc xử lý đó thì các dòng này được xuất hiện như các dòng ảo trong tập dữ liệu của chuỗi kết quả Sự thay đổi này làm cho các dòng khác của các phiên làm việc khác không thể được
xử lý cho đến khi dòng đang xử lý được thực hiện
Mức độc lập đọc ổn định thay đổi cách đặt phòng khác sạn của bạn như thế nào? Khi khách hàng quét cơ sở dữ liệu để xem danh sách các phòng còn trống để đặt phòng bạn sẽ có thể thay đổi trạng thái cho bất kỳ phòng nào không có trong danh sách của khách hàng đó Ngược lại, các khách hàng khác sẽ không thể thực hiện hoặc hủy bỏ việc đặt chỗ của khách hàng khác đã đặt từ đầu nếu cùng một truy vấn giống vậy đã được chạy lần nữa Nếu khách hàng đầu tiên thực hiện truy vấn
để tìm phòng trống để đặt phòng trong cùng một ngày thì danh sách danh sách có thể chứa phòng đặt mới và/hoặc phòng đó không được đặt cho lần đầu tiên đăng
ký Đặc tính này được mô tả trong Hình 3
Trang 16Hình 3 Ví dụ của mức độc lập đọc ổn định
Mức độc lập của tham khảo ổn định (Cursor)
Mức độ độc lập thao khảo ổn định là rất thú vị trong cách độc lập tác dụng của một phiên làm việc tới các tác dụng của một phiên làm việc khác Nó cung cấp khả năng đọc các bản ghi thừa tuy nhiên trường hợp đọc các bản ghi không có khả năng lặp lại và bản ghi ảo vẫn có thể có khả năng xảy ra Điều đó bởi vì trong hầu hết các trường hợp mức độ độc lập tham khảo ổn định chỉ khóa hàng đang được tham chiếu bởi con trỏ soạn thảo đó là hàng được mô tả và mở bởi chính phiên làm việc đang xử lý
Khi một phiên làm việc sử dụng mức độc lập tham khảo ổn định để khôi phục hàng từ bảng thông qua con trỏ khi đó không thể có phiên làm việc nào có thể cập nhật hoặc xóa dòng mà con trỏ đang được đặt trong đó Tuy nhiên, các phiên làm
Trang 17việc khác có thể thêm hàng mới vào bảng cũng như cũng có thể cập nhật hoặc xóa các dòng ở vị trí bên phía kia của các dòng đã được khóa - các dòng đã bị khóa không thể truy cập đến bằng cách sử dụng chỉ mục Mỗi khi được yêu cầu, dòng khóa sẽ tồn tại trong quá trình cho đến khi con trở được thay thế hoặc cho đến phiên làm việc bị ngắt (Nếu con trỏ được thay thế vị trí, khóa được cầm trên hàng trước được giải phóng và khóa mới được yêu cầu cho hàng mà con trỏ đang đặt tại
vị trí đó) Hơn thế, nếu phiên làm việc đang làm việc thực hiện sửa bất kỳ hàng nào được khôi phục thì các phiên làm việc khác cũng không được phép cập nhật hoặc xóa hàng đó cho đến khi chính phiên làm việc đó ngắt thậm chí con trỏ soạn thảo có thể cũng không được đặt trên chính dòng được sửa chữa Như là các mức độc lập đọc lặp lại và các mức độc lập đọc ổn định, các phiên làm việc sử dụng mức độc lập tham khảo ổn định (được cho là mặc định sử dụng) sẽ không nhìn thấy sự thay đổi của các hàng khác bởi các phiên làm việc khác cho đến khi những thay đổi này được thực hiện hoàn thành
Nếu chương trình đặt phòng khách sạn đang chạy dưới mức độ độc lập tham khảo
ổn định thì thao tác xử lý nào được thực hiện Khi khách hàng duyệt qua cơ sở dữ liệu để có được danh sách các phòng trống để đặt phòng và sau đó hiển thị thông tin về mỗi phòng trong danh sách đảm bảo mỗi phòng được đăng ký tại mỗi thời điểm khác nhau khi đó bạn có thể thay đổi thông tin cho bất kỳ phòng nào trong
khách sạn ngoại trừ phòng mà khách hàng đang xem tại vị trí hiện tại (để xác định
ngày đặt phòng) Ngược lại, các khách hàng khác sẽ có thể tạo ra hoặc hủy bỏ việc
đặt phòng cho bất kỳ phòng nào trong khách sạn ngoại trừ phòng mà khách hàng
đang tìm kiếm (để xác định ngày đặt) Tuy nhiên, không phải bạn hoặc khách hàng khác sẽ có thể thực hiện bất kỳ cái gì với phòng mà khách hàng đầu tiên đang tìm kiếm Khi khách hàng đầu tiên hiển thị thông tin về phòng khác trong danh sách, bạn và các khách hàng khác sẽ có thể sửa chữa phòng mà người khách đầu tiên đã tìm kiếm; Tuy nhiên không một ai sẽ có thể được phép để thay đổi phòng mà khách hàng đầu tiên đang tìm kiếm Vấn đề này được thể hiện trong Hình 4
Trang 18Hình 4 Ví dụ của mức độc lập tham chiếu ổn định
Mức độc lập của đọc không ràng buộc
Mức độc lập đọc không ràng buộc là mức độc lập cho phép ít hạn chế nhất Trong thực tế, khi mức độc lập này được sử dụng các hàng được khôi phục bởi phiên làm việc chỉ được khóa nếu các phiên làm việc cố gắng làm giảm hoặc thay đổi bảng chứa các hàng được khôi phục Bởi vì các hàng thường không được mở khóa khi
mà mức độc lập này được sử dụng khi đó các bản ghi đọc thừa, đọc không lặp lại
và được giả lập có thể xảy ra Vì thế, mức độc lập đọc không ràng buộc là kiểu cơ bản được sử dụng cho các phiên làm việc cho phép truy cập các bảng chỉ đọc và hiển thị và cho phép các phiên làm việc thực thi các lệnh SELECT để dữ liệu không ràng buộc từ các phiên làm việc khác sẽ không có bất lợi tương ứng
Trang 19Khi đó, phiên làm việc chạy dưới mức độc lập đọc không ràng buộc có thể nhìn thấy sự thay đổi đến các hàng bởi các phiên làm việc khác trước khi các thay đổi này được thực hiện đầy đủ Tuy nhiên, mỗi một phiên làm việc có thể hoặc nhìn thấy hoặc không nhìn thấy bảng, nội dung và các chỉ số cái mà đã được làm yếu đi; phiên làm việc sử dụng đọc không ràng buộc sẽ chỉ đọc những cái gì mà đối tượng của nó không tồn tại lâu dài khi mà phiên làm việc thực hiện làm yếu đi được thực hiện hoàn thành (Có một chú ý rằng khi phiên làm việc chạy trong mức độc lập không ràng buộc mà sử dụng chế độ cập nhật con trỏ phiên làm việc sẽ thu được hiệu quả nếu đang chạy dưới chế độ độc lập tham khảo ổn định và sự bắt buộc của mức độ độc lập tham khảo ổn định được áp dụng)
Vậy áp dụng mức độc lập đọc không ràng buộc như thế nào vào ứng dụng đặt chỗ phòng khách sạn của bạn Bây giờ, khi khách hàng duyệt cơ sở dữ liệu để có được danh sách các phòng để có thể đặt chỗ bạn sẽ có thể thực hiện thay đổi giá cho bất
kỳ phòng nào trong khách sạn trong bất kỳ ngày nào Ngược lại, các khách hàng khác có thể thực hiện hoặc hủy bỏ đặt chỗ cho bất kỳ phòng nào trong khách sạn bao gồm cả phòng mà khách hàng đang tìm kiếm Thêm vào đó, danh sách các phòng cho khách hàng đầu tiên có thể chứa các bản ghi của các phòng mà các khách hàng khác đang xử lý để đặt chỗ và các phòng này thực sự là không có giá trị Đặc tính này được mô phỏng trong Hình 5
Trang 20Hình 5 Ví dụ của mức độc lập đọc không ràng buộc
Lựa chọn mức độc lập thích hợp
Mức độc lập được sử dụng có thể ảnh hưởng như thế nào để hỗ trợ giải quyết vấn
đề mâu thuẫn cơ sở dữ liệu và thực hiện các ứng dụng mâu thuẫn ra sao Đơn giản như có nhiều hạn chế khi mức độc lập được sử dụng ví dụ như vẫn còn một chút mâu thuẫn - đó là sự thực hiện cho một số ứng dụng có thể làm giảm hiệu quả khi
họ phải đợi để khóa trên các nguồn để phát hành Vì vậy bạn phải quyết định xem mức độ độc lập nào được sử dụng? Cách tốt nhất là xác định các kiểu của trường hợp đặc biệt có thể không được chấp nhận và sau đó lựa chọn mức độc lập thích hợp để ngăn chặn các trường hợp đặc biệt này xảy ra:
Sử dụng mức độc lập đọc lặp lại nếu bạn đang thực thi một lượng lớn các truy vấn và bạn không muốn các phiên làm việc có thể xảy ra đồng thời để