Bài giảng Hệ quản trị cơ sở dữ liệu - Chương 7: Giao tác - Hồ Lê Thị Kim Nhung

Ví dụ 1:
TaiKhoan (MaTK, HoTen, SoDu)
— Xét store procedure spRutTien
◦ Bước 1: Đọc số dư tài khoản
◦ Bước 2: Kiểm tra số dư tài khoản
◦ Bước 3: Nếu đủ tiền
◦ Bước 3.1: Cập nhật tài khoản với số dư mới
◦ Bước 3.2: Trả tiền ra máy ATM
◦ Bước 4: Nếu không đủ tiền thì kết thúc 
pdf 57 trang xuanthi 30/12/2022 420
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 7: Giao tác - Hồ Lê Thị Kim Nhung", để 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_07_giao_tac_ho_le.pdf

Nội dung text: Bài giảng Hệ quản trị cơ sở dữ liệu - Chương 7: Giao tác - Hồ Lê Thị Kim Nhung

  1. Nội dung 1 Giới thiệu 2 Giao tác 3 Điều khiển đồng thời 2 www.themegallery.com
  2. Giới thiệu Ví dụ 1: — Nhận xét ◦ Nếu bước 3.1 thực hiện được và 3.2 bị lỗi è cập nhật mà không trả tiền ◦ Nếu bước 3.2 thực hiện được mà 3.1 bị lỗi è trả tiền mà không cập nhật tài khoản Ø Dữ liệu bị sai — Mong muốn ◦ Bước 3.1 và 3.2 phải được thực hiện hết hoặc không thực hiện được bước nào. 4 www.themegallery.com
  3. Giới thiệu Ví dụ 2: — Nhận xét ◦ Nếu bước 2 thành công, bước 3 bị lỗi è SoDu của tài khỏan @tk1 bị trừ nhưng SoDu của @tk2 không được tăng lên. Ø Bị lỗi — Mong muốn ◦ Bước 2 và bước 3 phải được thực hiện hết hoặc không có bước nào được thực hiện. 6 www.themegallery.com
  4. Giới thiệu Ví dụ 3: — Nhận xét: ◦ Giả sử gọi spThemNguoiLon để thêm một đọc giả mà nhỏ hơn 18 tuổi Giải quyết à Có 1 bộ thêm vào bảng DocGia ??? à Có 0 bộ thêm vào bảng NgLon Ø Dữ liệu bị saiKhai báo các bước muốn có đặc — Mong muốn: điểm như trên vào trong 1 giao tác ◦ Bước 2 và bước 5 phải được thực hiện hết, hoặc không thực hiện bước nào hết. 8 www.themegallery.com
  5. Giao tác • Giao tác là một tập các lệnh có truy xuất đến CSDL • Giao tác phải đảm bảo tính ACID Giao tác 10 www.themegallery.com
  6. Khai báo giao tác • Một số từ khóa: ◦ Begin tran: Bắt đầu giao tác ◦ Commit : Kết thúc giao tác (thành công) q Dữ liệu sẽ được xác nhận trên CSDL ◦ Rollback: Kết thúc giao tác (thất bại) q Dữ liệu sẽ được khôi phục về trạng thái ban đầu • Khi nào thì rollback ? ◦ Khi có một lệnh nào đó trong giao tác bị lỗi và cần phải khôi phục lại dữ liệu. 12 www.themegallery.com
  7. Xác định lỗi • Lỗi do người dùng: ◦ Đọc giả thêm vào nhỏ hơn 18 tuổi ◦ Xác định lỗi dựa vào đoạn code do người dùng viết. ◦ Ví dụ: IF @tuoi < 18 BEGIN Các câu lệnh xử lý khi bị lỗi END 14 www.themegallery.com
  8. Cú pháp khai báo • Bước 3: Sau mỗi lần kiểm tra lỗi của người dùng è Nếu có lỗi thì có những xử lý phù hợp. IF [điều kiện gây ra lỗi thỏa mãn] BEGIN raiserror ('Lỗi rồi !!!' 16, 1) rollback –- một cách hợp lý END 16 www.themegallery.com
  9. CSDL Quản lý thư viện 18 www.themegallery.com
  10. Bối cảnh Website bàn hàng 20 www.themegallery.com
  11. Bối cảnh vMô hình ứng dụng đa người dùng Một CSDL lưu tại Server và nhiều clients đồng thời truy cập và thao tác trên cùng CSDL vGiao tác Ti của client X đang thao tác trên CSDL, trong khi đó một giao tác Tj của client Y cũng đang thực hiện truy xuất và thay đổi CSDL. ðCác Ti và Tj có thể xung đột, tranh chấp lẫn nhau. 22 www.themegallery.com
  12. Giao tác lồng nhau v Tham số @@trancount cho biết số transaction đang thực thi. v Khi khai báo transaction tường minh, phải rollback hoặc commit tường minh để: § Giải phóng tài nguyên transaction đang chiếm giữ. §Tránh cản trở việc thực hiện của các transaction khác. 24 www.themegallery.com
  13. Dirty read STT T1 T2 1 Begin tran 2 Begin tran 3 write (A) //Insert | Update 4 read (A) 5 If (Lỗi) 6 Rollback tran 7 Commit tran 8 Commit tran ð T đọc dữ liệu (rác) đã bị T hủy. 2 1 26 www.themegallery.com
  14. Phantom STT T1 T2 1 Begin tran 2 Begin tran 3 Read(A) 4 write(B) //Insert | Update 5 Read(A, B) 6 Commit tran 7 Commit tran ð T1 đọc tập dữ liệu 2 lần khác nhau 28 www.themegallery.com
  15. Lỗi giao tác v Không có quyền truy cập trên đối tượng (table, stored procedure, ) v Deadlock. 30 www.themegallery.com
  16. Lỗi giao tác Create proc sp_ThemDG rollback tran @ Ten return as end buoc 1 : xác định mã độc giả buoc 2 : insert vao bang docgia declare @madg insert into DocGia values( ) set @madg = 1 if ( @@error 0 ) commit transaction 32 www.themegallery.combegin
  17. Bài tập 2 STT T1 T2 1 Begin tran 2 Begin tran 3 SELECT * FROM SACH 4 INSERT SACH (MaSach) Values (‘S003’) 5 SET @Msach = (SELECT count (*) FROM SACH ) 6 Commit 7 8 Commit 34 www.themegallery.com
  18. Bài tập 4 STT T1 T2 1 Begin tran 2 Begin tran 3 SELECT * FROM PHIEUDATHANG 4 SELECT * FROM PHIEUDATHANG 5 INSERT PHIEUDATHANG (MaPD, MaKH) VALUES (‘PD004’,’KH003’) 6 INSERT PHIEUDATHANG (MaPD, MaKH) VALUES (‘PD004’,’KH002’) 7 Commit 8 Commit 36 www.themegallery.com
  19. Bài tập 6 STT T1 T2 1 Begin tran 2 Begin tran 3 INSERT PHIEUDATHANG (MaPD, MaKH) VALUES (‘PD005’,’KH002’) SELECT * FROM PHIEUDATHANG WHERE MaKH = ‘KH002’ 4 SELECT * FROM PHIEUDATHANG WHERE MaKH = ‘KH002’ 5 UPDATE PHIEUDATHANG SET MaKH = ‘KH003’ WHERE MaPD = ‘PD005’ 6 SELECT * FROM PHIEUDATHANG WHERE MaKH = ‘KH002’ 7 Commit 38 www.themegallery.com8 Commit
  20. Kỹ thuật khóa vKhông đặt khóa (Nolock) vKhóa chia sẻ (shared lock) : § Còn gọi là khóa đọc (read lock) . Gọi tắt : Khóa S § Khi đọc một đơn vị dự liệu SQL tự thiết lập shared lock trên đơn vị dữ liệu đó. § Shared lock có thể được thiết lập trên 1 trang, 1 bảng, hay một dòng dữ liệu. 40 www.themegallery.com
  21. Bảng tương thích khóa Shared Update lock Exclusive lock lock Shared lock þ þ ý Update lock þ ý ý Exclusive lock ý ý ý þ Cho phép (tương thích) ý Không cho phép (không tương thích) 42 www.themegallery.com
  22. Mức cô lập vRead Uncommitted § Đọc : Không phát S khi đọc do đó không phải chờ khi đọc dữ liệu. § Giải quyết : Không giải quyết được bất cứ vấn đề xử lý đồng thời nào. vRead Committed § Đây là mức mặc định của SQL. § Đọc : Phát S khi đọc, giải phóng S ngay sau khi đọc. § Giải quyết : Chỉ giải quyết được Dirty Read. 44 www.themegallery.com
  23. Mức cô lập vRead Uncommitted vRead Committed : dirty read vRepeatable Read : dirty read và unrepeatable read vSerializable : dirty Read, Unrepeatable Read và Phantom. ðChưa giải quyết được Lost update ðMức cô lập có tác dụng trên toàn bộ giao tác đến khi gặp 1 mức cô lập khác. 46 www.themegallery.com
  24. Các cấp độ khóa STT Khóa Ý nghĩa 1 ReadUncommitted Không thiết lập shared lock khi đọc / Nolock (tương tự như mức cô lập Read Uncommitted) 2 ReadCommitted -Đây là chế độ mặc định (tương tự readcommitted) -Chỉ đọc những dữ liệu đã commit -Thiết lập shared lock trên đơn vị dữ liệu đọc và mở clock ngay khi đọc xong. 3 RepeatableRead Thiết lập shared lock khi đọc và giữ shared lock đến hết giao tác 48 www.themegallery.com
  25. Các cấp độ khóa STT Khóa Ý nghĩa 8 RowLock Chỉ đặt khóa trên dòng cần thao tác 9 TabLock -Khóa toàn bộ dòng trên bảng đang thao tác. -Các thao tác (Insert / Update / Delete) không thể thực hiện trên bảng này. 10 TabLockX Xlock + TabLock ð 1, 2, 3, 5, 6, 7 chỉ có ý nghĩa khi dùng trong câu select. ð 1, 2, 3, 5, 6, 7 có thể kết hợp với 4 (khóa theo kiểu key-range) và 8, 9 (chỉ ra đơn vị cần khóa) 50 www.themegallery.com
  26. Deadlock Conversion deadlock 52 www.themegallery.com
  27. Deadlock Cycle deadlock 54 www.themegallery.com
  28. Deadlock v Khi dead lock xảy ra § SQL Server sẽ chọn 1 trong 2 transaction gây dead lock để hủy bỏ, khi đó transaction còn lại sẽ được tiếp tục thực hiện cho đến khi hoàn tất. § Transaction bị chọn hủy là transaction mà SQL ước tính chi phí cho phần việc đã làm được ít hơn transaction còn lại. 56 www.themegallery.com