CHƯƠNG 7:
CHUYểN TÁC VÀ KHÓA
(TRANSACTIONS AND
LOCKS)
1
ThS. Lương Thị Ngọc Khánh
Khoa CNTT – ĐH Tôn Đức Thắng
KHÁI NIệM Về CHUYểN TÁC
Gồm nhiều bước
Các bước được thi hành lần lượt
Cả công việc sẽ thất bại nếu một trong các bước
thực hiện bị thất bại
ThS. Lương Thị Ngọc Khánh – K. CNTT
tác dùng để chỉ một công việc
10/31/12
chuyển
2
KHÁI NIệM Về CHUYểN TÁC (TT)
Atomic: Tất cả các bước được gói trong chuyển
tác như một hành động duy nhất
Consistency: Dữ liệu được đảm bảo toàn vẹn cho
dù transaction có thành công hay không
Isolation: Khi hai transaction thực hiện đồng
thời, chúng được giữ độc lập để các kết quả
không ảnh hưởng lẫn nhau
Durability: Sau khi transaction thực hiện thành
công, dữ liệu được đảm bảo kể cả khi hệ thống
bị sự cố
ThS. Lương Thị Ngọc Khánh – K. CNTT
ACID
10/31/12
Tính
3
CHUYểN TÁC KHÔNG TƯờNG MINH
Server chia các câu lệnh thực hiện làm
hai loại
chuyển tác tường minh
chuyển tác không tường minh
ThS. Lương Thị Ngọc Khánh – K. CNTT
10/31/12
SQL
Mặc
định, SQL Server thực hiện các lệnh ở
chế độ chuyển tác không tường minh
Mỗi câu lệnh coi như một transaction: INSERT,
UPDATE, DELETE,…
Sau khi thực hiện lệnh, các thay đổi dữ liệu sẽ
được cập nhật ngay vào CSDL
4
CHUYểN TÁC TƯờNG MINH
tác tường minh là chuyển tác phải khai
báo trước
10/31/12
chuyển
Sử dụng từ khoá Begin Tran
Các lệnh theo sau thuộc vào chuyển tác đã khai báo
Tác dụng thay đổi dữ liệu được cập nhật ngay vào
CSDL nhưng
ThS. Lương Thị Ngọc Khánh – K. CNTT
Các chuyển tác khác không thấy được thay đổi này
Sẽ bị hủy bỏ khi phiên làm việc giữa client – server chấm
dứt
Kết
Quá trình thực hiện lệnh, nếu bị lỗi có thể hủy bỏ
chuyển tác bằng lệnh Rollback Tran
thúc chuyển tác
Toàn bộ dữ liệu thay đổi đều bị hủy bỏ
Khi các lệnh đã hoàn tất, kết thúc chuyển tác bằng
Commit Tran
Dữ liệu thay đổi được lưu lại
5
CHUYểN TÁC BEGIN TRAN
chuyển tác đơn giản nhất của quá trình
xử lý chuyển tác, chỉ ra rằng đây là điểm
bắt đầu của một khối chuyển tác.
Cú pháp:
ThS. Lương Thị Ngọc Khánh – K. CNTT
10/31/12
Là
Begin tran[saction]
[ten_giaodich | <@bien_giaodich>]
6
CHUYểN TÁC COMMIT TRAN
xác định kết thúc hay hoàn thành
chuyển tác. Tại thời điểm commit được gọi,
chuyển tác được xem như là đã thực hiện
thành công.
Cú pháp:
ThS. Lương Thị Ngọc Khánh – K. CNTT
10/31/12
Commit
Commit tran[saction]
[ten_giaodich | <@bien_giaodich>]
7
dụ:
10/31/12
Ví
Begin tran
ThS. Lương Thị Ngọc Khánh – K. CNTT
Update bang1 set cot1 = ‘AB’ where cot2 = ‘BB’
Insert bang2 values(‘gtri1’,’gtri2’)
Select * from bang2
Commit tran
8
CHUYểN TÁC ROLLBACK TRAN
gặp chuyển tác này tất cả những phát
biểu được thực hiện từ khi gặp chuyển tác
Begin sẽ bị hủy bỏ. Ngoại trừ chúng ta định
nghĩa thêm điểm dừng cho thao tác
Rollback.
Cú pháp:
10/31/12
Khi
ThS. Lương Thị Ngọc Khánh – K. CNTT
Rollback tran[saction]
[
<@transaction
variable>
|
<@savepoint
variable>]
9
dụ:
10/31/12
Ví
Begin tran
ThS. Lương Thị Ngọc Khánh – K. CNTT
Delete bang1 where cot1 = ‘AB’
If @@error > 0
rollback tran
Else
commit tran
10
CHUYểN TÁC SAVE TRAN
lưu lại vị trí của một chuyển tác, có thể
dùng kỹ thuật đánh dấu
Có thể đặt tên cho vị trí đánh dấu dùng để
tham chiếu khi Rollback. Một chuyển tác có
thể có nhiều vị trí đánh dấu.
Cú pháp:
ThS. Lương Thị Ngọc Khánh – K. CNTT
10/31/12
Để
SAVE TRAN[SACTION]
[<save point name>|<@savepoint variable>
11
VÍ Dụ
12
ThS. Lương Thị Ngọc Khánh – K. CNTT
Kết quả trả về
Tổng vật tư trước khi thêm
11
Tổng vật tư sau khi thêm trong chuyển tác
12
Tổng vật tư hiện tại
11
10/31/12
SET ANSI_WARNINGS OFF
GO
SELECT COUNT(*) AS 'Tổng vật tư trước khi thêm' FROM VATTU
BEGIN TRAN
INSERT INTO VATTU (Mavtu, Tenvtu, Dvtinh, Phantram) VALUES
('BU01', 'Bàn ủi PhiLip', 'Cái', 17)
SELECT COUNT(*) AS 'Tổng vật tư sau khi thêm trong chuyển
tác' FROM VATTU
ROLLBACK TRAN
SELECT COUNT(*) AS 'Tổng vật tư hiện tại' FROM VATTU
SET ANSI_WARNINGS ON
VÍ Dụ TRANSACTION
10/31/12
ThS. Lương Thị Ngọc Khánh – K. CNTT
13
KHÓA (LOCK)
(Lock) được sinh ra để giới hạn quyền
truy nhập trên môi trường đa người dùng
Microsoft SQL Server sử dụng lock để đảm
bảo tính toàn vẹn của transaction và tính
thống nhất của database
Nếu lock không được sử dụng, dữ liệu bên
trong CSDL có thể bị sai về logíc, và các
query chạy trên đó sẽ đưa ra các kết quả
không mong đợi
Bản chất của lock là việc một người muốn
truy nhập riêng vào một bảng, vì vậy server
sẽ lock bảng đó lại cho riêng người đó
10/31/12
Khóa
ThS. Lương Thị Ngọc Khánh – K. CNTT
14
CÁC VấN Đề CÓ THể NGĂN NGừA BằNG
LOCK
Dirty reads (đọc dữ liệu sai)
Unrepeatable reads (đọc hai lần bản ghi)
Phantoms (đọc các bản ghi nháp, không có)
Lost updates (cập nhật, mất dữ liệu)
ThS. Lương Thị Ngọc Khánh – K. CNTT
có thể giải quyết 4 vấn đề sau:
10/31/12
Lock
15
ĐọC Dữ LIệU SAI (DIRTY READS)
dữ liệu sai xảy ra khi chuyển tác đọc
một bản ghi mà một phần chuyển tác khác
chưa hoàn thành
Nếu chuyển tác trước đó hoàn thành thì sẽ
không xảy ra các vấn đề này, nhưng nếu
chuyển tác trước đó chưa hoàn thành hay
đang thực hiện chế độ rollback chúng ta sẽ
phải đọc dữ liệu cũ, dữ liệu sai.
10/31/12
Đọc
ThS. Lương Thị Ngọc Khánh – K. CNTT
16
ĐọC BảN GHI 2 LầN
đọc mẫu tin 2 lần trong một chuyển tác
trong khi chuyển tác khác chỉ thông báo về
tình trạng dữ liệu trong một khoảng thời
gian quy định.
10/31/12
Khi
ThS. Lương Thị Ngọc Khánh – K. CNTT
17
ĐọC CÁC BảN GHI KHÔNG CÓ
(PHANTOMS)
là chúng ta đọc được những bản ghi
không có. Vì những bản ghi đó xuất hiện
không bị tác động bởi các lệnh update hoặc
delete.
Khác với 2 vấn đề trên phantoms là vấn đề
liên quan đến hệ điều hành, nó không yêu
cầu bất kỳ sơ đồ nào để mô tả.
10/31/12
Nghĩa
ThS. Lương Thị Ngọc Khánh – K. CNTT
18
CậP NHậT MấT Dữ LIệU (LOST
UPDATE)
ra khi một chuyển tác cập nhật dữ liệu
vào cơ sở dữ liệu thành công, nhưng lại ghi
đè lên dữ liệu của chuyển tác khác.
Xảy ra khi 2 chuyển tác đang đọc mẫu tin
dữ liệu, sau đó chuyển tác 1 ghi dữ liệu của
bản ghi, chuyển tác 2 cũng ghi kết quả chỉ
có chuyển tác 2 được cập nhật.
10/31/12
Xảy
ThS. Lương Thị Ngọc Khánh – K. CNTT
19
CHế Độ LOCK
ThS. Lương Thị Ngọc Khánh – K. CNTT
Đây là loại căn bản nhất, lock chia sẻ tài nguyen
cho phép đọc dữ liệu, không cho phép thay đổi
bất kỳ thuộc tính nào của tài nguyên.
Khóa
chia sẻ (Share locks)
10/31/12
Khóa
độc quyền (exclusive locks)
Không tương thích với các loại khóa khác, khóa
này ngăn ngừa 2 người sử dụng cùng cập nhật,
xóa, thêm dữ liệu
20
VÍ Dụ
dụ để thiết lập một khóa độc quyền trên
bảng authors không một ai có thể hiệu
chỉnh bảng trong khi đang xem chúng, có
thể chạy truy vấn:
Select *
From authors (TABLELOCKXX)
Một
ThS. Lương Thị Ngọc Khánh – K. CNTT
10/31/12
Ví
số tham số:
NOLOCK
21
CHế Độ LOCK (TT)
Kết hợp giữa share lock và exclusive lock
Với câu lệnh update chỉ ra bản ghi bằng mệnh
đề where, trong khi chưa cần cập nhật thì sẽ là
trạng thái share lock. Khi câu lệnh update thực
hiện ở chế độ exclusive lock intent locks
Dùng giải quyết phân cấp đối tượng. Trong sql
server, intent locks chỉ giải quyết đến bảng chứ
không quan tâm đến từng bản ghi trong bản.
ThS. Lương Thị Ngọc Khánh – K. CNTT
cập nhật (Update locks)
10/31/12
Khóa
22
CHế Độ LOCK (TT)
Schema modification locks: giản đồ thay đổi
cách tạo đổi tượng, không yêu cầu các phát biểu
create, alter, drop
Schema stability lock: tương tự share lock, lock
này ngăn ngừa các yêu cầu của các phát biểu
create, alter, drop khi đã thiết lập schema
modification lock.
ThS. Lương Thị Ngọc Khánh – K. CNTT
locks xuất phát từ 2 loại sau:
10/31/12
Schema
23
VÍ Dụ
một quyển sách mới vào bảng sách
và đi kèm với nó là việc thêm vào một nhà
xuất bản mới vào bảng nhaxuatban và 2 tác
giả mới vào bảng tacgia. Viết kịch bản để
thêm tất cả các thông tin này sao cho tất cả
cùng kết thúc hoặc cùng hỏng.
ThS. Lương Thị Ngọc Khánh – K. CNTT
10/31/12
Thêm
Sach(masach, tensach, sotrang, namxb, manxb)
Nhaxuatban(manxb, tennxb, diachi)
Tacgia(matg, tentg, ngaysinh)
Tacgia_sach(masach, matg)
24
VÍ Dụ
Docgia(madg, ngaysinh, hoten, diachi)
Viết thủ tục thực hiện công việc thêm độc giả
vào bảng độc giả sao cho độc giả này chưa tồn
tại trong bảng độc giả và tuổi lớn hơn 18.
ThS. Lương Thị Ngọc Khánh – K. CNTT
bảng sau:
10/31/12
Cho
Gợi ý: các công việc cần làm:
Kiểm tra mã độc giả trùng
Thêm độc giả
Kiểm tra tuổi
25