Tài liệu Hướng dẫn thực hành hệ quản trị cơ sở dữ liệu

pdf 17 trang hapham 2450
Bạn đang xem tài liệu "Tài liệu Hướng dẫn thực hành hệ quản trị cơ sở dữ liệu", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdftai_lieu_huong_dan_thuc_hanh_he_quan_tri_co_so_du_lieu.pdf

Nội dung text: Tài liệu Hướng dẫn thực hành hệ quản trị cơ sở dữ liệu

  1. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL HƯỚNG DẪN THỰC HÀNH HỆ QUẢN TRỊ CSDL Các phương thức khĩa và các mức cơ lập 1. Các phương thức khĩa: 2 1.1. Khái niệm đơn vị dữ liệu: 2 1.2. Tại sao lại cần các phương thức khĩa? 2 . Mất dữ liệu cập nhật (Lost update) 2 . Đọc dữ liệu chưa commit (Uncommitted data, Dirty read) 3 . Thao tác đọc khơng thể lặp lại (Unrepeatable data) 3 . Bĩng ma (Phantom) 3 1.3. Các phương thức khĩa cơ bản: 3 1.3.1. Shared Locks (S) 3 1.3.2. Exclusive Locks (X) 3 1.3.3. Update Locks (U) 4 1.3.4. Tĩm tắt 4 2. Mức cơ lập: 5 2.1. Các mức cơ lập 5 2.1.1. Read Uncommitted 5 2.1.2. Read Committed 5 2.1.3. Repeatable Read 6 2.1.4. Serializable 6 2.2. Ví dụ: 7 2.2.1. Ví dụ 1 7 Trường hợp 1 7 Trường hợp 1a 7 Trường hợp 1b 8 Trường hợp 2 8 2.2.2. Ví dụ 2 9 Trường hợp 1a 9 Trường hợp 1b 9 Trường hợp 2 10 2.2.3. Ví dụ 3 10 Trường hợp 1 11 Trường hợp 2 11 Trường hợp 2b 12 3. Chỉ định Khố trực tiếp trong từng lệnh 13 3.1. Ý nghĩa 13 3.2. Cú pháp : 13 3.3. Một số chế độ khĩa SQL Server cung cấp : 13 3.4. Những tài nguyên cĩ thể được lock: 14 3.5. Bài tập : 15 4. Deadlock : 16 Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 1 -
  2. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL 1. Các phương thức khĩa: 1.1. Khái niệm đơn vị dữ liệu: Vì các phương thức khĩa được thiết lập trên một đơn vị dữ liệu cụ thể, nên để hiểu được và các phương thức khĩa trước tiên cần tìm hiểu về khái niệm đơn vị dữ liệu. Đơn vị dữ liệu cĩ thể được chia thành nhiều cấp độ sau: . Một dịng dữ liệu. . Một trang (page) (8KB) . Một bảng (table) trong cơ sở dữ liệu. . Một cơ sở dữ liệu (database). 1.2. Tại sao lại cần các phương thức khĩa? Giả sử cĩ 2 transaction đang truy xuất đồng thời trên 1 đơn vị dữ liệu. Cĩ tất cả 4 trường hợp sau: Trong connection C1 cĩ Trong connection C2 cĩ Nhận xét một transaction như sau: transaction như sau: Đọc Đọc Khơng cĩ tranh chấp. Đọc Ghi Xảy ra tranh chấp Ghi Đọc Xảy ra tranh chấp HQT chỉ cho phép cĩ đúng 1 transaction được Ghi Ghi ghi trên đơn vị dữ liệu tại một thời điểm. Như vậy khi cĩ 2 transaction (của 2 connection khác nhau) cĩ ít nhất 1 thao tác ghi trên cùng một đơn vị dữ liệu sẽ xảy ra tình trạng tranh chấp. Nếu để tình trạng tranh chấp này xảy ra sẽ dẫn đến những sai sĩt trên CSDL. Để giải quyết các vấn đề tranh chấp nêu trên, hệ quản trị cơ sở dữ liệu cần sử dụng các phương thức khĩa, nhờ vậy mà khi cĩ tranh chấp xảy ra hệ quản trị cơ sở dữ liệu cĩ thể quyết định transaction nào được ưu tiên và transaction nào phải chờ. Trong mơi trường truy xuất đồng thời, cĩ thể xảy ra một số vấn đề như sau: . Mất dữ liệu cập nhật (Lost update) Tình trạng này xảy ra khi cĩ nhiều hơn một giao tác cùng thực hiện cập nhật trên 1 đơn vị dữ liệu. Khi đĩ, tác dụng của giao tác cập nhật thực hiện sau sẽ đè lên tác dụng của thao tác cập nhật trước. Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 2 -
  3. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL . Đọc dữ liệu chưa commit (Uncommitted data, Dirty read) Xảy ra khi một giao tác thực hiện đọc trên một đơn vị dữ liệu mà đơn vị dữ liệu này đang bị cập nhật bởi một giao tác khác nhưng việc cập nhật chưa được xác nhận đã hồn tất. . Thao tác đọc khơng thể lặp lại (Unrepeatable data) Tình trạng này xảy ra khi một giao tác T1 vừa thực hiện xong thao tác đọc trên một đơn vị dữ liệu (nhưng chưa commit) thì giao tác khác (T2) lại thay đổi (ghi) trên đơn vị dữ liệu này. Điều này làm cho lần đọc sau đĩ của T1 khơng cịn nhìn thấy dữ liệu ban đầu nữa. . Bĩng ma (Phantom) Là tình trạng mà một giao tác đang thao tác trên một tập dữ liệu nhưng giao tác khác lại chèn thêm hoặc xĩa đi các dịng dữ liệu vào tập dữ liệu mà giao tác kia quan tâm. 1.3. Các phương thức khĩa cơ bản: 1.3.1. Shared Locks (S) . Shared Lock  Read Lock . Khi đọc 1 đơn vị dữ liệu, SQL Server tự động thiết lập Shared Lock trên đơn vị dữ liệu đĩ (trừ trường hợp sử dụng No Lock) . Shared Lock cĩ thể được thiết lập trên 1 bảng, 1 trang, 1 khĩa hay trên 1 dịng dữ liệu. . Nhiều giao tác cĩ thể đồng thời giữ Shared Lock trên cùng 1 đơn vị dữ liệu. . Khơng thể thiết lập Exclusive Lock trên đơn vị dữ liệu đang cĩ Shared Lock. . Shared Lock thường được giải phĩng ngay sau khi sử dụng xong dữ liệu được đọc, trừ khi cĩ yêu cầu giữ shared lock cho đến hết giao tác (như yêu cầu RepeatableRead, Serializable, HoldLock). 1.3.2. Exclusive Locks (X) . Exclusive Lock  Write Lock . Khi thực hiện thao tác ghi (insert, update, delete) trên 1 đơn vị dữ liệu, SQL Server tự động thiết lập Exclusive Lock trên đơn vị dữ liệu đĩ. . Exclusive Lock luơn được giữ đến hết giao tác. . Tại 1 thời điểm, chỉ cĩ tối đa 1 giao tác được quyền giữ Exclusive Lock trên 1 đơn vị dữ liệu. . Khơng thể thiết lập Exclusive Lock trên đơn vị dữ liệu đang cĩ Shared Lock. Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 3 -
  4. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL 1.3.3. Update Locks (U) . Update Lock = Intent-to-update Lock . Update Lock sử dụng khi đọc dữ liệu với dự định ghi trở lại sau khi đọc đơn vị dữ liệu này. . Update Lock là chế độ khĩa trung gian giữa Shared Lock và Exclusive Lock. Shared Lock S Update Lock U Tương thích với Shared Lock Tương thích với Shared Lock Sử dụng trong việc đọc dữ liệu Sử dụng trong việc đọc dữ liệu Tại 1 thời điểm cĩ thể cĩ nhiều Shared Tại 1 thời điểm, cĩ tối đa 1 Update Lock trên cùng1 đơn vị dữ liệu Lock trên 1 đơn vị dữ liệu . Update Lock khơng ngăn cản việc thiết lập các Shared Lock khác trên cùng 1 đơn vị dữ liệu => Update Lock tương thích với Shared Lock . Update Lock giúp tránh hiện tượng deadlock khi cĩ yêu cầu chuyển từ Shared Lock lên Exclusive Lock trên 1 đơn vị dữ liệu nào đĩ (Do tại 1 thời điểm chỉ cĩ tối đa 1 Update Lock trên 1 đơn vị dữ liệu) 1.3.4. Tĩm tắt Ta cĩ bảng tương thích giữa các loại khĩa như dưới đây. Hai loại khĩa x,y được gọi là tương thích (ghi nhận bởi +, ngược lại khơng tương thích ghi nhần -) nếu như tại một thời điềm cĩ thể cĩ hai transaction đồng thời giữ 2 loại lock này trên cùng 1 đơn vị dữ liệu. Shared lock Updlock Exclusive Lock Shared lock + + - Updlock + - - Exclusive Lock - - - Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 4 -
  5. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL 2. Mức cơ lập: 2.1. Các mức cơ lập 2.1.1. Read Uncommitted . Đặc điểm: – Khơng thiết lập Shared Lock trên những đơn vị dữ liệu cần đọc. Do đĩ khơng phải chờ khi đọc dữ liệu (kể cả khi dữ liệu đang bị lock bởi giao tác khác) – ( Vẫn tạo Exclusive Lock trên đơn vị dữ liệu được ghi, Exclusive Lock được giữ cho đến hết giao tác) . Ưu điểm: – Tốc độ xử lý rất nhanh – Khơng cản trở những giao tác khác thực hiện việc cập nhật dữ liệu . Khuyết điểm: – Cĩ khả năng xảy ra mọi vấn đề khi xử lý đồng thời : Dirty Reads Unrepeatable Reads Phantoms Lost Updates 2.1.2. Read Committed . Đặc điểm: – Đây là mức độ cơ lập mặc định của SQL Server – Tạo Shared Lock trên đơn vị dữ liệu được đọc, Shared Lock được giải phĩng ngay sau khi đọc xong dữ liệu – Tạo Exclusive Lock trên đơn vị dữ liệu được ghi, Exclusive Lock được giữ cho đến hết giao tác . Ưu điểm: – Giải quyết vấn đề Dirty Reads – Shared Lock được giải phĩng ngay, khơng cần phải giữ cho đến hết giao tác nên khơng cản trở nhiều đến thao tác cập nhật của các giao tác khác. . Khuyết điểm: – Chưa giải quyết được vấn đề Unrepeatable Reads, Phantoms, Lost Updates – Phải chờ nếu đơn vị dữ liệu cần đọc đang được giữ khố ghi (xlock) Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 5 -
  6. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL 2.1.3. Repeatable Read . Đặc điểm: – Tạo Shared Lock trên đơn vị dữ liệu được đọc và giữ Shared lock này đến hết giao tác => Các giao tác khác phải chờ đến khi giao tác này kết thúc nếu muốn cập nhật, thay đổi giá trị trên đơn vị dữ liệu này . – (Repeatable Read = Read Committed + Giải quyết Unrepeatable Reads) – Tạo Exclusive Lock trên đơn vị dữ liệu được ghi, Exclusive Lock được giữ cho đến hết giao tác. . Ưu điểm: – Giải quyết vấn đề Dirty Reads và Unrepeatable Reads . Khuyết điểm: – Chưa giải quyết được vấn đề Phantoms, do vẫn cho phép insert những dịng dữ liệu thỏa điều kiện thiết lập shared lock – Phải chờ nếu đơn vị dữ liệu cần đọc đang được giữ khố ghi (xlock) – Shared lock được giữ đến hết giao tác ==> cản trở nhiều đến việc cập nhật dữ liệu của các giao tác khác 2.1.4. Serializable . Đặc điểm: – Tạo Shared Lock trên đơn vị dữ liệu được đọc và giữ shared lock này đến hết giao tác => Các giao tác khác phải chờ đến khi giao tác này kết thúc nếu muốn cập nhật, thay đổi giá trị trên đơn vị dữ liệu này . – Khơng cho phép Insert những dịng dữ liệu thỏa mãn điều kiện thiết lập Shared Lock (sử dụng Key Range Lock, xác lập khĩa trên miền giá trị khơng phải trên đơn vị dữ liệu) ==> Serializable = Repeatable Read + Giải quyết Phantoms – Tạo Exclusive Lock trên đơn vị dữ liệu được ghi, Exclusive Lock được giữ cho đến hết giao tác. . Ưu điểm: – Giải quyết thêm được vấn đề Phantoms . Khuyết điểm: – Phải chờ nếu đơn vị dữ liệu cần đọc đang được giữ khố ghi (xlock) – Cản trở nhiều đến việc cập nhật dữ liệu của các giao tác khác Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 6 -
  7. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL 2.2. Ví dụ: Trong phần này sẽ trình bày một số ví dụ, lấy bối cảnh trên bài tập Quản lý thư viện. Để hiểu rõ hơn về các mức cơ lập, hãy xem và chạy thử nghiệm các ví dụ sau: 2.2.1. Ví dụ 1 So sách mức cơ lập READ UNCOMMITTED và READ COMMITTED. Giả sử ban đầu trong bảng ĐOCGIA chưa cĩ độc giả nào cĩ tên là ‘xxx’ Trường hợp 1 T1 T2 begin tran update DocGia set TEN = ‘xxx’ where Ma_docgia < 11 waitfor delay‘00:00:05’ Begin tran Select * from DocGia where TEN = ‘xxx’ rollback Commit Nhận xét kết quả ? Giải thích ? Các vấn đề : 1. Mức cơ lập mặc định là gì ? Chú ý kết quả xuất của T2, cĩ phản ánh sự thay đổi của T1? Trường hợp 1a T1 T2 begin tran update DocGia set TEN = ‘xxx’ where Ma_docgia < 11 waitfor delay‘00:00:05’ begin tran select * from DocGia where TEN = ‘xxx’ Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 7 -
  8. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL rollback Commit Nhận xét kết quả ? Giải thích ? Trường hợp 1b T1 T2 begin tran update DocGia set TEN = ‘xxx’ where Ma_docgia < 11 waitfor delay‘00:00:05’ begin tran set tran isolation level READ UNCOMMITTED select * from DocGia where TEN = ‘xxx’ rollback commit Nhận xét kết quả ? Giải thích ? Trường hợp 2 T1 T2 begin tran update DocGia set TEN = ‘xxx’ where Ma_docgia < 11 waitfor delay‘00:00:05’ begin tran set tran isolation level READ COMMITTED select * from DocGia Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 8 -
  9. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL where TEN = ‘xxx’ commit rollback Nhận xét kết quả ? Giải thích ? 2.2.2. Ví dụ 2 So sách mức cơ lập READ COMMITTED và REPEATABLE READ. Thử nghiệm nếu 1 transaction đang thực hiện thao tác đọc, cĩ cho phép transaction khác thực hiện thao tác ghi (update, delete) trên cùng 1 đơn vị dữ liệu khơng? Giả sử ban đầu trong bảng ĐOCGIA chưa cĩ độc giả nào cĩ tên là ‘xxx’. Trường hợp 1a T1 T2 begin tran set tran isolation level READ COMMITTED; select TEN from DocGia where ma_docgia = 1 waitfor delay‘00:00:05’; begin tran update DocGia; set TEN= ’xxx’ where ma_docgia =1 ; commit commit Nhận xét: T2 khơng cần chờ T1 thực hiện xong mới thực hiện được lệnh Update. Giải thích ? Trường hợp 1b T1 T2 begin tran set tran isolation level READ COMMITTED; select TEN from DocGia where ma_docgia =1; waitfor delay‘00:00:05’; Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 9 -
  10. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL begin tran update DocGia set TEN= ’xxx’ where ma_docgia = 1; select TEN from DocGia where ma_docgia =1 commit commit Nhận xét kết quả ? Giải thích ? Trường hợp 2 T1 T2 begin tran set tran isolation level REPEATABLE READ select TEN from DocGia where ma_docgia = 1 waitfor delay‘00:00:05’ begin tran update DocGia set TEN= ’xxx’ where ma_docgia =1 select TEN from DocGia where ma_docgia =1 commit commit Nhận xét kết quả ? Giải thích? 2.2.3. Ví dụ 3 So sách mức cơ lập REPEATABLE READ và SERIALIZABLE. Thử nghiệm xem nếu 1 transaction đang đọc cĩ cho phép một transaction khác thực hiện ghi (insert) trên cùng 1 đơn vị dữ liệu khơng? Giả sử ban đầu trong bảng ĐOCGIA chưa cĩ độc giả nào cĩ tên là ‘xxx’. Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 10 -
  11. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL Trường hợp 1 T1 T2 begin tran set tran isolation level REPEATABLE READ select TEN from DocGia where ma_docgia > 90 waitfor delay‘00:00:05’ begin tran INSERT into DocGia VALUES (111,'Tuyết', ) ; select TEN from DocGia where ma_docgia >90 commit commit Nhận xét kết quả ? Giải thích ? Trường hợp 2 T1 T2 begin tran set tran isolation level SERIALIZABLE ; select TEN from DocGia where ma_docgia >90 ; waitfor delay‘00:00:05’ ; begin tran INSERT into DocGia VALUES (111, 'Tuyết', ) ; commit commit Nhận xét kết quả ? Giải thích ? Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 11 -
  12. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL Trường hợp 2b T1 T2 begin tran begin tran set tran isolation level SERIALIZABLE; select TEN from DocGia where ma_docgia >90; waitfor delay‘00:00:05’; begin tran INSERT into DocGia VALUES (111, 'Tuyết', ) ; select TEN from DocGia where ma_docgia>90; commit commit Nhận xét kết quả ? Giải thích ? 2.3. Theo dõi hoạt động của các loại khĩa: Sử dụng sp_lock (SQL Server 2000) hoặc sys.dm_tran_locks (SQL Server 2005). 2.3.1. Dùng sp_lock : 2.3.2. Dùng sys.dm_tran_locks : Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 12 -
  13. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL Chỉ định Khố trực tiếp trong từng lệnh 2.4. Ý nghĩa Đặt mức cơ lập cho các transaction trong một số trường hợp khơng đủ để giải quyết các vấn đề khi chúng thực hiện đồng thời. SQL Server cung cấp cách thức khác đầy đủ và linh hoạt hơn : dùng khố trực tiếp (lock hints) trong từng câu lệnh : Lưu ý : - Một khi đã thiết lập mức cơ lập bằng lệnh SET TRANSACTION ISOLATION LEVEL , mức cơ lập được chỉ định sẽ cĩ tác dụng lên tồn bộ các lệnh trong các transaction thực hiện từ đĩ trở về sau trên connection đĩ, cho đến khi ta tường minh thiết lập lại mức khác. - Nếu một lệnh (select/ insert/ delete/ update ) khơng được chỉ định lock trực tiếp, nĩ sẽ hoạt động theo mức cơ lập chung hiện hành của connection. 2.5. Cú pháp : đọc select from table1 with (lock1[, lock2, ] ), table2 with ( ), where ; ghi delete from/ insert into / update table1 with (lock1 [, lock2, ]) where ; 2.6. Một số chế độ khĩa SQL Server cung cấp : STT Khĩa Ý nghĩa 1 READUNCOMITTED/ - Khơng thiết lập shared lock khi đọc (tương tự NOLOCK mức cơ lập read uncommitted) 2 READCOMMITTED - Đây là chế độ mặc định (tương tự mức cơ lập read committed) - Chỉ đọc những dữ liệu đã được commit - Thiết lập shared lock trên đơn vị dữ liệu cần đọc và mở lock ra ngay sau khi đọc xong Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 13 -
  14. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL 3 REPEATABLEREAD Thiết lập shared lock khi đọc và giữ shared lock đến hết giao tác (tương tự mức cơ lập repeatable read) 4 SERIALIZABLE/ - Thiết lập shared lock khi đọc và giữ đến hết HOLDLOCK giao tác, khơng cho insert những dịng thỏa điều kiện thiết lập khĩa (tương tự như mức cơ lập Serializable ) 5 UPDLOCK - Dùng update lock thay vì shared lock khi đọc. - Chỉ sử dụng trong câu select - Updlock được giữ đến hết giao tác. 6 XLOCK - Chỉ định dùng khố độc quyền 7 READPAST - Chỉ cĩ thể sử dụng trong lệnh Select và chỉ áp dụng trên khĩa của dịng dữ liệu (row-lock). Những dịng bị khĩa sẽ được bỏ qua. 8 ROWLOCK - Chỉ đặt khĩa trên những dịng cần thao tác 9 TABLOCK - Khĩa tồn bộ bảng trong CSDL. - Các thao tác cập nhật (insert/ delete/ update) của những giao tác khác khơng thể thực hiện trên bảng này trong khi khĩa vẫn đang được giữ. 10 TABLOCKX - xlock+tablock Ghi chú : - 1,2,3,5,6,7 chỉ cĩ ý nghĩa khi dùng trong câu select - 1,2,3,5,6,7,10 cĩ thể kết hợp với 4 (khĩa theo kiểu key-range) và 8,9 (chỉ ra đơn vị dữ liệu cần khĩa) 2.7. Những tài nguyên cĩ thể được lock: Tài nguyên Ý nghĩa Database - Khĩa trên tồn bộ cơ sở dữ liệu - Chỉ nên áp dụng khi tiến hành thay đổi trên lược đồ của CSDL. Table - Khĩa trên 1 bảng trong cơ sở dữ liệu. Tồn bộ các đối tượng trong bảng này, bao gồm tất cả các dịng và tất cả các khĩa trong các chỉ mục trong bảng, đều bị khĩa. Extent - Khĩa trên 1 extend (= 8 trang). Page - Khĩa trên 1 trang. Tất cả dữ liệu và các khĩa chỉ mục trong trang này đều bị khĩa. Key - Khĩa trên 1 hay 1 số khĩa (key) trong 1 chỉ mục. Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 14 -
  15. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL Row - Được đưa vào SQL Server từ version 7.0. - Khĩa trên 1 dịng dữ liệu trong 1 bảng. 2.8. Bài tập : Với transaction thêm tựa sách (stored proc 4.7) hãy bổ sung thêm lệnh waitfor delay ‘00:00:10’ vào trước lệnh insert. Sau đĩ giả lập 2 giao dịch cùng thực hiện stored procedure này, lần lượt với các mức cơ lập : read uncommitted, read commited, repeatable read, serializable. Nhận xét về các vấn đề xảy ra. Trở lại mức cơ lập mặc định, hãy đặt lock trực tiếp vào các lệnh sao cho cĩ thể giải quyết các vấn đề trên một cách hiệu quả nhất. Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 15 -
  16. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL 3. Deadlock : Deadlock cĩ thể xảy ra trong các tình huống sau :  Tình huống 1 : cycle deadlock Transaction 1 Transaction 2 insert/delete/update (A) insert/delete/update (B) insert/delete/update (B) insert/delete/update (A) commit commit Trong đĩ A và B là hai đơn vị dữ liệu khác nhau. Lưu ý : trên SQL Server, đối với tình huống này, nếu thao tác thứ 2 của transaction 1 hoặc transaction 2 là insert, thì deadlock sẽ khơng xảy ra khi mức cơ lập khơng phải là serializable và các transaction cũng khơng dùng tablock hay holdlock trong các thao tác trước.  Tình huống 2 : Conversion deadlock : Transaction 1 Transaction 2 select (A) select (A) insert/delete/update (A) insert/delete/update (A) commit commit Trên SQL Server, đối với tình huống này thì deadlock sẽ xảy ra khi nào ? Transaction 1 Transaction 2 Transaction 1 Transaction 2 Giữ Giữ Giữ Giữ TAB1 TAB2 S-L ock S-L ock X-L ock X-L ock trên trên bảng bảng Data TAB1 TAB2 Yêu cầu Yêu cầu Deadlock Yêu cầu Yêu cầu TAB2 TAB1 X-L ock X-L ock X-L ock Deadlock X-L ock trên trên bảng bảng TAB1 TAB2 Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 16 -
  17. Phạm Nguyên Thảo, Vũ Giang Nam Tài liệu hướng dẫn thực hành HQTCSDL cycle deadlock conversion deadlock HẾT Bộ mơn Hệ Thống Thơng Tin – Khoa CNTT – ĐH KHTN - 17 -