You are on page 1of 17

Trường Đại học Sư phạm thành phố Hồ Chí Minh

Khoa Công ngh thông tin

CÁC HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

GIAO TÁC (transaction) và KHÓA CHỐT (lock)


trên SQL Server
Ts. Nguyễn An Tế
Nguyễn Tiến Dũng
Nguyễn Thúy Ngọc

Mục tiêu

● Hiểu được ý nghĩa và biết cách sử dụng giao tác trong


SQL Server

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 2
Tài liệu tham khảo

● MCTS 70-431: Implementing and Maintaining Microsoft


SQL Server 2005
● Robert Vieira, Beginning SQL Server 2005 Programming,
Wiley Publishing, 2006

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 3

Nội dung

1. Giao tác
1.1 Giới thiệu
1.2 Phân loại
1.3 Các cấp độ cô lập (Isolation level)
2. Khóa chốt
2.1 Giới thiệu
2.2 Theo dõi hoạt động khóa chốt

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 4
1.1 Giới thiệu

Hoạt động ghi sổ giao tác


1 Gởi
Gởi lệnh
lệnh cập
cập nhật
nhật DL
DL

Buffer
3 Các
Các lệnh được ghi
lệnh được ghi vào
vào log
log file
file
Cache
Disk

Các
Các trang
trang dữ
dữ liệu
liệu
được
được đọc đọc (nếu
(nếu chưa
chưa Disk
2 có
có trên
trên Buffer
Buffer Cache).
Cache).
Dữ
Dữ liệu
liệu thay đổi trên
thay đổi trên
Buffer Khi
Khi checkpoint
checkpoint xảy
xảy ra
ra thì
thì các
các giao
giao
Buffer Cache
Cache 4 tác đã hoàn
tác đã hoàn tất
tất sẽ được ghi
sẽ được ghi vào
vào
CSDL
CSDL

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 5

1.1 Giới thiệu

Hoạt động phục hồi giao tác


Phục hồi giao tác Hành động

11 None

22 Roll forward

33 Roll back

44 Roll forward

55 Roll back

Checkpoint Hệ thống gặp lỗi


cuối cùng
Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 6
Nội dung

1. Giao tác
1.1 Giới thiệu
1.2 Phân loại
1.3 Các cấp độ cô lập (Isolation level)
2. Khóa chốt
2.1 Giới thiệu
2.2 Theo dõi hoạt động khóa chốt

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 7

1.2 Phân loại

● Giao tác tự động commit (Autocommit Transation)


● Giao tác tường minh (Explicit Transaction)
● Giao tác không tường minh (Implicit Transaction)

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 8
Autocommit Transaction

● Chế độ mặc định trong SQL Server


● Khi kết thúc thực hiện lệnh, nếu thành công thì tự
động COMMIT, nếu bị lỗi thì tự động ROLLBACK
● Khi thực hiện một khối lệnh nếu gặp lỗi biên dịch thì
khối lệnh không được thực hiện

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 9

Minh họa Autocommit Transaction

● Cho thực hiện lệnh cập nhật dữ liệu


● Trong thời gian thực hiện lệnh cập nhật thì Server bị
lỗi
● Lệnh cập nhật sẽ tự động kết thúc với ROLLBACK

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 10
Explicit Transaction

● Bắt đầu giao tác: BEGIN TRANSACTION


● Kết thúc giao tác:

oNếu kết thúc thành công: COMMIT TRANSACTION


oNếu kết thúc bị lỗi: ROLLBACK TRANSACTION

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 11

Minh họa Explicit Transaction

● Khai báo tường minh các giao tác


● Các giao tác lồng nhau
● Lưu các save point trong giao tác

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 12
Implicit Transaction

● Bật sang chế độ giao tác không tường minh


SET
SET IMPLICIT_TRANSACTIONS
IMPLICIT_TRANSACTIONS ON
ON

● Một giao tác không tường minh sẽ tự động bắt đầu


 ALTER DATABASE  INSERT
 CREATE  OPEN
 DELETE  REVOKE
 DROP  SELECT
 FETCH  TRUNCATE TABLE
 GRANT  UPDATE

● Giao tác phải kết thúc bằng COMMIT/ROLLBACK TRAN


Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 13

Nội dung

1. Giao tác
1.1 Giới thiệu
1.2 Phân loại
1.3 Các cấp độ cô lập (Isolation level)
2. Khóa chốt
2.1 Giới thiệu
2.2 Theo dõi hoạt động khóa chốt

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 14
1.3 Các cấp độ cô lập

● Concurrency control là gì?


● Các lỗi tương tranh nào sẽ được giải quyết?
● Hai cấp độ cô lập mới trong SQL Server 2005

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 15

Concurrency control là gì?

● Là những kỹ thuật dùng để khống chế tương tranh


trên môi trường nhiều người dùng
● Gồm có hai loại :

oPessimistic
oOptimistic

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 16
Concurrency control là gì?

● Pessimistic concurrency
oKhi giao tác T1 bắt đầu cập nhật dữ liệu thì hệ thống sẽ
khóa ngay dữ liệu này
oMột giao tác T2 muốn đọc dữ liệu thì sẽ phải chờ cho
đến khi T1 kết thúc
oSử dụng pessimistic concurrency khi dữ liệu có sự tranh
chấp cao

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 17

Concurrency control là gì?

● Optimistic concurrency
oKhông khóa dữ liệu khi các giao tác bắt đầu cập nhật
oKhi một giao tác kết thúc và ghi nhận các thay đổi thì
nếu như dữ liệu đã bị thay đổi trước đó (bởi một giao tác
khác) sẽ xảy ra lỗi và kết thúc mà không ghi nhận (First
in Win)
oSử dụng pessimistic concurrency khi dữ liệu có sự tranh
chấp thấp

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 18
Các lỗi tương tranh nào sẽ được giải quyết?

● Lỗi đọc dữ liệu không chính xác (dirty read)


● Lỗi mất dữ liệu đã cập nhật (lost update)
● Lỗi đọc dữ liệu không nhất quán (non repeatable
read)
● Lỗi đọc dữ liệu không ổn định (phantom read)

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 19

Các lỗi tương tranh nào sẽ được giải quyết?

● Lỗi đọc dữ liệu không chính xác (dirty read)


oMột giao tác đang sửa dữ liệu nhưng chưa kết thúc
oCác giao tác khác có thể đọc thấy dữ liệu đang được sửa
oĐiều này dẫn đến các giao tác khác có thể xử lý sai nếu
dựa trên dữ liệu chưa chính xác đó
● Cấp độ cô lập được chọn
SET
SET TRANSACTION
TRANSACTION ISOLATION
ISOLATION LEVEL
LEVEL READ
READ UNCOMMITTED
UNCOMMITTED

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 20
1a. Minh họa gặp lỗi dirty read

Giả
Giả sử
sử tổng
tổng số
số vé
vé đặt
đặt của
của chuyến
chuyến bay
bay 1
1 là
là 0
0
T1 T2
Cập nhật chuyến bay 1: Đọc tổng số vé đặt của
đặt 5 vé chuyến bay 1
Đọc thấy 5
Cập nhật chuyến bay 1:
đặt thêm 3 vé
Đọc thấy 8
Kết thúc ROLLBACK TRAN
Đọc thấy 0
Kết thúc
COMMIT/ROLLBACK TRAN
thời gian

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 21

1b. Minh họa giải quyết lỗi dirty read

SET
SET TRANSACTION
TRANSACTION ISOLATION
ISOLATION LEVEL
LEVEL READ
READ COMMITTED
COMMITTED
T1 T2
Cập nhật chuyến bay 1: Đọc tổng số vé đặt của
đặt 5 vé chuyến bay 1
Xảy ra dead lock
Cập nhật chuyến bay 1:
đặt thêm 3 vé

Kết thúc
COMMIT/ROLLBACK TRAN
Đọc được
Kết thúc
thời gian COMMIT/ROLLBACK TRAN

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 22
Các lỗi tương tranh nào sẽ được giải quyết?

● Lỗi mất dữ liệu đã cập nhật (lost update)


oHai giao tác cùng cập nhật dữ liệu
oGiao tác kết thúc sau sẽ ghi chồng lên dữ liệu của giao
tác kết thúc trước
● Lỗi đọc dữ liệu không nhất quán (non repeatable
read)
oGiao tác T1 đang đọc dữ liệu
oGiao tác T2 sửa dữ liệu và giao tác T1 đọc lại thấy dữ
liệu đã bị thay đổi
Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 23

2a. Minh họa gặp lỗi lost update

Giả
Giả sử
sử tổng
tổng số
số vé
vé đặt
đặt của
của chuyến
chuyến bay
bay 1
1 là
là 0,
0, tổng
tổng số
số ghế
ghế là
là 100
100
T1 T2
Muốn đặt 10 vé cho chuyến bay 1:
Kiểm tra chuyến bay còn đủ ghế ? Muốn đặt 20 vé cho chuyến bay 1:
Kiểm tra thông tin khách hàng? Kiểm tra chuyến bay còn đủ ghế ?
Nếu tất cả hợp lệ thì cho phép đặt Kiểm tra thông tin khách hàng?
Kết thúc COMMIT TRAN Nếu tất cả hợp lệ thì cho phép đặt
Tổng số vé đặt = 10 Kết thúc COMMIT TRAN
Tổng số vé đặt = 20

thời gian

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 24
2b. Minh họa gặp lỗi non repeatable read

Giả
Giả sử
sử tổng
tổng số
số vé
vé đặt
đặt của
của chuyến
chuyến bay
bay 1
1 là
là 0,
0, tổng
tổng số
số ghế
ghế là
là 100
100
T1 T2
Muốn đặt 10 vé cho chuyến bay 1:
Kiểm tra chuyến bay còn đủ ghế ? Đọc thấy 0
Kiểm tra thông tin khách hàng? …
Nếu tất cả hợp lệ thì cho phép đặt …
Kết thúc COMMIT TRAN …

Đọc thấy 10
Kết thúc COMMIT/ROLLBACK TRAN

thời gian

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 25

Giải quyết lỗi lost update, non repeatable read

SET
SET TRANSACTION
TRANSACTION ISOLATION
ISOLATION LEVEL
LEVEL REPEATABLE
REPEATABLE READ
READ
T1 T2
Đọc tổng số vé đặt của chuyến bay 1,
kết quả là 0
Cập nhật chuyến bay 1: đặt 5 vé
Xảy ra dead lock
Đọc tổng số vé đặt của chuyến bay 1,
kết quả vẫn là 0
Kết thúc COMMIT/ROLLBACK TRAN
Kết thúc COMMIT/ROLLBACK TRAN

thời gian

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 26
Các lỗi tương tranh nào sẽ được giải quyết?

● Lỗi đọc dữ liệu không ổn định (phantom read)


oGiao tác T1 đang đọc dữ liệu theo điều kiện C
oGiao tác T2 thêm/xóa dữ liệu có thỏa điều kiện C
oGiao tác T1 đọc lại dữ liệu theo điều kiện C sẽ thấy có sự
thay đổi

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 27

3a. Minh họa gặp lỗi phantom read

Giả
Giả sử
sử các
các chuyến
chuyến bay
bay khởi
khởi hành
hành từ
từ Sài
Sài gòn
gòn là
là 3
3
T1 T2
Đếm các chuyến bay có
TpDi=‘SG’
Kết quả là 3
Thêm một chuyến bay có
TpDi=‘SG’
Kết thúc COMMIT TRAN
Đếm các chuyến bay có
Tpdi=‘SG’
Kết quả là 4
Kết thúc
COMMIT/ROLLBACK TRAN
thời gian

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 28
3b. Giải quyết lỗi phantom read

SET
SET TRANSACTION
TRANSACTION ISOLATION
ISOLATION LEVEL
LEVEL SERIALIZABLE
SERIALIZABLE
T1 T2
Đếm các chuyến bay có
TpDi=‘SG’
Kết quả là 3
Thêm một chuyến bay có
TpDi=‘SG’
Xảy ra dead lock
Đếm các chuyến bay có
Tpdi=‘SG’
Kết quả vẫn là 3
Kết thúc Kết thúc
COMMIT/ROLLBACK TRAN COMMIT/ROLLBACK TRAN
thời gian

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 29

Hai cấp độ cô lập mới trong SQL Server 2005

● Cấp độ cô lập READ COMMITTED WITH SNAPSHOT


oGiải quyết được lỗi dirty read
oBật thuộc tính READ_COMMITTED_SNAPSHOT là ON
oKhông xảy ra dead lock vì dữ liệu được đọc chính là dữ
liệu gốc

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 30
Hai cấp độ cô lập mới trong SQL Server 2005

● Cấp độ cô lập SNAPSHOT


oGiải quyết được lỗi phantom read
oBật thuộc tính ALLOW_SNAPSHOT_ISOLATION là ON
oKhông xảy ra dead lock vì dữ liệu được đọc chính là dữ
liệu đã được chụp

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 31

Giải quyết lỗi dirty read bằng snapshot

ALTER
ALTER DATABASE
DATABASE QLBanVe
QLBanVe SET
SET READ_COMMITTED_SNAPSHOT
READ_COMMITTED_SNAPSHOT ON
ON
SET
SET TRANSACTION
TRANSACTION ISOLATION
ISOLATION LEVEL
LEVEL READ
READ COMMITTED
COMMITTED
Giả
Giả sử
sử tổng
tổng số
số vé
vé đặt
đặt của
của chuyến
chuyến bay
bay 1
1 là
là 0
0
T1 T2
Cập nhật chuyến bay 1: đặt 5 vé Đọc tổng số vé đặt của chuyến bay 1
Đọc thấy 0 (dữ liệu gốc)
Cập nhật chuyến bay 1: đặt thêm 3 vé
Kết thúc COMMIT TRAN
Đọc thấy 8 (dữ liệu đã cập nhật)
Kết thúc COMMIT/ROLLBACK TRAN

thời gian

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 32
Giải quyết lỗi phantom read bằng snapshot

ALTER
ALTER DATABASE
DATABASE QLBanVe
QLBanVe SET
SET ALLOW_SNAPSHOT_ISOLATION
ALLOW_SNAPSHOT_ISOLATION ON
ON
SET
SET TRANSACTION
TRANSACTION ISOLATION
ISOLATION LEVEL
LEVEL SNAPSHOT
SNAPSHOT
Giả
Giả sử
sử các
các chuyến
chuyến bay
bay khởi
khởi hành
hành từ
từ Sài
Sài gòn
gòn là
là 3
3
T1 T2
Đếm các chuyến bay có TpDi=‘SG’
Kết quả là 3
Thêm một chuyến bay có TpDi=‘SG’
Đếm các chuyến bay có Tpdi=‘SG’
Kết quả vẫn là 3
Kết thúc COMMIT TRAN
Đếm các chuyến bay có Tpdi=‘SG’
Kết quả vẫn là 3
thời gian
Kết thúc COMMIT/ROLLBACK TRAN
Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 33

Các cấp độ cô lập trong SQL Server 2005

Ts. Ng.An Tế - Ng.Tiến Dũng - Ng. Thúy Ngọc (2010) [HQTCSDL-Bài 6: Giao tác] 34

You might also like