Bài 3
Transaction và Lock
Nhắc lại
Nhắc lại kiến thức lập trình với T-SQL:
n Khái niệm về bó lệnh (Batch) và tiến trình xử
lý Batch
n Biến
n Các hàm cơ bản của SQL Server
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 2 trong 17
Mục tiêu
n
n
n
n
n
Nắm được khái niệm giao dịch (transaction)
Nắm được các khái niệm về thuộc tính, phân loại,
tính riêng biệt và mức độ riêng biệt của giao dịch
Sử dụng các khái niệm về transaction để thực thi
giao dịch SQL Transaction và tập lệnh (batch)
Nắm được các khái niệm khóa (lock) và khóa chết
(deadlock)
Giải quyết các deadlock bằng cách đặt mức độ ưu
tiên cho các transaction
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 3 trong 17
Giới thiệu
n
n
Giao dịch (Transaction) là một đơn vị công
việc
Một transaction hoặc là sẽ thực hiện thành
công hoàn toàn hoặc là sẽ không thay đổi
một chút dữ liệu nào
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 4 trong 17
Các thuộc tính Transaction
n
n
n
n
Tính hoàn chỉnh (Atomicity)
Tính nhất quán (Consistency)
Tính riêng biệt (Isolation)
Tín bền vững (Durability)
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 5 trong 17
Phân loại Transaction
n
n
n
Giao dịch tường minh (Explicit transaction)
Giao dịch ngầm định (Implicit transaction)
Giao dịch xác nhận (Commit transaction)
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 6 trong 17
Transaction Isolation và
Isolation Levels
n
n
n
n
Read Uncommitted
Read Committed
Repeatable read
Serializable
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 7 trong 17
Sử dụng Transaction Log
n
n
n
n
Nhật ký giao dịch (Transaction log) là một File riêng biệt (hoặc lưu
ở vùng đĩa riêng) ở trong database server nó lưu trữ dấu vết thực
hiện của các thao tác
Bằng cách lưu trữ dấu vết thực hiện trong têp nhật ký (log),
database server dễ dàng khôi phục lại dữ liệu khi gặp sự cố
Transaction log đảm bảo tính hoàn chỉnh và tính bền vững
SQL Server viết tất cả các thay đổi trên CSDL xuống transaction
log, vì vậy nếu transaction đã bắt đầu nhưng chưa chạy xong,
chúng ta vẫn có thể phục hồi lại tất cả các thay đổi từ file log
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 8 trong 17
Transaction với T-SQL
n
n
n
n
BEGIN TRANSACTION
COMMIT TRANSACTION
ROLLBACK TRANSACTION
SAVE TRANSACTION
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 9 trong 17
Locks
n
n
n
n
Khóa (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 2000 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 đó
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 10 trong 17
Phân loại các Locks trong
SQL Server
n
n
n
n
n
Pessimistic Lock
Optimistic Lock
Shared Locks
Exclusive Locks
Update Locks
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 11 trong 17
Deadlock
n
n
n
Một deadlock xảy ra khi có 2 người dùng (hoặc 2 phiên làm
việc) đã đặt khóa trên 2 đối tượng riêng, và mỗi user muốn đặt
khóa trên đối tượng của user kia. Mỗi user đều phài đợi người
kia giải phóng khóa của họ ra để mình có thể đặt khóa.
SQL Server tự động nhận ra deadlock và giải quyết bằng cách
chọn một ứng dụng và bắt nó phải giải phóng khóa, trong khi
đó vẫn cho ứng dụng còn lại chạy tiếp.
Cách tốt nhất để tránh deadlock là tránh nó. Một cách để tránh
nó là không chạy các transaction đồng thời.
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 12 trong 17
Giải quyết Deadlock
n
n
SET DEADLOCK_PRIORITY
SET LOCK_TIMEOUT
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 13 trong 17
Tóm tắt
n
n
n
n
Quá trình truy nhập và thay đổi nội dung CSDL được gọi là giao
dịch (transaction)
Một transaction có thể thao tác cả đọc lẫn ghi. Khi transaction
được thực hiện bởi nhiều user có thể sẽ chạy đồng thời và truy
nhập lẫn các đối tượng của CSDL.
Các thuộc tính của Transaction là:
n Atomicity
n Consistency
n Isolation
n Durability
Các thuộc tính trên còn được gọi là thuộc tính ACID
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 14 trong 17
Tóm tắt (tiếp)…
n
n
Các transaction có thể phân loại như sau:
n Explicit transaction
n Implicit transaction
n Commit transaction
Chuẩn ANSI SQL quy định 4 mức độ chạy riêng biệt của
transaction. Các mức độ này chỉ ra cách chạy transaction với
mức độ riêng biệt của dữ liệu. Các mức độ như sau:
n Read Uncommitted
n Read Committed
n Repeatable read
n Serializable
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 15 trong 17
Tóm tắt (tiếp)…
n
n
n
Transaction log là một phần quan trọng để bảo vệ dữ liẹu. Bằng
cách ghi lại vết các thao tác trong log, database server dễ dàng
khôi phục lại dữ liệu khi gặp sự cố.
Transact-SQL sử dụng các câu lệnh sau để quản lý transaction:
n BEGIN TRANSACTION
n COMMIT TRANSACTION
n ROLLBACK TRANSACTION
n SAVE TRANSACTION
Lock được sử dụng để giới hạn truy nhập dữ liệu trong môi
trường đa người dùng. SQL Server tự động lock các tài nguyên
record, field, hoặc file, để ngăn cản các thao tác đồng thời trên
dữ liệu.
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 16 trong 17
Tóm tắt (tiếp)…
n
n
Các kiểu của Lock:
n Pessimistic Locks
n Optimistic locks
n Shared Locks
n Exclusive Locks
n Update Locks
Deadlock xẩy ra khi có 2 user (hoặc 2 phiên làm việc)
đã lock 2 đối tượng riêng, và mỗi user muốn lock đối
tượng của user kia. Mỗi user đều phải đợi người kia
giải phóng lock của họ ra để mình có thể lock.
Thiết kế CSDL và thực thi với SQL Server / Bài 3 / 17 trong 17