Tải bản đầy đủ (.pdf) (20 trang)

Tailieu transaction 2

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.24 MB, 20 trang )

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




Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×