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
• 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
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:
- bai_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
- Nội dung trình bày • 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 Chương VI : Giao tác 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
- 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
- Giao tác (transaction) • Các nh chất : • Atomic • Consistent • Isolated • Durable ACID Chương VI : Giao tác 8
- Nội dung trình bày • 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 Chương VI : Giao tác 10
- 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
- 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
- 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
- Nội dung trình bày • 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 Chương VI : Giao tác 18
- 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
- Chế độ khóa • Khi một transac on 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 transac on 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
- 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
- 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
- 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
- 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
- Nội dung trình bày • 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 Chương VI : Giao tác 32
- Mức cô lập cho giao tác • Khái niệm • Tầm vực của Isola on level là ở mức connec on chứ không phải mức transac on. Khi 1 connec on 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 transac on Ti chạy trên N. • Phải đặt mức cô lập thích hợp cho 1 transac on 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 transac on (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
- 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 transac on 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
- 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 transac on Isola on level Tên_MứcCôLập • Ví dụ : • Set transac on Isola on level Read Commited • Set transac on Isola on level Serializable Chương VI : Giao tác 38
- Nội dung trình bày • 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 Chương VI : Giao tác 40
- 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
- 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
- Các cấp độ khóa • Khóa với dữ liệu trong cursor • Nếu cursor là loại nh (sta c) 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 connec on và các lock mode trong câu select định nghĩa cursor quyết định Chương VI : Giao tác 46
- Dead lock • Khái niệm • Khi xử lý đồng thời, không tránh khỏi việc transac on này phải chờ đợi transac on khác • Nếu vì lý do gì đó mà hai transac on 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
- 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
- Dead lock • Khi dead lock sảy ra • SQL Server sẽ chọn 1 trong 2 transac on gây dead lock để hủy bỏ, khi đó transac on còn lại sẽ được ếp tục thực hiện cho đến khi hoàn tất • Transac on bị chọn hùy bỏ là transac on mà SQL ước nh chi phí cho phần việc đã làm được ít hơn transac on còn lại. Chương VI : Giao tác 52