SeminarTH#1
Transactionvà Lỗi tranh chấp đồng thời
Store procedure
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 bđ
Khi nào 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.
• Lỗi do hệ thống: Lỗi do những câu lệnh
INSERT, UPDATE, DELETE
◦ Dựa vào biến @@error
[0: thành công, != 0: mã lỗi]
IF @@error != 0
BEGIN
-- Các câu lệnh xử lý khi bị lỗi
END
◦ Lưu ý: Sau mỗi câu lệnh Select, Insert, Update,
Delete thì biến @@error chứa trạng thái (thành
cơng/ thất bại) của việc thực thi câu lệnh.
3
Khi nào rollback?
• 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
4
Kỹ thuật cấp phát khóa của HQT
Khi đặt khóa trên bảng à nếu thuộc tính làm điều kiện là khóa
=> Chỉ khóa thuộc tính khóa
Khi đặt khóa trên bảng à nếu thuộc tính làm điều kiện ko phải khóa
=> Khóa tồn bộ bảng
shared lock, read lock, khóa S, khóa đọc
èCấp khóa đọc trên bảng TAIKHOAN
èChỉ khóa thuộc tính khóa
èCấp khóa đọc trên bảng GIAODICH
exclusive lock, write lock, khóa X, khóa ghi
(Khi thực hiện thao tác ghi (Insert, Update, Delete)
èCấp khóa ghi trên bảng TAIKHOAN
èCấp khóa đọc trên bảng TAIKHOAN
èCấp khóa đọc trên bảng LOAITAIKHOAN
èCấp khóa đọc trên bảng KHACHHANG
èCấp khóa ghi trên bảng TAIKHOAN
èCấp khóa đọc trên bảng TAIKHOAN
èCấp khóa ghi trên bảng TAIKHOAN
èCấp khóa đọc trên bảng KHACHHANG
èCấp khóa đọc trên bảng KHACHHANG
Giao tác muốn read(TAIKHOAN)
và sau đó cũng muốn write(TAIKHOAN)
èCấp khóa X trên bảng TAIKHOAN
update lock, Intend to write lock, Khóa U
èCấp khóa U trên bảng TAIKHOAN
èCấp khóa S trên bảng GIAODICH
èCấp khóa X trên bảng KHACHHANG
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.
10
Kỹ thuật khóa
vKhóa cập nhật (update lock)
§ Cịn gọi là Intend to write lock. Gọi tắt: Khóa U.
§ Dùng khi có dự định ghi dữ lại dữ liệu đã đọc.
vKhóa độc quyền (exclusive lock) :
§ Cịn gọi là khóa ghi (write lock). Gọi tắt : Khóa X.
§ Khi thực hiện thao tác ghi (Insert, Update, Delete)
HQT tự động thiết lập khóa X trên đơn vị dữ liệu
đó.
§ Khóa X được giữ đến hết giao tác.
11
Xin khóa đọc (TAIKHOAN)
Đọc xong, giải phóng khóa liền (Unlock)
Xin khóa đọc (GIAODICH)
Đọc xong, giải phóng khóa liền (Unlock)
Xin khóa ghi (TAIKHOAN)
Ghi xong, giữ đến hết giao tác.
Bng tng thớch khúa
Shared
lock
Shared
lock
Update
lock
Exclusive
lock
Update lock Exclusive lock
ỵ
ỵ
ý
ỵ
ý
ý
ý
ý
ý
ỵ Cho phộp (tng thích)
ý Khơng cho phép (khơng tương thích)
13
T1
T2
S(KH)
X(KH)
S(KH)
X(KH)
Lỗi tranh chấp đồng thời
Dirty read
Unrepeatable read
Phantom
Lost update
Đọc dữ liệu rác
Khơng thể đọc lại dữ liệu
Bóng ma
Mất dữ liệu đã cập nhật
15
Dirtyread
STT
T1
1
Begin tran
2
3
write (A)
//Insert | Update
4
5
If (Lỗi)
6
Rollback tran
7
Commit tran
8
T2
Begin tran
read (A)
Commit tran
ð T2 đọc dữ liệu (rác) đã bị T1 hủy.
16
Unrepeatableread
STT
T1
1
Begin tran
2
3
Read(A)
4
5
6
7
T2
Begin tran
Write(A)
//Update | Delete
Read(A)
Commit tran
Commit tran
ð T1 đọc dữ liệu giá trị A khác nhau ở 2 lần
đọc.
17
Phantom
STT
T1
1
Begin tran
2
3
Read(A)
4
5
6
7
T2
Begin tran
write(B)
//Insert | Update
Read(A, B)
Commit tran
Commit tran
ð T1 đọc tập dữ liệu 2 lần khác nhau
18
Lostupdate
STT
T1
1
Begin tran
2
3
Read(A)
4
5
6
Write(A’’)
7
Commit tran
8
T2
Begin tran
Read(A)
Write(A’)
Commit tran
ð Dữ liệu được ghi bởi T2 đã bị ghi đè bởi T1
19
Thanks