giao dich
begin transaction_Reservation
begin
input(fight_no,date,customer_name);
EXEC SQL SELECT STSOLD, CAP INTO temp1, temp2
FROM FLIGHT where FNO = fight_no and DATE = date;
if temp1 = temp2 then output(“no free seats");
abort
else
EXEC SQL UPDATE FLIGHT SET STSOLD = STSOLD +1
WHERE FNO = fight_no and DATE = date;
EXEC SQL INSERT into FC(FNO,DATE,CNAME,SPECIAL)
VALUES (fight_no, date, customer_name, null);
commit;
output(“reservation completed");
end Reservation.
Giao dịch xa bao gồm 1 vài yêu cầu có thể truy nhập dữ liệu chỉ ở một site đơn
BEGIN WORK:
UPDATE CUSTOMER
SET CUS_BALANCE=CUS_BALANCE+120
WHERE CUS_NUM=’100’;
INSERT INTO INVOICE (CUS_NUM,INV_DATE,INV_TOTAL) VALUE(‘100’,29-JUL-2007’,120.00);
COMMIT WORK;
Một giao dịch phân tán cho phép một giao dịch tham chiếu một vài site DP (cục bộ hay ở xa)
BEGIN WORK:
SELECT *
FROM PRODUCT
WHERE PROD_NUM=’231238’;
UPDATE CUSTOMER
SET CUS_BALANCE=CUS_BALANCE+120
WHERE CUS_NUM=’100’;
INSERT INTO INVOICE (CUS_NUM,INV_DATE,INV_TOTAL) VALUE(‘100’,29-JUL-2007’,120.00);
COMMIT WORK;
Một lịch biểu S được gọi là nối tiếp hóa nếu nó tương đương với một lịch biểu nối tiếp nào đó.
VD: 3 lịch biểu sau được nối tiếp hóa và tương đương
S1 = {R1(A);W1(A);R1(B);W1(B);C1;R2(A);R2(B);C2; }
S2 = {R1(A);W1(A);R2(A);R2(B);C2;R1(B);W1(B);C1}
S3 = {R1(A);W1(A);R2(A);R1(B);W1(B);C1;R2(B);C2}
Các giải thuật điều khiển tương tranh
- Bi quan:
validate -> read -> compute -> write (commit)
- Lạc quan:
read -> compute -> validate -> write (commit)
Cách thức
a. Dựa trên khóa
b. Thứ tự nhãn thời gian
Một thao tác có thể xử lý nếu mọi bước đụng độ của các gỉa thiết rằng giao dịch T muốn thao tác trên đối tượng x:
Case operation of:
read: if TS(T) < WTS(x) then reject (reschedule) read;
else begin
execute read(x);
RTS(x) := max{RTS(x);TS(T)g;
end.
write: if TS(T) < max{RTS(x);WTS(x)} then reject write;
else begin
execute write(x);
WTS(x) := TS(T);
end.
end case.
Bạn đang đọc truyện trên: AzTruyen.Top