Giới thiệu về Giao dịch (Transaction).
Các tính chất của giao dịch.
Các thành phần xử lý giao dịch trong HQT CSDL.
Các trạng thái của giao dịch.
Lịch trình:
Khái niệm
Lịch trình tuần tự
Tính khả tuần tự
Khả tuần tự xung đột
Một số bài tập
Khả tuần tự view
Giao dịch trong SQL
88 trang |
Chia sẻ: Thục Anh | Ngày: 12/05/2022 | Lượt xem: 461 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Các hệ quản trị cơ sở dữ liệu - Chương 2: Giao dịch (Transaction) - Đỗ Ngọc Như Loan, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Tj thực hiện Read(X).
Ti thực hiện Read(X) sau đó Tj thực hiện Write(X).
Ti thực hiện Write(X) sau đó Tj thực hiện Write(X).
Lịch trình S là khả tuần tự xung đột nếu G không có chu
trình.
Chu trình?
60
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
VÍ DỤ
61
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
TIME TIME
TIME
LỊCH TRÌNH A LỊCH TRÌNH B
LỊCH TRÌNH C LỊCH TRÌNH D
VÍ DỤ
62
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
THỨ TỰ KHẢ TUẦN TỰ
Thứ tự trong lịch trình tuần tự S’ tương đương S có thể
có được thông qua sắp xếp Topo (Topological sorting).
63
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
ỨNG DỤNG CỦA KHẢ TUẦN TỰ
Lịch trình khả tuần tự cho phép xử lý giao dịch đồng thời
mà vẫn đảm bảo tính chính xác
Tuy nhiên, trên thực tế, khó kiểm tra tính khả tuần tự của
lịch trình:
Nếu giao dịch được thực hiện sau đó kết quả của lịch trình
được kiểm tra tính khả tuần tự, khi đó ta phải hủy bỏ lịch
trình nếu nó không thỏa Không thực tế.
Khi giao dịch được gửi liên tục, rất khó kiểm soát khi nào
lịch trình bắt đầu và kết thúc.
Hệ QTCSDL cung cấp các giao thức (protocols) để đảm
bảo tính khả tuần tự của các lịch trình khi thực hiện.
64
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
VÍ DỤ
Lịch trình có khả tuần tự xung đột hay không?
65
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
VÍ DỤ
Lịch trình có khả tuần tự xung đột hay không?
66
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
BÀI TẬP
67
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
LỊCH TRÌNH E
BÀI TẬP
68
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
LỊCH TRÌNH F
BÀI TẬP
Lịch biểu nào dưới đây là khả tuần tự?
69
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
BÀI TẬP
Cho đồ thị trình tự của
của lịch trình S:
Lịch trình nào tương
đương với S:
70
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
BÀI TẬP
Lịch trình nào sau đây là khả tuần tự xung đột và tìm
một lịch trình tuần tự tương đương với nó (nếu có):
71
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
TƯƠNG ĐƯƠNG VIEW
2 lịch trình S và S’ được gọi là tương đương view (view
equivalent) nếu thỏa:
Có cùng tập hợp các giao dịch.
Với mỗi dữ liệu X, nếu Ti thực hiện Read(X) trong S và giá
trị X được sinh ra bởi giao dịch Tj thì Ti cũng phải đọc giá trị
X được sinh ra bởi Tj trong S’.
Với mỗi dữ liệu X, giao dịch thực hiện Write(X) sau cùng
trong S cũng phải thực hiện Write(X) cuối cùng trong S’.
72
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
TƯƠNG ĐƯƠNG VIEW
Các điều kiện đảm bảo:
Mỗi giao dịch đọc cùng một giá trị trong cả 2 lịch trình.
Cả 2 lịch trình cho ra kết quả trạng thái hệ thống như nhau.
Ngoài ra còn 1 số loại tương đương khác do các ứng
dụng khác nhau đưa ra.
73
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
KHẢ TUẦN TỰ VIEW
Khả tuần tự view (view serializable): 1 lịch trình gọi là
khả tuần tự view nếu nó tương đương view với 1 lịch
trình tuần tự.
74
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
T1 T2
Read(Q)
Write(Q)
Write(Q)
Lịch trình S
T3
Write(Q)
KHẢ TUẦN TỰ VIEW
Lịch trình khả tuần tự xung đột là khả tuần tự view.
Lịch trình khả tuần tự view có thể không khả tuần tự
xung đột Do các write mù (blind write).
Write mù: thực hiện hoạt động write mà không thực hiện
read.
VD: Sg: R1(X); W2(X); W1(X); W3(X);
75
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
GIAO DỊCH TRONG SQL
Chuẩn SQL đặc tả sự bắt đầu của giao dịch một cách
không tường minh.
Giao dịch được kết thúc bởi một trong 2 lệnh:
Commit tran
Rollback tran
Cho phép định nghĩa giao dịch được thực hiện không khả
tuần tự.
76
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
CÚ PHÁP SQL
BEGIN TRANSACTION: Bắt đầu một transaction
SAVE TRANSACTION: Đánh dấu vị trí trong
transaction(điểm đánh dấu)
ROLLBACK TRANSACTION: Quay lui lại đầu
transaction hoặc điểm đánh dấu trước đó trong
transaction.
COMMIT TRANSACTION: Đánh dấu điểm kết thúc
của một transaction, khi câu lệnh này thực thi có nghĩa là
transaction thực hiện thành công.
ROLLBACK WORK: Quay lui lại đầu transaction.
COMMIT WORK: Đánh dấu kết thúc transaction.
77
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
CÚ PHÁP SQL
BEGIN { TRAN | TRANSACTION }
{ transaction_name | @tran_name_variable }
VD:
BEGIN TRAN T1
SELECT * FROM NHANVIEN
COMMIT TRAN T1
78
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
CÁC DẠNG READ TRONG SQL
Dirty read: Giao dịch T1 được phép đọc những thay đổi
của T2 chưa được committed. Nếu T2 bị hủy bỏ, giá trị
đọc được của T1 không tồn tại và không chính xác.
Non-repeatable read: Giao dịch T1 đọc 1 giá trị từ
bảng, nếu có giao dịch T2 thay đổi giá trị đó và T1 đọc
lại, T1 sẽ thấy giá trị được cập nhật.
79
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
CÁC DẠNG READ TRONG SQL
Phantoms: Giao dịch T1 đọc 1 số dòng trong bảng dựa
trên 1 số điều kiện Where nào đó. Khi đó 1 giao dịch T2
khác thêm 1 dòng mới thỏa mãn điều kiện Where của T1
vào bảng đó. Nếu T1 đọc lại giá trị của bảng sẽ thấy 1
bóng ma (phantom) – 1 dòng mới được thêm vào, trước
đó chưa xuất hiện.
80
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
CÁC MỨC NHẤT QUÁN TRONG SQL
Serializable: với nghĩa không cho phép:
Dirty read
Non-repeatable read
Phantoms
Repeatable read: cho phép Phantoms
Read committed: mặc định, chỉ không cho phép Dirty
read.
Read uncommitted: cho phép tất cả.
Lệnh xem thông tin về thiết lập hiện tại trên SQL:
DBCC USEROPTIONS 81
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
CÁC MỨC NHẤT QUÁN TRONG SQL
Isolation level Dirty
Reads
Non-repeatable
reads
Phantom
reads
READ
UNCOMMITTED
Yes Yes Yes
READ COMMITTED No Yes Yes
REPEATABLE READ No No Yes
SERIALIZABLE No No No
82
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
READ UNCOMMITED
Cho phép đọc cả dữ liệu đang trong xử lý ở một giao tác
chưa hoàn tất khác (uncommited)
Đây là mức thấp nhất, cho phép cả 3 kiểu đọc dữ liệu.
Cú pháp SQL:
SET TRANSACTION ISOLATION LEVEL READ
UNCOMMITTED
83
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
READ UNCOMMITED
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
84
BEGIN TRAN T1
INSERT INTO
NHANVIEN VALUES
('NV10','A','B','C','1999-1-
22','SU VAN
HANH','NAM',88888,'P1')
WAITFOR DELAY
'00:00:10'
ROLLBACK TRAN T1
BEGIN TRAN T2
SELECT * FROM
NHANVIEN
COMMIT TRAN T2
READ COMMITED
Mặc định của SQL Server.
Chỉ đọc các dữ liệu đã xử lý hoàn tất (commited)
Do cơ chế lock của SQL Server.
Cú pháp SQL:
SET TRANSACTION ISOLATION LEVEL READ
COMMITTED
85
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
REPEATABLE READ
Tình huống trong khi đang truy xuất dữ liệu lại có sự cập
nhật dữ liệu đó ở một giao tác khác dẫn đến sự không
nhất quán về dữ liệu.
Do đó cần đến REPEATABLE READ
Cú pháp:
SET TRANSACTION ISOLATION LEVEL
REPEATABLE READ
86
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
REPEATABLE READ
S
G
U
-
K
h
o
a C
N
T
T
-
N
T
U
N
-
H
Q
T
C
S
D
L
87
BEGIN TRAN
REPEATREAD
SELECT * FROM
NHANVIEN
WAITFOR DELAY
'00:00:05'
SELECT * FROM
NHANVIEN
COMMIT TRAN
REPEATREAD
BEGIN TRAN
SHORTUPDATE
UPDATE NHANVIEN SET
HONV='A' WHERE
MANV='NV10'
COMMIT TRAN
SHORTUPDATE
HẾT!
Tham khảo: Chương 21
Fundamentals of Database Systems
Các file đính kèm theo tài liệu này:
- bai_giang_cac_he_quan_tri_co_so_du_lieu_chuong_2_giao_dich_t.pdf