8/25/2017<br />
<br />
Nội dung<br />
1.<br />
2.<br />
3.<br />
4.<br />
5.<br />
6.<br />
<br />
Chương 4.<br />
Quản lý giao tác<br />
GV: Lê Thị Minh Nguyện<br />
Email: nguyenltm@huflit.edu.vn<br />
<br />
Giới thiệu<br />
Định nghĩa giao tác<br />
Tính chất ACID của giao tác<br />
Trạng thái của giao tác<br />
Khai báo giao tác trong SQL Server<br />
Lịch biểu<br />
<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
1. Giới thiệu<br />
<br />
1. Giới thiệu (tt)<br />
<br />
• Ví dụ<br />
<br />
• Khi DBMS gặp sự cố<br />
<br />
• Hệ thống giao dịch ngân hàng<br />
• Hệ thống đặt vé bay<br />
<br />
2<br />
<br />
• Các thao tác có thể làm cho trạng thái CSDL không chính xác<br />
<br />
• DBMS là môi trường đa người dùng<br />
• Nhiều thao tác truy xuất lên cùng một đơn vị dữ liệu<br />
• Nhiều thao tác thi hành đồng thời<br />
Khách hàng 1<br />
<br />
Tìm thấy 1 chỗ trống<br />
Đặt vé bay<br />
<br />
Tài khoản B<br />
<br />
Đọc số dư của tài khoản A<br />
<br />
Khách hàng 2<br />
<br />
Tìm thấy 1 chỗ trống<br />
Thời gian<br />
<br />
Tài khoản A<br />
<br />
Kiểm tra (số dư > số tiền cần rút)<br />
<br />
2 khách hàng đặt cùng 1<br />
chỗ trống ???<br />
<br />
Tăng số dư của tài khoản B<br />
<br />
Sự cố<br />
<br />
Giảm số dư của tài khoản A<br />
<br />
Ngân hàng chịu lỗ 1<br />
khoảng tiền ???<br />
<br />
Đặt vé bay<br />
Nguyên tố<br />
<br />
Cơ chế tuần tự<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
3<br />
<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
4<br />
<br />
1<br />
<br />
8/25/2017<br />
<br />
2. Định nghĩa giao tác<br />
<br />
2. Định nghĩa giao tác (tt)<br />
<br />
• Giao tác là 1 đơn vị xử lý nguyên tố gồm 1 chuỗi các hành động<br />
tương tác lên CSDL. Khi thực hiện một giao tác hoặc phải thực<br />
hiện tất cả các hành động của nó hoặc thì không thực hiện<br />
hành động nào hết.<br />
<br />
CSDL nhất quán 1<br />
<br />
Giao tác<br />
<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
CSDL nhất quán 2<br />
<br />
5<br />
<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
3. Tính chất ACID của giao tác<br />
<br />
3.1. Tính Nguyên tố (Atomicity)<br />
<br />
3.1. Tính Nguyên tố (Atomicity)<br />
<br />
• Tính Nguyên tố (Atomicity)<br />
• Hoặc là toàn bộ hoạt động của giao dịch được phản ánh đúng đắn trong<br />
<br />
3.2. Tính Nhất quán (Consistency)<br />
<br />
CSDL hoặc không có hoạt động nào cả.<br />
<br />
3.3. Tính Cô lập (Isolation)<br />
<br />
• Nói cách khác, tác dụng của các câu lệnh trong một giao tác phải như là<br />
một câu lệnh đơn. Không chia nhỏ ra được.<br />
<br />
3.4. Tính Bền vững (Durability)<br />
<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
6<br />
<br />
7<br />
<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
8<br />
<br />
2<br />
<br />
8/25/2017<br />
<br />
3.2. Tính Nhất quán (Consistency)<br />
<br />
3.1. Tính Nguyên tố (Atomicity) (tt)<br />
T:Read(A,t);<br />
t:=t-50;<br />
Write(A,t);<br />
Read(B,t);<br />
t:=t+50;<br />
Write(B,t);<br />
• A=100, B=200 (A+B=300)<br />
<br />
• Tính Nhất quán (Consistency)<br />
• Bất kỳ CSDL nào thì mọi ràng buộc tòan vẹn phải thỏa. Tại bất kỳ thời<br />
điểm mà mọi RBTV được thỏa gọi là tính nhất quán.<br />
• Một giao tác phải biến CSDL từ trạng thái nhất quán này sang trạng thái<br />
nhất quán khác không được phá vở trạng thái nhất quán. E1 T E2<br />
<br />
• Tại thời điểm sau khi write(A,t)<br />
<br />
(E1nhất quán thì E2 phải nhất quán).<br />
<br />
• A=50, B=200 (A+B=250) - CSDL không nhất quán<br />
<br />
• Tại thời điểm sau khi write(B,t)<br />
<br />
• Ví dụ: phái là nam hoặc nữ, nhưng gõ đến phái Enter đi qua<br />
<br />
• A=50, B=250 (A+B=300) - CSDL nhất quán<br />
<br />
mà cho phép thì không còn trạng thái nhất quán.<br />
<br />
• Nếu T không bao giờ bắt đầu thực hiện hoặc T được đảm bảo phải hoàn tất<br />
thì trạng thái không nhất quán sẽ không xuất hiện<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
9<br />
<br />
3.2. Tính Nhất quán (Consistency)<br />
<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
10<br />
<br />
3.3. Tính Cô lập (Isolation)<br />
<br />
T: Read(A,t);<br />
t:=t-50;<br />
Write(A,t);<br />
Read(B,t);<br />
t:=t+50;<br />
Write(B,t);<br />
<br />
• Tính Cô lập (Isolation)<br />
• Một giao tác không quan tâm đến các giao tác khác xử lý đồng thời với<br />
nó<br />
<br />
• Khi có n giao tác xử lý đồng thời phải làm sao bảo đảm là tôi có<br />
<br />
• Consistency<br />
<br />
tính độc lập của riêng tôi.<br />
<br />
• Tổng A+B là không đổi<br />
• Nếu CSDL nhất quán trước khi T được thực hiện thì sau khi T<br />
hoàn tất CSDL vẫn còn nhất quán<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
11<br />
<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
12<br />
<br />
3<br />
<br />
8/25/2017<br />
<br />
3.3. Tính Cô lập (Isolation)<br />
T’<br />
<br />
3.4. Tính Bền vững (Durability)<br />
• Tính Bền vững (Durability)<br />
<br />
T:Read(A,t);<br />
t:=t-50;<br />
Write(A,t);<br />
Read(B,t);<br />
t:=t+50;<br />
Write(B,t);<br />
<br />
• Mọi thay đổi mà giao tác thực hiện trên CSDL phải được ghi nhận<br />
bền vững<br />
<br />
• Giả sử có 1 giao tác T’ thực hiện phép toán A+B và chen vào giữa thời gian<br />
thực hiện của T<br />
• T’ kết thúc: A+B=50+200=250<br />
• T kết thúc: A+B=50+250=300<br />
• Hệ thống của các giao tác thực hiện đồng thời có trạng thái tương đương<br />
với trạng thái hệ thống của các giao tác thực hiện tuần tự theo 1 thứ tự nào<br />
đó.<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
13<br />
<br />
T:Read(A,t);<br />
t:=t-50;<br />
Write(A,t);<br />
Read(B,t);<br />
t:=t+50;<br />
Write(B,t);<br />
<br />
• Khi T kết thúc thành công<br />
• Dữ liệu sẽ không thể nào bị mất bất chấp có sự cố hệ thống xảy<br />
ra<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
14<br />
<br />
4. Trạng thái của giao tác<br />
<br />
3.4. Tính Bền vững (Durability) (tt)<br />
• Tính bền vững đảm bảo rằng một khi giao dịch được<br />
hoàn thành, tất cả các cập nhật trên CSDL là bền vững<br />
thậm chí nếu có lỗi hệ thống sau khi giao dịch hoàn<br />
thành thực hiện. Giả sử một lỗi hệ thống có thể dẫn đến<br />
mất mát dữ liệu trong bộ nhớ chính, nhưng dữ liệu<br />
được ghi vào đĩa không bao giờ bị mất.<br />
<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
15<br />
<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
16<br />
<br />
4<br />
<br />
8/25/2017<br />
<br />
5. Khai báo giao tác trong SQL Server<br />
<br />
5. Khai báo giao tác trong SQL Server (tt)<br />
<br />
• Giao tác SQL được định nghĩa dựa trên các câu lệnh xử lý giao tác<br />
sau :<br />
• BEGIN TRANSACTION: Bắt đầu một giao tác<br />
• SAVE TRANSACTION: Đánh dấu một vị trí trong giao tác (gọi là điểm đánh<br />
dấu).<br />
• ROLLBACK TRANSACTION: Quay lui trở lại đầu giao tác hoặc một điểm<br />
đánh dấu trước đó trong giao tác.<br />
• COMMIT TRANSACTION: Đánh dấu điểm kết thúc một giao tác. Khi câu<br />
lệnh này thực thi cũng có nghĩa là giao tác đã thực hiện thành công.<br />
• ROLLBACK [WORK]: Quay lui trở lại đầu giao tác.<br />
• COMMIT [WORK]: Đánh dấu kết thúc giao tác.<br />
<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
17<br />
<br />
5. Khai báo giao tác trong SQL Server (tt)<br />
<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
• Cú Pháp:<br />
BEGIN TRANSACTION<br />
<br />
SQL Statements<br />
COMMIT | ROLLBACK TRANSACTION<br />
BEGIN TRANSACTION giaotac1<br />
UPDATE monhoc SET sodvht=4 WHERE sodvht=3<br />
UPDATE diemthi SET diemlan2=0 WHERE diemlan2 IS<br />
NULL<br />
ROLLBACK TRANSACTION giaotac1<br />
BEGIN TRANSACTION giaotac2<br />
UPDATE monhoc SET sodvht=4 WHERE sodvht=3<br />
UPDATE diemthi SET diemlan2=0 WHERE diemlan2 IS NULL<br />
COMMIT TRANSACTION giaotac2<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
18<br />
<br />
5. Khai báo giao tác trong SQL Server (tt)<br />
<br />
19<br />
<br />
Hệ quản trị Cơ sở dữ liệu<br />
<br />
20<br />
<br />
5<br />
<br />