Bài giảng Hệ quản trị cơ sở dữ liệu - Chương 6: Giao tác - Tuấn Nguyên Hoài Đức

Giao tác (Transac.on)
• Xử lý đồng thời (Concurrency)
• Chế độ khóa
• Khai báo tường minh giao tác
• Mức cô lập
• Các cấp độ khóa
• Dead-lock 
pdf 53 trang xuanthi 30/12/2022 360
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ quản trị cơ sở dữ liệu - Chương 6: Giao tác - Tuấn Nguyên Hoài Đức", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfbai_giang_he_quan_tri_co_so_du_lieu_chuong_06_giao_tac_tuan.pdf

Nội dung text: Bài giảng Hệ quản trị cơ sở dữ liệu - Chương 6: Giao tác - Tuấn Nguyên Hoài Đức

  1. Nội dung trình bày • Giao tác (Transacon) • Xử lý đồng thời (Concurrency) • Chế độ khóa • Khai báo tường minh giao tác • Mức cô lập • Các cấp độ khóa • Dead-lock Chương VI : Giao tác 2
  2. Giao tác (transaction) • Ví dụ : chuyển khoản 100$ từ tài khoản A sang tài khoản B (50$) và tài khoản C (50$). Các bước thực hiện gồm : • Trừ 100$ khỏi tài khoản A • Nếu số dư trong A =0 thì • Cộng 50$ vào tài khoản B • Cộng 50$ vào tài khoản C • Nếu số dư trong A = 0 thì tất toán tài khoản A Chương VI : Giao tác 4
  3. Giao tác (transaction) • Các nh chất : • Tính nguyên tố (Atomic) : Một giao tác là một đơn nguyên (atom), nghĩa là các công việc trong ấy không tách rời nhau được • Tính nhất quán (Consistent) : Một giao tác có thể làm thay đổi nh trạng CSDL, nhưng không được làm mất nh nhất quán vốn có của CSDL Chương VI : Giao tác 6
  4. Giao tác (transaction) • Các nh chất : • Atomic • Consistent • Isolated • Durable ACID Chương VI : Giao tác 8
  5. Nội dung trình bày • Giao tác (Transacon) • Xử lý đồng thời (Concurrency) • Chế độ khóa • Khai báo tường minh giao tác • Mức cô lập • Các cấp độ khóa • Dead-lock Chương VI : Giao tác 10
  6. Xử lý đồng thời (Concurrency) • Các Ti và Tj đồng thời truy xuất và thay đổi CSDL trên server và có thể xung đột, tranh chấp lẫn nhau. • Việc dàn xếp các xung đột, tranh chấp này sao cho ổn thỏa và bào đảm nhất quán dữ liệu gọi là xử lý đồng thời (concurrency) Chương VI : Giao tác 12
  7. Xử lý đồng thời (Concurrency) • Các vấn đề xử lý đồng thời • Mất dữ liệu cập nhật (Lost update) T1 T2 1.Begin tran 2.Begin tran 3.Read A 4.Read A Dữ liệu 5.a = A*3 cập nhật Ghi đè 6.b = A*2 bị mất 7.Write A,a 8.Commit tran 9.Write A,b 10.Commit tran Chương VI : Giao tác 14
  8. Xử lý đồng thời (Concurrency) • Các vấn đề xử lý đồng thời • Không thể đọc lại (Unrepeatable read) T1 T2 1.Begin tran Đọc 2.Begin tran thấy 3.read A a_old 4.write A,a_new 5.Commit tran n.read A Thao Đọc n+1.Commit tran tác ghi thấy chen a_new ngang à Bất ngờ Chương VI : Giao tác 16
  9. Nội dung trình bày • Giao tác (Transacon) • Xử lý đồng thời (Concurrency) • Chế độ khóa • Khai báo tường minh giao tác • Mức cô lập • Các cấp độ khóa • Dead-lock Chương VI : Giao tác 18
  10. Chế độ khóa • Các loại khóa • Khóa chia sẻ (shared lock) : Còn gọi là khóa đọc (read lock) . Gọi tắt : Khóa S • Khóa dự định ghi (Intend to write lock) : Còn gọi là khóa cập nhật (update lock) . Gọi tắt : Khóa U • Khóa độc quyền (exclusive lock) : Còn gọi là khóa ghi (write lock). Gọi tắt : Khóa X. Khóa X luôn được phát ra khi ghi, bất kể thông số hệ thống đang thiết lập thế nào. Chương VI : Giao tác 20
  11. Chế độ khóa • Khi một transacon Ti cần truy cập và thao tác trên một đơn vị dữ liệu X, nó sẽ đòi phát khóa A trên X. Nhưng khi ấy nếu transacon Tj đang giữ khóa B trên X (và khóa A với khóa B không tương thích) thì Ti phải đợi Tj giải phóng khóa B trên X nó mới phát được khóa A trên X à Hiện tượng chờ đợi lẫn nhau. Chương VI : Giao tác 22
  12. Khai báo tường minh giao tác • Trong SQL Server, ta có thể khai báo tường minh các giao tác, có thể là trên một khối lệnh độc lập hay trong thân một thủ tục thường trú. • Ngoài ra SQL Server còn có thể phát sinh các giao tác ngầm định (Ví dụ : Trigger) Chương VI : Giao tác 24
  13. Khai báo tường minh giao tác • Kiểm lỗi trong giao tác • Lỗi có thể sảy ra sau các thao tác : • Insert, Update (trùng khóa chính, sai kiểu dữ liệu, sai định dạng ngày tháng, ) • Delete (ràng buộc tồn tại, ) • Select (login không có quyền trên object ) • Sau mỗi thao tác trên phải kiểm lỗi bằng biến hệ thống @@error (=0 à không có lỗi,≠0 à có lỗi) • Có thể không kiểm tra lệnh select để tránh làm cho giao tác quá cồng kềnh (vì lỗi này ít khi sảy ra và có thể khống chế được so với 2 loại lỗi cón lại) Chương VI : Giao tác 26
  14. Khai báo tường minh giao tác • Kiểm lỗi trong giao tác If @@error <> 0 Begin Print ‘ ’ Rollback tran Return End Khối lệnh kiểm tra lỗi Chương VI : Giao tác 28
  15. Khai báo tường minh giao tác • Ví dụ Set @DonGia = (select DonGia from DonHang where Ma = @MaDH) Khối lệnh kiểm tra lỗi Set @TienThue = (select ThueSuat from DonHang where Ma = @MaDH) Khối lệnh kiểm tra lỗi Set @TienChietKhau = (select ChietKhau from DonHang where Ma = @MaDH) Khối lệnh kiểm tra lỗi Set @ThanhTien = @DonGia*@SoLuong Set @TienThue = @ThanhTien*@TienThue/100 Set @ThanhTien = @ThanhTien + @TienThue Chương VI : Giao tác 30
  16. Nội dung trình bày • Giao tác (Transacon) • Xử lý đồng thời (Concurrency) • Chế độ khóa • Khai báo tường minh giao tác • Mức cô lập • Các cấp độ khóa • Dead-lock Chương VI : Giao tác 32
  17. Mức cô lập cho giao tác • Khái niệm • Tầm vực của Isolaon level là ở mức connecon chứ không phải mức transacon. Khi 1 connecon N được đặt mức cô lập X thì X sẽ phát huy hiệu lực trên tất cả các transacon Ti chạy trên N. • Phải đặt mức cô lập thích hợp cho 1 transacon trước khi bắt đầu nó (begin tran) • Mức cô lập chỉ quyết định cách phát và giữ khóa S của transacon (vì khóa X luôn được phát ra khi ghi). Mức cô lập không quan tâm khóa U Chương VI : Giao tác 34
  18. Mức cô lập cho giao tác • Bốn mức cô lập mà SQL Server cung cấp • Repeatable Read : Phát S khi đọc và giữ S đến khi transacon kết thúc. Không ngăn chặn lệnh insert dữ liệu thoả điều kiện thiết lập S. Giải quyết được Dirty Read và Unrepeatable Read • Seralizable : Giống Repeatable Read nhưng có ngăn chặn lệnh insert dữ liệu thoả điều kiện thiết lập S. Giải quyết được Dirty Read và Unrepeatable Read và Phantom Chương VI : Giao tác 36
  19. Mức cô lập cho giao tác • Thiết lập : • Đặt lệnh thiết lập cần thiết trước khi bắt đầu giao tác. Không nên ỉ lại vào thiết lập mặc định • Lệnh thiết lập : • Set transacon Isolaon level Tên_MứcCôLập • Ví dụ : • Set transacon Isolaon level Read Commited • Set transacon Isolaon level Serializable Chương VI : Giao tác 38
  20. Nội dung trình bày • Giao tác (Transacon) • Xử lý đồng thời (Concurrency) • Chế độ khóa • Khai báo tường minh giao tác • Mức cô lập • Các cấp độ khóa • Dead-lock Chương VI : Giao tác 40
  21. Các cấp độ khóa • Khái niệm • Cấp độ khóa là các loại khóa khác nhau (không chỉ khóa S) được gắn vào từng table trong mệnh đề from của từng thao tác select • Ngoài lệnh select, cấp độ khóa còn có thể gắn vào các câu lệnh cập nhật, tuy nhiên ở đây ta chỉ quan tâm câu select Chương VI : Giao tác 42
  22. Các cấp độ khóa • Cách thiết lập Select From {Tab1 Alias1 with Lock_mode [, n]} [, n] Where • Ví dụ : Select SV.HoVaTen, K.TenKhoa From SinhVien SV with ReadCommited, Khoa K with Updlock Where SV.Khoa = K.Ma And Year(SV.NgaySinh) >= 1983 Chương VI : Giao tác 44
  23. Các cấp độ khóa • Khóa với dữ liệu trong cursor • Nếu cursor là loại nh (stac) thì các đơn vị dữ liệu đọc ra sẽ được lock ngay khi vừa Open cursor • Nếu cursor là loại động (Dynamic) thì fetch đến đâu sẽ khóa đến đó • Cách phát khóa và giữ khóa là do mức cô lập của connecon và các lock mode trong câu select định nghĩa cursor quyết định Chương VI : Giao tác 46
  24. Dead lock • Khái niệm • Khi xử lý đồng thời, không tránh khỏi việc transacon này phải chờ đợi transacon khác • Nếu vì lý do gì đó mà hai transacon lại chờ lẫn nhau vĩnh viễn, không cái nào trong hai có thể hoàn thành được thì ta gọi đó là hiện tượng Dead Lock Chương VI : Giao tác 48
  25. Dead lock • Phân loại • Cyclic Deadlock T1 T2 Giữ X lock Đơn vị DL 1 DEAD Đơn vị DL 2 Giữ X lock Trên đơn vị DL 1 LOCK Trên đơn vị DL 2 Đơn vị DL 2 Đơn vị DL 1 Đòi phát lock Trên đơn vị DL 1 Đòi phát lock Trên đơn vị DL 2 Chương VI : Giao tác 50
  26. Dead lock • Khi dead lock sảy ra • SQL Server sẽ chọn 1 trong 2 transacon gây dead lock để hủy bỏ, khi đó transacon còn lại sẽ được ếp tục thực hiện cho đến khi hoàn tất • Transacon bị chọn hùy bỏ là transacon mà SQL ước nh chi phí cho phần việc đã làm được ít hơn transacon còn lại. Chương VI : Giao tác 52