Brodi

New Member

Download miễn phí Giao tác và xử lý tranh chấp trong truy xuất xuất đồng đồng thời với MS SQL Server





Xử lý tranh chấp đồng thời
 Tranh chấp đồng thời là gì ?
 Giả lập truy xuất đồng thời
 Một số lỗi khi truy xuất đồng thời
◦ Đọc phải dữ liệu rác
◦ Không đọc lại được dữ liệu ◦ Không đọc lại được dữ liệu
◦ Bóng ma
◦ Mất dữ liệu cập nhật
 Xử lý tranh chấp đồng thời:
◦ Dùng mức cô lập
◦ Khai báo khóa trên từng dòng lệnh



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

Giao tác và xử lý tranh chấp
trong truy xuất đồng thời với
MS SQL Server
Trình bày: Nguyễn Trường Sơn
1
Nội dung trình bày
 Giao tác
 Xử lý tranh chấp đồng thời
2
Nội dung
 Giao tác
◦ Giao tác là gì ?
◦ Một số ví dụ
◦ Cú pháp khai báo giao tác.
◦ Một số vấn đề cần lưu ý khi khai báo giao
tác
3
Ví dụ 1
Xét store procedure: spThemDGNguoiLon
◦ Bước 1: Xác định mã đọc giả
◦ Bước 2: Insert vào bảng đọc giả
◦ Bước 3: Kiểm tra tuổi của đọc giả
◦ Bước 4: Nếu không đủ thì thông báo lỗi và
kết thúc.
◦ Bước 5: Ngược lại thì Insert vào bảng
NguoiLon
4
Ví dụ 1
 Nhận xét:
◦ Giả sử gọi spThemNguoiLon để thêm một
đọc giả mà nhỏ hơn 18 tuổi
 Có 1 bộ thêm vào bảng đọc giả
 Có 0 bộ thêm vào bảng người lớn
 Dữ liệu bị sai
Mong muốn
◦ Bước 2 và bước 5 phải được thực hiện hết,
hay không thực hiện bước nào hết.
5
Ví dụ 2
 Cho lược đồ:
◦ TaiKhoan (MaTK, HoTen, SoDu)
 Xét store procedure spRutTien
◦ Bước 1: Đọc số dư tài khoản
◦ Bước 2: Kiểm tra số dư tài khoản
◦ Bước 3: Nếu đủ tiền
◦ Bước 3.1: Cập nhật tài khoản với số dư mới
◦ Bước 3.2: Trả tiền ra máy ATM
◦ Bước 4: Nếu không đủ tiền thì kết thúc
6
Ví dụ 2:
 Nhận xét:
◦ Nếu bước 3.1 thực hiện được và 3.2 bị lỗi 
cập nhật mà không trả tiền.
◦ Nếu bước 3.2 thực hiện được mà 3.1 bị lỗi 
trả tiền mà không cập nhật tài khoản.
 Dữ liệu bị sai
Mong muốn:
◦ Bước 3.1 và 3.2 phải được thực hiện hết
hay không thực hiện được bước nào.
7
Ví dụ 3:
 Xét store procedure spChuyenTien
◦ Tham số @tk1, @tk2, @sotien
◦ Bước 1: Đọc số dư của @tk1  @sodu1
◦ Bước 2: Cập nhật số dư của tài khoản 1
UPDATE TaiKhoan
SET SoDu = @sodu1 - @sotien
◦ Bước 3: Đọc số dư của tài khoản 2
UPDATE TaiKhoan
SET SoDu = @sodu2 + @sotien
◦ Bước 4: Thông báo thành công.
8
Ví dụ 3
 Nhận xét:
◦ Nếu bước 2 thành công, bước 3 bị lỗi 
SoDu của tài khỏan @tk1 bị trừ nhưng SoDu
của @tk2 không được tăng lên.
Bị lỗi.
Mong muốn:
◦ Bước 2 và bước 3 phải được thực hiện hết
hay không có bước nào được thực hiện.
9
Khai báo các bước muốn có đặc
điểm như trên vào trong 1 giao
tác
Giao tác là gì ?
 Giao tác là một tập các lệnh có truy xuất
đến cơ sở dữ liệu mà có đặc điểm:
◦ Làm cho dữ liệu từ trạng thái nhất quán này
sang trạng thái nhất quán khác.
◦ Ban đầu dữ liệu đúng  sau khi thực hiện
giao tác  dữ liệu vẫn đúng
10
Khai báo giao tác
 Một số từ khóa:
◦ Begin tran: Bắt đầu giao tác
◦ Commit : Kết thúc giao tác (thành công)
 Dữ liệu sẽ được xác nhận trên CSDL
◦ Rollback: Kết thúc giao tác (thất bại)
 Dữ liệu sẽ được khôi phục về trạng thái ban đầu
 Khi nào thì rollback ?
◦ Khi có một lệnh nào đó trong giao tác bị lỗi
và cần khôi phục lại dữ liệu.
11
Xác định lỗi:
 Lỗi do hệ thống: Lỗi do những câu lệnh
INSERT, UPDATE, DELETE
◦ Dựa vào biến @@error [0: thành công, != 0:
mã lỗi]
IF @@error != 0
BEGIN
-- Các câu lệnh xử lý khi bị lỗi
END
◦ Lưu ý: Sau mỗi câu lệnh Select, Insert, Update,
Delete thì biến @@error chứa trạng thái (thành
công/ thất bại) của việc thực thi câu lệnh.
12
Xác định lỗi:
 Lỗi do người dùng:
◦ Đọc giả thêm vào nhỏ hơn 18 tuổi
◦ Xác định lỗi dựa vào đoạn code do người
dùng viết.
◦ Ví dụ:
IF @tuoi < 18
BEGIN
-- Các câu lệnh xử lý khi bị lỗi
END
13
Các bước để khai báo giao tác
 Bước 1: Bổ sung từ khóa khai báo bắt đầu
(begin tran), kết thúc giao tác (commit).
 Bước 2: Sau mỗi câu lệnh Select, Insert,
Update, Delete  Kiểm tra lỗi hệ thống 
Nếu có lỗi thì có những xử lý phù hợp.
IF @@error != 0
BEGIN
raiserror (‘Lỗi rồi !!!’, 16, 1)
rollback –- một cách hợp lý
return
END
14
Các bước để khai báo giao tác
 Bước 3: Sau mỗi lần kiểm tra lỗi của
người dùng  Nếu có lỗi thì có những
xử lý phù hợp.
IF [điều kiện gây ra lỗi thỏa mãn]
BEGIN
raiserror ('Lỗi rồi !!!' 16, 1)
rollback –- một cách hợp lý
return
END
15
Một số lưu ý
1. rollback: không có tác dụng return.
2. Nếu có khai báo giao tác mà không có
kết thúc giao tác  giao tác vẫn còn
thực hiện khi store procedure kết thúc
3. Phải luôn đảm bảo lúc runtime một
trong 2 cặp [begin tran - commit] hoặc
[begin tran - rollback] được thực thi.
4. rollback: hủy tất cả các giao tác trong
một kết nối.
16
DEMO
17
Xử lý tranh chấp đồng thời
 Tranh chấp đồng thời là gì ?
 Giả lập truy xuất đồng thời
 Một số lỗi khi truy xuất đồng thời
◦ Đọc phải dữ liệu rác
◦ Không đọc lại được dữ liệu
◦ Bóng ma
◦ Mất dữ liệu cập nhật
 Xử lý tranh chấp đồng thời:
◦ Dùng mức cô lập
◦ Khai báo khóa trên từng dòng lệnh
18
Tranh chấp đồng thời là gì ?
 Khi nhiều giao tác cùng thực hiện truy
xuất trên một đơn vị dữ liệu tại một thời
điểm để thực hiện các thao tác đọc, ghi
lên đơn vị dữ liệu đó  đụng độ 
tranh chấp đồng thời.
19
Ví dụ
T1 - spRutTien T2 - spRutTien
@matk=1, @sotien=80000 @matk=1, @sotien=90000
--B1: Đọc số dư tài khoản vào biến
@sodu
--B1: Đọc số dư tài khoản vào biến
@sodu
MaTK HoTen SoDu
1 A 100000
--B2: Nếu @sodu >= @sotien
Cập nhật tài khoản
Thông báo thành công
%
--B3: Nếu @sodu < @sotien
Thông báo thất bại
--B2: Nếu @sodu >= @sotien
Cập nhật tài khoản
Thông báo thành công
--B3: Nếu @sodu < @sotien
Thông báo thất bại
20
Giả lập truy xuất đồng thời
 Để tạo kịch bản cho việc tranh chấp
đồng thời  cần giả lập 2 giao tác
thực hiện đồng thời
 Sử dụng: waitfor delay
 Cú pháp: waitfor delay '0:0:20'
21
Giả lập truy xuất đồng thời
T1 - spRutTien T2 - spRutTien
@matk=1, @sotien=80000 @matk=1, @sotien=90000
--B1: Đọc số dư tài khoản vào biến
@sodu
waitfor delay '0:0:10'
--B1: Đọc số dư tài khoản vào biến
@sodu
22
--B2: Nếu @sodu >= @sotien
Cập nhật tài khoản
Thông báo thành công
--B3: Nếu @sodu < @sotien
Thông báo thất bại
waitfor delay '0:0:10'
--B2: Nếu @sodu >= @sotien
Cập nhật tài khoản
Thông báo thành công
--B3: Nếu @sodu < @sotien
Thông báo thất bại
Một số lỗi khi truy xuất đồng thời
 Ký hiệu:
◦ Write (A)  Ghi (Insert/Update/Delete) lên
đơn vị dữ liệu A.
◦ Read (A)  Đọc (Select) đơn vị dữ liệu A
 Có 4 loại lỗi khi truy xuất đồng thời:
◦ Đọc dữ liệu rác (diry read)
◦ Không đọc lại được dữ liệu (unrepeatable
read)
◦ Bóng ma (phantom)
◦ Mất dữ liệu cập nhật (lost update)
23
Đọc dữ liệu rác
T1 T2
Begin tran
Write(A)
Waitfor delay ‘0:0:15’
Begin tran
Read(A)
1
3
If (lỗi)
rollback
commit
commit
24
Giả sử các lệnh thực thi theo kịch bản: 1  3 2
Nhận xét: T2 đọc được những dữ liệu mà T1 đã ghi xuống (dữ
liệu sai)
2
Không đọc lại được dữ liệu
T1 T2
Begin tran
Read(A)
Waitfor delay '0:0:15'
Begin tran
Write (A) - Update / Delete
1
3
Read(A)
commit
commit
25
Giả sử các lệnh thực thi theo kịch bản: 1  3 2
Nhận xét: 2 lần đọc A của T1 có kết quả khác nhau
2
Bóng ma
T1 T2
Begin tran
Read(A)
Waitfor delay '0:0:15'
Begin tran
Write (A) - INSERT
1
3
Read(A)
commit
commit
26
Giả sử các lệnh thực thi theo kịch bản: 1  3 2
Nhận xét: 2 lần đọc A của T1 có kết quả khác nhau
2
Mất dữ liệu cập nhật
T1 T2
Begin tran
Read(A)
Waitfor delay '0:0:15'
Begin tran
Read(A)
1
3
Write (A)
commit
Write(A)
commit
2...
 
Các chủ đề có liên quan khác
Tạo bởi Tiêu đề Blog Lượt trả lời Ngày
D Đánh giá thực trạng công tác giao đất, cho thuê đất và thu hồi đất trên địa bàn quận Hoàng Mai Văn hóa, Xã hội 0
T Hoàn thiện công tác kế toán vật liệu tại Công ty đầu tư xây dựng hạ tầng và giao thông đô thị Luận văn Kinh tế 0
T Hoàn thiện công tác lập, đọc và phân tích bảng cân đối kế toán tại Xí nghiệp Đảm bảo an toàn giao thông đường sông Hải Phòng Khoa học Tự nhiên 0
N Thực trạng và giải pháp nhằm hoàn thịên công tác kế toán cho vay tại Sở Giao Dịch Ngân hàng thương m Luận văn Kinh tế 0
V Một số biện pháp nhằm hoàn thiện công tác giao dịch và hợp đồng xuất nhập khẩu tại công ty xuất nhập Luận văn Kinh tế 0
R Tìm, lựa chọn và mô tả chi tiết một website (về loại hàng hoá, dịch vụ, đối tác, qui trình giao dịch Thương Mại Điện Tử 0
T Công tác quản lý và kế toán vốn bằng tiền tại Công ty Xây dựng và Thương mại-Bộ Giao thông Vận tải Luận văn Kinh tế 0
A Hạch toán và phân tích giá thành dịch vụ trong hợp tác xã nông nghiệp bình hoà xã Bình Hoà - Giao thuỷ – Nam Định Luận văn Kinh tế 2
A Một số giải pháp hoàn thiện công tác đào tạo và phát triển nguồn nhân lực tại Sở giao dịch - Ngân hà Luận văn Kinh tế 0
B Công tác huy động vốn tại Sở giao dịch I Ngân hàng Công thương Việt Nam, thực trạng và giải pháp Luận văn Kinh tế 0

Các chủ đề có liên quan khác

Top