Tải bản đầy đủ (.doc) (41 trang)

đề thi quản trị cơ sở dữ liệu phân tán 9

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (644.15 KB, 41 trang )

Bai tap trong dia2\ddbs\oracle\test*
CHƯƠNG IV: QUẢN LÝ GIAO DỊCH VÀ ĐIỀU KHIỂN TƯƠNG TRANH (số tiết 4 )
4. 1 Quản lý giao dịch

Retain(noun:retention):giữ lại, chặn

LES9-Oracle
After completing this lesson, you should be able to do the following:
o Explain DML and undo data generation
o Monitor and administer undo data
o Describe the difference between undo data and redo data
o Configure undo retention
o Guarantee undo retention
o Use the Undo Advisor
===
H:\ddbs\ddbs1\Managing a Distributed Database.htm
H:\oracle-baigiang\2010\ppt\baigiang truong codex \ch25[1] Advanced Transaction Processing.ppt
ch22[1] Distributed Databases.ppt
Xem quantrigiaodich 1.pdf

4.1.1 Tổng quan
Giao dịch : Thu thập các hoạt động tạo ra sự chuyển đổi nhất quán của hệ thống
trong khi đảm bảo tính nhất quán hệ thống
(tương đương trong suốt tương tranh, tương đương trong suốt sự cố)(xem dnghia khác)
VD: Nếu có các bảng sau
FLIGHT(FNO, DATE, SRC, DEST, STSOLD, CAP)
CUST(CNAME, ADDR, BAL)
FC(FNO,CNAME, SPECIAL)
begin transaction_Reservation
begin
input(fight_no,date,customer_name);


1


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.
 Các kiểu lỗi
Hình thức:
-

Cho Oij(x) là một thao tác Oj nào đó của giao dịch Ti thao tác trên một dtuong x, ở đó
Oj {Read,Write} và Oj là atomic
 OSi = Sj U Oij
 Ni € {commit, abort}

- Một giao dịch Ti là thứ tự riêng Ti={T ∑i =OSi U { Ni}
 Với 2 thao tác operations Oij;Oik U OSi, nếu Oij = R(x) và Oik = W(x), thì
với hạng mục dữ liệu x bất kỳ hoặc Oij  Oij € OSi;Oij

Ta xem xet 1 giao dịch T (time):
R(x);R(y); x = x + y;W(x); commit
2


-

Tính chất gdich

: ACID

 Nguyên tử: TA là một đơn vị xử lý , nó hoặc thực hiện toàn bộ hoặc không toàn bộ
(TA: viết tắt ???)
 Nhất quán:1 vận hành thành công của TA phải lấy được trạng thái nhất quán đén một
trạng thái csdl mới nhất quán(Không vi phạm ràng buộc toàn vẹn).
 Cách ly: TA không tạo sự biến đổi nhìn thấy trên các TA khác cho tới khi được
chuyển giao, tức là TA là không nhận thức với các vận hành TA khác tương tranh
trong hệ thống.
 Bền vững: Ngay khi 1 TA đã chuyển giao thay đổi của nó, các thay đổi này không
bao giờ mất do sự cố hệ thống xảy ra sau .
-

Các yêu cầu phân tán và các giao dịch phân tán


Các yêu cầu từ xa : Các yêu cầu xa cho phép ta truy nhập csdl được xử lý bởi bộ xử lý
csdl xa
DP: xử lý dữ liệu

SELECT * FROM CUSTOMER

WHERE CUS_STATE=’A’
Chú ý: ycau được hướng đến bảng
CUSTOMER trên site B



Các giao dịch từ xa : 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;

3




Các giao dịch phân tán : 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;



Các yêu cầu phân tán :Một yêu cầu phân tán cho phép ta tham chiếu một vài site DP ở
xa (Figure 10.13). Nó cũng cho phép truy vấn đơn truy vấn đến các bảng phân chia
vật lý(Figure 10.14)
BEGIN WORK:
SELECT CUS_NUM, INV_TOTAL
FROM CUSTOMER, INVOICE
WHERE CUS_NUM=’100’ and
INVOICE.CUS_NUM=CUSTOMER.CUS_NUM
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;

SELECT *
FROM CUSTOMER
WHERE CUS_NUM>250;

4



4.1.2 Những vấn đề giao dịch
Như CSDL đơn: Quản trị giao dịch, lập lịch, quản trị phục hồi, quản trị bộ đệm (Transaction
manager, scheduler, recovery manager, buffer manager)

CSDL phân tán: Quản trị giao dịch tổng thể (Bộ phối hợp giao dịch) (Global transaction manager
(Transaction Coordination)

- Trong suốt giao dịch
Transaction transparency đảm bảo rằng các giao dịch csdl sẽ duy trì tính toàn vẹn và tính nhất
quán csdl. Giao dịch sẽ chỉ hoàn toàn nếu và chỉ nếu mọi site csdl liên quan đến giao dịch hoàn
tất phần việc giao dịch của mình .
Trong suốt phân tán
Distribution transparency Được hỗ trợ bởi từ điển dữ liệu phân tán(distributed data dictionary
(DDD) hay bằng catalog dữ liệu phân tán(distributed data catalog (DDC).
DDC chứa mô tả của toàn bộ csdl khi nhìn bởi DBA.
Mô tả csdl được biết như lược đồ tổng thể phân tán là lược đồ csdl chung được dùng bởi xử lý
giao dịch cục bộ để dịch các yêu cầu nsd thành các truy vấn con
Các đặc trưng của giao dịch:
• Dựa trên các:
o pvi ứng dụng ((non-)distributed,heterogeneous transactions),
o Thời gian (on-line vs batch),
o Tổ chức hay các hoạt đọng ghi /đọc (two-step, restricted, action model), và
o cấu trúc
• Cấu trúc
o Giao dịch phẳng : chuỗi các thao tác nguyên thủy nằm giữa begin và end của giao
dịch.
o Các giao dịch lồng:
 Các thao tác giao dịch có thể bản thân nó là 1 giao dịch.
 Có một vài thuộc tính giống thuộc tính mức cha của nó, tức là bản thân chúng có

các giao dịch lồng khác
 Đưa ra điều khiển tương tranh và phản hồi bên trong 1 TA
 - Các lồng đóng:
(1) Các giao dịch con phải bắt đầu sau và kết thúc trước giao dịch cha.
(2) Việc chuyển giao giao dịch con là điều kiện cho chuyển giao giao dịch cha.
 - Các lồng mở:
(1) Các giao dịch con có thể vận hành và chuyển giao độc lập,
(2) Có thể phải bù để cân bằng
• Các giao dịch phải cung cấp
(1) vận hành nguyên tử và tin cậy trong khi có mặt các sự cố
(2) vận hành đúng khi có mặt của truy nhập nhiều nsd, và
(3) quản trị các nhân bản đúng
5


Xử lý giao dịch phải đưa ra:
- Cấu trúc giao dịch (transaction model)
- Tính toàn vẹn csdl nội tại (integrity enforcement)
- Các giao thức tin cậy
 Nguyên tử và bền vững
 Các giao thức phuc hồi cục bộ
 Các giao thức chuyển giao tổng thể
- Các giải thuật điều khiển tương tranh
 Làm sao để đồng bộ các vận hành TA tương tranh, cách ly
- Các giao thức điều khiển Replica
 Làm sao điều khiển tính nhất quán tương hỗ của dữ liệu được nhân bản (replicated
data)?
 Một bản copy, ROWA, tập trung (consensus) đa số, bầu cử động, cây quorum (số đại
biểu cần thiết theo quy định)
Vận hành giao dịch tập trung và phân tán: Đảm bảo trong suốt giao dịch

Kiến trúc chung
(Architecture Revisited)

 Bộ quản trị giao dịch (TM) chịu trách nhiệm cho phối hợp vận hành của các thao tác csdl
nhân danh các ứng dụng.
 Các bộ lập lịch (SC) chịu trách nhiệm thực hiện giải thuật điều khiển tương tranh đặc
tả.
 Bộ quản trị phục hồi cục bộ (RM) thực hiện các thủ tục để phục hồi từ các sự cố.

6


Vận hành giao dịch phân tán :

Vận hành giao dịch trung tâm:




Ảnh hưởng của việc chuyển giao sớm
Dữ liệu đã được chuyển giao ở 2 site A và
B, thì không thể rollback ở các site A và B
Site C có thể rollback được

4.2 Quản trị tương tranh
4.2.1 –Tổng quan
Mục tiêu(5):
-co giãn được khi sự cố site và tthong
- Thực hiện song song để thỏa mãn yêu cầu hiệu năng.
- Tổng phí tính toán và lưu trữ nhỏ

-Thực hiện trên mạng có độ trễ lớn
- Đặt ít ràng buộc trên cấu truc hoạt động nguyên tử
7


- Điều khiển Tương tranh: Điều khiển tương tranh phân tán nhằm ngăn chặn việc sản sinh ra các
thực hiện không khả tuần tự của các giao tác phân tán .
-> vấn đề đồng bộ các giao dịch tương tranh sao cho tính nhất quán cua csdl được bảo toàn
trong khi cùng thời gian đạt được mức độ tương tranh cao nhất


o Bất thường:
mất cập nhật: Tác dụng của 1 vài giao dịch không được phản ánh trên csdl



phân tích không nhất quán.: Giao dịch nếu đọc cùng hạng mục dữ liệu nhiều hơn 1 lần,
có thể đọc các gtri khác nhau



Nhiều bản sao không nhất quán (khi nhân bản )






Việc truy nhập dữ liệu dùng chung cần đồng bộ để đảm bảo nhất quán
Đạt đươc nhờ các công cụ của giải thuật điều khiển tương tranh

Các giải thuật điều khiển tương tranh phổ biến nhất là dựa trên khóa
Việc truy nhập của NSD được đóng gói như giao dịch mà các toán tử mức thấp nhất là
tập các toán tử đọc và ghi đối với CSDL

tổng hợp: Dùng WFG để phát hiện khóa chết
Phan biệt :
Fault->Error (Errorneous state)->Failure
Để ghi tin cậy, cần sự hỗ trợ của log(Undo/redo/update) giao thức nhật ký ghi trước(WAL)

===
Điều khiển tương tranh
• Nhãn thời gian (time stamp):
 Sắp xếp các giao tác phân tán khi cho thực hiện chúng và áp đặt các thao tác truy
nhập tới DL tôn trọng thứ tự được xác định trước
 Mỗi giao tác được dẫn trỏ bởi một số hiệu thứ tự duy nhất trong hệ thống, gọi là nhãn
thời gian
 Mỗi trạm đánh nhãn thời gian một cách tự trị theo đồng hồ địa phương và số hiệu của
trạm. Ví dụ, một giao tác được khởi phát ở trạm i tại thời điểm t sẽ có nhãn thời gian
<t,i>.
• Sự đặt khoá (locking)
 Việc truy nhập tới các site DL được chi phối bởi một giao thức gồm hai giao tác
nguyên thuỷ:
o LOCK: yêu cầu thao tác trên các site DL theo một cách thức nhất định (đọc và
viết)
o UNLOCK: báo hiệu sự kết thúc của thao tác trên site
 Việc truy nhập tới một site bị khoá trong một lối không tương thích à giao tác truy
nhập phải chờ cho tới khi mở khoá bởi giao tác tác động lên site.
8





 Vấn đề khó nhất do việc đặt khoá là tình huống khóa chết (bế tắc): T1→T2, T2 →
T1
Sự hợp thức hoá giao tác
 Phương pháp trực tiếp để hợp thức hoá một giao tác phân tán: tích hợp thực sự các
cập nhật của giao tác và CSDL
 Giao thức hợp thức hoá hai giai đoạn:
o Giai đoạn chuẩn bị: trạm điều phối yêu cầu mỗi trạm tham gia chuẩn bị cho sự hợp
thức hoá
o Giai đoạn hợp thức: trạm điều phối ra lệnh cho tất cả các trạm tham gia hợp thức
hoá các cập nhật của chúng nếu như tất cả chúng đều hoàn thành đúng giai đoạn
thứ nhất hay nếu không thì huỷ bỏ chúng

===
Nối tiếp hóa phân tán(4):
-

tiến hành lập lịch tổng thể (hợp của mọi lịch biểu cục bộ)

-

Đảm bảo khóa

-

Đảm bảo nhãn thời gian

-


Nếu DB được pdoan nhưng không nhân bản thì mọi gthuc được dùng như với CSDL đơn

Vận hành lịch biểu ( or History):
 Khái niệm một lịch biểu cung cấp một cơ chế để thể hiện và cách thức để vận hành
tương tranh (khả dĩ) của các giao dịch.
 Mô tả thứ tự các thao tác để các giao dịch (TA) được vận hành.
 Lịch biểu có thể được định nghĩa như thứ tự riêng qua các thao tác này.
(VD: có thể truyền hay tính toán, nếu không đảm bảo lịch biểu sẽ sai dữ liệu )

Các khái niệm
-

Lịch biểu hoàn toàn (chưa trình bày )

9






Lịch biểu nối tiếp: Trong một lịch biểu nối tiếp
Mọi thao tác trong giao dịch xuất hiện liên tiếp nhau
Không xen kẽ các thao tác
Nếu mỗi giao dịch thu được trong trạng thái nhất quán thì lịch biểu nối tiếp các giao dịch
này cũng thu được nhất quán.
S1 = { R1(A);W1(A);R1(B);W1(B);C1;R2(A);R2(B);C2; }

- Các lịch biểu tương đương : Hai lịch biểu S và S’ là tương đương nếu và chỉ nếu:
 Chúng cùng chứa các giao dịch và các thao tác(S.∑T=S’.∑T)

 Thứ bậc của mọi thao tác đụng độ của các giao dịch không thoát theo cùng cách thức
-

Lịch biểu nối tiếp hóa: 1 lịch biểu S được gọi là nối tiếp hóa nêu nó tương đương với 1
lịch biểu nối tiếp nào đó.

VD: 3 lich bieu sau duoc noi tiep hoa va tuong duong
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}
-

Kiểm tra tính nối tiếp:

Nếu đồ thị ưu tiên (dựa trên các thao tác đụng độ) cho lịch biểu S không có chu trình thì S là nối
tiếp. Lịch biểu nối tiếp có được qua sắp xếp topo


Việc thực hiện khả thi:

Trong thực tế, để vận hành các giao dịch tương tranh, bô lập lịch kiểm tra liệu lịch biểu thực tế
có nối tiếp hay không.Như vậy, bộ lập lịch duy trì và mở rộng đô thị ưu tiên trong khi các thao
tác mới được thực hiện (hay công bố) bởi các giao dịch. :
+ Nếu đồ thị thực là không chu trình, thì tiếp tục lập lịch
+ Khác đi, thiết lập lại (1 vài) giao dịch.
• Tính nối tiếp trong CSDL phân tán :
+ Lịch biểu cục bộ và tổng thể phải được xem xét
+ Để lịch biểu tổng thể được nối tiếp hóa:
1.Mỗi lịch biểu cục bộ nên được nối tiếp hóa
2. Hai thao tác đụng độ nên theo cùng một thứ tự tương đối trên mọi lịch biểu cục bộ nơi chúng

xuất hiện .
4.2.2. Xử lý tương tranh
Có thể dùng ppt trong QTCSDLPT-4.doc
10


Các giải thuật điều khiển tương tranh
Pessimistic execution: validate -> read -> compute -> write (commit)
Optimistic execution: read -> compute -> validate -> write (commit)
- Bi quan :
• Gthuc khóa 2 pha (2PL)
 Khóa 2 pha cơ bản (primary site) 2PL
 Bản sao khóa 2 pha ( Primary Copy 2PL)
 Khóa 2 phân tán ( Distributed 2PL)
• Thứ tự nhãn thời gian (TO)
 Nhãn thời gian cơ sở( Basic TO)
 TO đa pban ( Multiversion TO)
 TO ôn hòa ( Conservative TO)
• _ Hybrid
- Lạc quan
• Dựa trên khóa
• Dựa trên thứ tự nhãn thời gian
Dựa trên khóa




Giao dịch chỉ ra của nó bằng khóa các yêu cầu từ bô lập lịch (quản trị khóa)
Khóa hoặc là khóa đọc rl (còn gọi là khóa chia xẻ) hoặc là khóa ghi wl(còn gọi là
khóa dành riêng )

Các khóa đọc và các khóa ghi đụng độ

Khóa 2 pha:
1. 1 giao dịch khóa 1 dtuong trước khi sử dụng nó (read or write)
2. khi dtuong bị khóa bởi các giao dịch khác, giao dịch yêu cầu phải chờ ( có Problems)
3. Khi giao dịch giải phóng 1 khóa, nó không yêu cầu bất kỳ khóa nào khác(trên dtuong khác)
Strict 2PL (nghiêm ngặt): Mọi khóa được giải phóng cuối mỗi giao dịch (sl shared lock)
(sl(x);sl(y);r(x); unlock(x);r(y); unlock(y)) hay
(sl(x);sl(y);r(x);r(y); unlock(x); unlock(y))
Việc triến khai thông qua bảng khóa (trong các hệ thống thương mại là các header dữ liệu , id
của giao dịch)
11


Centralized 2PL
o Chỉ có 1 bộ lập lịch 2PL
trong hệ thống phân tán.
o Các yêu cầu Khóa được
công bố cho bô lập lịch ttam
(từ bộ quản trị giao dịch )

Distributed 2PL
o Bộ lập lịch được đặt ở mỗi site. Mỗi
bô lập lịch điều khiển các yêu cầu khóa
cho dữ liệu ở site đó.
o Một giao dịch có thể đọc bất kỳ nhân
bản nào của dtuong x, bằng cách dành
được một khóa đọc trên bản sao của x.
Việc viết x yêu cầu dành được khóa ghi
trên mọi bản sao của x.


Thứ tự nhãn thời gian
o “Lựa chọn” thứ tự nối tiếp và vận hành theo đó
o Gthiet tổng thể(phạm vi hệ thống) tăng việc đơn điệu ( đồng hồ tổng thể->vấn
đề)

12


1. Giao dịch Ti được gán một nhãn thời gian duy nhất tổng thể TS(Ti) dnghia mối quan hệ
giữa các giao dịch già hơn và trẻ hơn.
2. Bộ giao dịch quản trị gắn nhãn thời gian cho mọi thao tác công bố bởi các giao dịch.
3. Mỗi dtuong x có 2 nhãn thời gian:
RTS(X) := max{TS(T) | T has read x}
WTS(X) := max {TS(T) | T has written x}
1. Việc đụng độ thao tác được pgiai bằng thứ tự:
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 dtuong 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.


4.3 Trường hợp nghiên cứu: Oracle
QUAN ĐIỂM CUA ORACLE
CÂY PHIÊN
ĐIỂM CHUYỂN GIAO+ĐỘ MẠNH
GIAO DịCH NGHI NGờ
KỊCH BẢN

A. Vận hành và điều khiển (ROLLBACK-chuyển giao-các
điểm an toàn – Đặt tên giao dịch)
Giới thiệu về giao dịch (Introduction to Transactions)

13


Một giao dịch là 1 đơn vị công việc logic chứa 1 hay 1 vài câu lệnh SQL. 1 giao dịch là 1 đơn vị nguyên
tử. Ảnh hưởng của mọi câu lệnh SQL trong giao dịch có thể là được chuyển giao (ap dụng cho csdl) hay
rollback tất cả(không làm cho csdl).
Một giao dịch bắt đầu với câu lệnh SQL có khả năng vận hành đầu tiên. Một giao dịch kết thúc khi thực
hiện tường minh COMMIT hay ROLLBACK hoặc lệnh không tường minh của DDL.

Vận hành và điều khiển giao dịch (Statement Execution and Transaction Control)
Một câu lệnh SQL chạy thành công khác với giao dịch thành công. Vận hành thành công, câu lệnh đơn:



Dịch
Xem SQL có hợp lệ không




Chạy không lỗi như một đơn vị nguyên tử. VD, mọi dòng của cập nhật nhiều dòng được thay đổì
Tuy nhiên giao dịch chứa các câu lệnh được chuyển giao , giao dịch có thể ROLLBACK và mọi
thay đổi của lệnh có thể được undo .

CHUYểN GIAO có nghĩa 1 nsd đã yêu cầu tường minh hoặc không tường minh thay đổi trong giao dịch
được thực hiện lâu dài. Một yêu cầu tường minh xuất hiện khi nsd công bố lệnh COMMIT . Một yêu cầu
không tường minh xuất hiện sau kết thúc bình thường một ứng dụng hay thao tác định nghĩa dữ
liệu(DDL). Sụ thay đổi bởi lệnh SQL của một giao dịch trở nên lâu dài và nhìn thấy được bởi nsd khác
chỉ sau khi giao dịch đã chuyển giao.Các truy vấn được công bố sau chuyển giao giao dịch nhìn thấy các
thay đổi đã được chuyển giao.
Ta có thể dặt tên 1 giao dịch dùng câu lệnh the SET TRANSACTION ... NAME trước khi bắt đầu
giao dịch.Điều này làm nó dễ dàng giám sát các giao dịch dài và phân giải các giao dịch nghi ngờ.

Rollback mức câu lệnh(Statement-Level Rollback)
Nếu chạy câu lệnh SQL bị lỗi, mọi ảnh ưởng câu lệnh sẽ ROLLBACK , coi là lệnh chưa thực hiện . thao
tác là ROLLBACK mức câu lệnh.
Các lỗi được phát hiện trong vận hành câu lệnh SQL gây ra ROLLBACK mức câu lệnh. VD, đưa cùng
giá trị vao trường khóa. Câu lệnh SQL kéo theo khóa chết(cạnh tranh cùng dữ liệu) cũng gây ra
ROLLBACK mức câu lệnh. Các lỗi được phát hiện trong khi dịch câu lệnh SQL, như sai cú pháp, chưa
chạy được không được coi là ROLLBACK mức câu lệnh.
Lệnh SQL gây lỗi làm mết dữ liệu chỉ của công việc nào đó nó thực hiện. Nó không gây mất dữ liệu của
công việc nào đó trước nó trong giao dịch hiện thời. Nêu câu lệnh là DDL thì chuyển giao không tường
minh thực hiện trước khi nó undo.
Chú ý : Nsd không thể tham chiếu trực tiếp đên các điểm an toàn trong các câu lệnh ROLLBACK.

14


Định vị không gian khả tiếp (Resumable Space Allocation)

Oracle cung cấp 1 phương tiện cho việc treo, sau đó tiếp tục vận hành của các thao tác csdl lớn trong sự
kiện lỗi định vị không gian .Điều này cho phép 1 người quản trị hành động đúng thay cho việc server
csdl Oracle trả về 1 lỗi nsd. Sau khi điều kiện lỗi được sửa đổi, thao tác treo sẽ tiếp tục một cách tự động.
Câu lệnh chạy trong chế độ khả tiếp tục chỉ khi client hiệu lực hóa tường minh ngữ nghĩa cho phiên dùng
câu lệnh ALTER SESSION.
Định vị không gian khả tiếp bị treo khi 1 trong các điều kiện sau xuất hiện :



Hết không gian điều kiện
Mở rộng cực đại đã tới



Cô ta không gian vượt quá điều kiện

Với định vị không gian không khả tiếp, các điều kiện này dẫn đến lỗi và sẽ ROLLBACK.
Việc treo một câu lệnh thu được tự động trong việc treo giao dịch. Như vậy, mọi tài nguyên giao dịch treo
bị giữ qua việc treo và tiếp tục câu lệnh.
Khi điều kiện lỗi mất(VD, do nsd can thiệp hay không gian được giải phóng bởi các truy vấn) câu lệnh
treo tự động vận hành tiếp tục.

Tổng quan về quản trị giao dịch(Overview of Transaction
Management)
Giao dịch trong Oracle bắt đầu khi lệnh SQL thực thi đầu tiên được tính đến. Một câu lệnh SQL khả thi
là một câu lệnh SQL phát sinh lời gọi đến 1 thể hiện, bao gồm các lệnh DDL và DML.
Khi 1 giao dịch bắt đầu, Oracle gán giao dịch đến không gian bảng undo có sẵn để lưu các lối vào
rollback cho giao dịch mới.
Giao dịch kết thúc khi xuất hiện bất kỳ trong:




Nsd công bố câu lệnh ROLLBACK hay COM không có mệnh đề SAVE POINT
Khi nsd chạy các lệnh như CREATE, DROP, RENAME, hay ALTER. Nếu giao dịch hiện thời
chứa bất kỳ các lệnh DML, trước hết Oracle chuyển giao cac giao dịch rồi chạy và chuyển giao
câu lệnh DDL như 1 giao dịch đơn, mới.



1 nsd ngắt khởi Oracle. Giao dịch hiện thời được chuyển giao.



1 tiến trình kết thúc bất thường. Giao dịch được ROLLBACK.

Sau khi 1 giao dịch kết thúc, câu lệnh SQL khả thi kế tiếp sẽ tự động giao dịch liền sau.
15


Chú ý: Các ứng dụng nên thường xuyên chuyển giao tường minh hay undo các giao dịch trước khi kết
thúc chương trình.

Chuyển giao các giao dịch (Commit Transactions)
Chuyển giao có nghĩa là thay đổi lâu dài thực hiện bởi các câu lệnh SQL trong giao dịch.
Trước khi giao dịch thay đổi dữ liệu được chuyển giao, xuất hiện:
• Oracle phat sinh thông tin undo. Thông tin undo chứa các gtri dữ liệu cũ được thay đổi bởi câu
lệnh của giao dịch.
• Oracle phát sinh lối vào nhật ký redo trong bộ đệm của SGA. Nhật ký redo chứa thay đổi với
khối dữ liệu và thay đổi vơi khối rollback . Các thay đổi nay có thể đến đĩa trước khi giao dịch
được chuyển giao.

• Các thay đổi được làm với bộ đệm csdl của SGA. Các thay đổi này có thể đến đĩa trước khi 1
giao dịch được chuyển giao.
Chú ý : Sự thay đổi cho một giao dịch được chuyển giao, lưu trong các bộ đệm của SGA, không
nhất thiết được ghi ngay vào file csdl bởi tiến trình nên ghi csdl(DBWW n). Việc ghi có thể xảy
ra trước hay sau các chuyển giao giao dịch , lúc hiệu quả nhất đối với csdl..
Khi một giao dịch được chuyển giao, sẽ xảy ra(4):
1. Bảng giao dịch nội tai cho các bản ghi không gian bảng undo mà giao dịch chuyển giao, và số
thay đổi hệ thống duy nhất (SCN) của giao dịch được gán và ghi vào bảng.
2. Tiến trình ghi nhật ký(LGWR) viết các lối vào redo trong bộ đệm nhật ký redo vào file nhật ký
redo. Nó cũng ghi SCN của giao dịch vào nhật ký redo. Sự kiện nguyên tử này cấu thành chuyển
giao của giao dịch.
3. Oracle giải phóng các khóa giữ trên dòng và bảng.
4. Oracle đánh dấu giao dịch hoàn tất
Note:
Hành vi mặc định cho LGWR ghi redo vào file nhật ký redo online một cách đồng bộ và cho các giao
dịch chờ redo chuyển đến đĩa trước khi quay về một chuyển giao cho nsd. Tuy nhiên, với các ứng dụng
trễ giao dịch chậm hơn, người lập trình có thể đặc tả rằng redo được ghi không đồng bộ và các giao dịch
không cần phải chờ cho redo lên đĩa.

Rollback các giao dịch (Rollback of Transactions)
ROLLBACK có nghĩa là undo bất kỳ sự thay đổi nào cho dữ liệu đã được thực hiện bởi các câu lệnh
SQL trong 1 giao dịch không chuyển giao. Oracle sử dung không gian bảng undo (hay segment

rollback ) để lưu các giá trị cũ. Nhật ký redo chứa 1 bản ghi các thay đổi.
Oracle cho ta rollback toàn bộ hay một phần đên 1 điểm an toàn .
Mọi kiểu rollback dùng chung một thủ tục:
• Rollback mức câu lệnh(do lỗi câu lệnh hay vận hành khóa chết)
• Rollback đến 1 điểm an toàn
• Rollback của 1 giao dịch do yêu cầu nsd
• Rollback của 1 giao dịch do kết thúc không bình thường tiến trình

• Rollback của mọi giao dịch đã biết khi 1 thể hiện kết thúc không bình thường
• Rollback của giao dịch không chuyển giao khi phục hồi.
Khi rollback một giao dịch toàn bộ(không có điểm an toàn tham chiếu), sẽ xuất hiện:
16


1. Oracle undo mọi thay đổi tạo ra bởi mọi câu lệnh SQL trong giao dịch bằng cách dùng
không gian bảng undo tương ứng.
2. Oracle giải phóng mọi khóa giao dịch của dữ liệu.
3. Giao dịch kết thúc.

Các điểm an toàn trong giao dịch (Savepoints In Transactions)
Ta có thể công bố các dấu hiệu gọi là điểm an toàn trong ngữ cảnh giao dịch. Các điểm an toàn chia 1
giao dịch thành các giao dịch nhỏ hơn.
Dùng điểm an toàn, ta có thể đánh dấu công việc ở bất kỳ điểm nào trong giao dịch dài. Rồi ta có tchon
sau đó việc ROLLBACK công việc trước điểm hiện thời trong giao dịch nhưng sau khi 1 điểm an toàn
được công bố trong giao dịch.VD, ta có thể dùng điểm an toàn qua một chuỗi các cập nhật phức tạp , vậy
nếu ta gặp lỗi, ta không cần đệ trình lại mọi câu lệnh.
Điểm an toàn hữu dụng như trong chương trình ứng dụng. Nếu thủ tục chứa 1 vài hàm, ta có thể tao 1
điểm an toàn trước mỗi hàm bắt đầu. Nếu khi hàm sự cố, dễ dàng trả lại dữ liệu cho trạng thái của nó
trước khi hàm băt đầu va chạy lại hàm với các tham số được xem xét lại hay thực thi hoạt động phục hồi.
Sau khi ROLLBACK về một điểm an toàn , Oracle giải phóng các khóa dữ liệu dành được bởi các câu
lệnh ROLLBACK . Các giao dịch khác chờ các tài nguyên bị khóa trước có thể xử lý.Các giao dịch khác
muốn cập nhật các dòng bị khóa trước cũng có thể làm như vậy.
Khi 1 giao dịch được ROLLBACK đên 1 điểm an toàn , những điều sau sẽ xuất hiện:
1/Oracle chỉ quay lại các câu lệnh chạy sau điểm an toàn
2/Oracle dành sẵn điểm an toàn đặc tả , nhưng mọi điểm an toàn đã được thiết lập sau điểm an toàn đặc
tả đã mất
3/ Oracle giải phóng mọi bảng và các khóa dòng yêu cầu từ điểm an toàn đó nhưng duy trì mọi khóa dữ
liệu yêu cầu trước đến điểm an toàn.

Giao dịch vẫn active và có thể tiếp tục
Mỗi khi phiên chờ 1 giao dịch, rollback đên điểm an toàn không giải phóng các khóa dòng. Để đảm bảo
các giao dịch không treo nếu không thể dành được khóa, sử dụng FOR UPDATE ...NOWAIT trước khi
công bố UPDATE hay DELETE(Điều này tham chiếu đến các khóa giành được trước điểm an toàn mà
giao dịch rollback đến. Các khóa dòng giành được sau điểm an toàn nay được giải phóng, khi các câu
lệnh được thực hiện sau điểm an toàn được rollback hoàn toàn.)

Đặt tên các giao dịch (Transaction Naming)
Ta có thể dung chuỗi ký tự ngắn và dễ nhớ để đặt tên.Tên giao dịch thay thế chuyển giao các comment
cho giao dịch phân tán với các ưu điểm:



Dễ dàng giám sát các giao dịch dài và phân giải các giao dịch phân tán nghi ngờ
Ta có thể xem tên các giao dịch và ID trong các ứng dụng . VD, người quản trị có thể xem các tên
các giao dịch trong Enterprise Manager khi giám sát các hoạt động hệ thống .



Tên các giao dịch được viết cho việc kiểm toán bản ghi redo .



LogMiner có thể dùng tên các giao dịch để tìm kiếm các giao dịch đặc tả trong nhật ký redo.
17




Ta có thể dùng tên giao dịch để tìm ra 1 giao dịch đặc tả trong view từ điển dữ liệu , như


V$TRANSACTION.

Các giao dịch được đặt tên như thế nào(How Transactions Are Named)
Đặt tên giao dịch dùng SET TRANSACTION ... NAME trước khi bắt đầu 1 giao dịch. Khi đặt tên 1
giao dịch nên liên hiệp tên với ID của nó. Tên giao dịch không là duy nhất; các giao dịch khác nhau có
thể cùng tên giao dịch tại cùng một thời điểm bởi cùng một người sở hữu. Ta có thể dùng tên bất kỳ cho
phép ta phân biệt giao dịch.(CÂN CHÚ Ý lệnh này)

Cơ chế chuyển giao 2 pha(The Two-Phase Commit Mechanism)
Trong csdl phân tán , Oracle cần phối hợp điều khiển giao dịch qua mạng và duy trì tính nhất
quán dữ liệu , thậm chí nếu sự cố mạng hay hệ thống xuất hiện .
Một giao dịch phân tán là giao dịch bao gồm 1 hay nhiều câu lệnh , cập nhật dữ liệu trên 2
hay nhiều nút khác nhau của csdl phân tán..
Một cơ chế chuyển giao 2 pha đảm bảo rằng mọi server csdl tham gia trong 1 giao dịch phân
tán hoặc tất cả được chuyển giao hoặc undo các câu lệnh trong giao dịch . Cơ chế chuyển giao
2 pha cũng bảo vệ các thao tác DML không tường minh thực hiện bởi các ràng buộc toàn vẹn ,
lời gọi thủ tục từ xa và các trigger.
Cơ chế chuyển giao 2 pha là trong suốt hoàn toàn với nsd, người đang công bố các giao dịch
phân tán . Thực tế, nsd thậm chí không cần biết giao dịch phân tán . Lệnh COMMIT thông báo
kết thúc giao dịch và chuyển sang cơ chế chuyển giao 2 pha để chuyển giao giao dịch . Các cú
pháp mã hay lệnh phức không được yêu cầu để bao hàm các giao dịch trong thân của ứng
dụng csdl.
Tiến trình nền phục hồi (RECO) phân giải tự động outcome của các giao dịch phân tán nghi
ngờ – các giao dịch phân tán ở đó sự chuyển giao đã bị ngắt bởi kiểu sự cố hệ thống hay mạng
bất kỳ . Sau khi sự cố đã được sửa chữa và chuyển giao được thiết lập lại, tiến trình RECO
cho mỗi csdl cục bộ sẽ chuyển giao hay rollback tự động bất kỳ các giao dịch phân tán một
cách nhất quán trên các nút liên quan .
Nếu sự cố trong thời gian dài, Oracle cho phép mỗi người quản trị cục bộ chuyển giao hay
undo thủ công các giao dịch phân tán nghi ngờ . Tùy chọn này cho phép người quản trị csdl

cục bộ giải phóng tài nguyên bị khóa bất kỳ được giữ như kết quả của sự cố thời gian dài.
Nếu csdl phải được phục hồi đên 1 điểm nào trước đó, việc phục hồi Oracle tạo điều kiện cho
phép người quản trị csdl ở các site khác đưa csdl đến điểm trước về thời gian. thao tác nay đảm
bảo rằng csdl tổng thể vẫn nhất quán.
18


Giao thức chuyển giao 2 pha
Giao thức chuyển giao 2 pha đảm bảo rằng nếu một phần của 1 thao tác chuyển giao không thể
chuyển giao thì mọi thay đổi tạo ở các site tham gia vào giao dịch se không làm(undo) để đảm
bảo trạng thái csdl nhất quán
Mỗi DP(Bộ xử lý dữ liệu ) duy trì log giao dịch của nó. Giao thức 2 pha yêu cầu mỗi giao dịch
DP riêng phần ghi nhận lối vào được viết trước phân đoạn csdl được cập nhật
Giao thức chuyển giao 2 pha yêu cầu một giao thức DO-UNDO-REDO và giao thức writeahead
Các thao tác
Giao thức được dùng bởi các DP để rollback/rollforward các giao dịch với sự trợ giúp của các
lối vào log giao dịch hệ thống.
DO thực hiện thao tác và ghi giá trị “before” and “after” trong nhật ký giao dịch
UNDO đảo lại thao tác dùng ở lối vào được viết bởi phần DO của chuỗi
REDO làm lại một thao tác sử dụng lối vào nhật ký được viết bởi phần DO của chuỗi
Giao thức buộc lối vào nhật ký được viết để lưu lâu dài trước khi thao tác thực tế xảy ra
Các pha
Giao thức định nghĩa các thao tác giữa 2 kiểu nút: bộ phối hợp và 1 hay nhiều bộ lệ thuộc hay
cohort (tụ tập). Các giao thức thực hiện gồm 2 pha :
Phase 1: Chuẩn bị
 Bộ phối hợp gửi một thông điệp PREPARE TO COMMIT đến mọi lệ thuộc
 Các lệ thuộc nhận thông điệp viết nhật ký giao dịch sử dụng giao thức write-head, và gửi
một thông điệp xác nhận đên bộ phối hợp
 Bộ phối hợp đảm bảo rằng mọi nút đã sẵn sàng chuyển giao hay từ bỏ giao dịch .
Phase 2: Chuyển giao cuối cùng

 Bộ phối hợp quảng bá thông điệp COMMIT đến mọi lệ thuộc và chờ đáp ứng
 Mỗi lệ thuộc nhận thông điệp COMMIT thì cập nhật csdl dùng giao thức DO
 Các lệ thuộc gửi đáp ứng với thông điệp COMMITED hay NOT COMMITED đến bộ
phối hợp.
 Nếu 1 hay nhiều lệ thuộc không chuyển giao , bộ phối hợp gửi thông điệp ABORT, vì
vậy chúng UNDO mọi thay đổi

19


CÁc giao dịch nghi ngờ(In-Doubt Transactions)
Cơ chế chuyển giao 2 pha dbaor mọi nút hoặc chuyển giao thành công hoặc sự cố. Điều gì xảy ra
nếu hệ thống sự cố trong các pha này . Giao dịch trở nên giao dịch nghi ngờ .
Các giao dịch phân tán nghi ngờ trong các trươg hợp sau:



1 Server chạy Oracle bị sự cố
Một mạng kết nối giữa các csdl Oracle liên quan bị đứto



Phần mềm không điều kiện

The RECO process automatically resolves in-doubt transactions when the machine, network, or
software problem is resolved. Until RECO can resolve the transaction, the data is locked for both
reads and writes. Oracle blocks reads because it cannot determine which version of the data to
display for a query.

B. UNDO

UNDO
Các lệnh DML
o Bao gồm : INSERT, MERGER, UPDATE, DELETE
o Thực hiện 2 lệnh ROLLBACK và COMMIT
Dữ liệu Undo là:
• Bản sao của dữ liệu gốc, dữ liệu trước khi thay đổi
• Được chặn cho mọi giao dịch thay đổi dữ liệu
• Được giữ lại ít nhât cho tới khi giao dịch kthuc
• Được dùng để hỗ trợ
o Các thao tác ROLLBACK
o Nhất quán đọc và truy vấn flashback
o Phục hồi từ các giao dịch sự cố
• Các giao dịch và dữ liệu undo
20


Giao dịch và Dữ liệu Undo
• Mỗi giao dịch được gán chỉ đến một segment undo duy nhất
• Mỗi segment undo có thể pvu nhiều hơn 1 giao dịch 1 lúc
Lưu các thông tin undo: Các thông tin undo được lưu trong các segment undo, các segment này
được lưu trong không gian bảng undo . Các không gian bảng undo :
• ĐƯợC dùng chỉ cho các segment undo
• Có những xem xét phục hồi đặc biệt
• Có thể liên hiệp chỉ với một thể hiện đơn
• Yêu cầu chỉ 1 trong chúng là không gian bảng undo có thể ghi hiện thời cho thể hiện đã
cho ở bất kỳ thời điểm nào
Undo Data đối với Redo Data

Ghi lại
Sử dụng cho

Lưu trong
Bảo vệ tránh

Undo
Undo một thay đổi như thế
nào
Quay lại hay Đọc không nhất
quán
Các segment undo
Đọc không nhất quán trong hệ
thống đa nsd

Redo
Lặp lại sự thay đổi như thế
nào
Đi tiếp việc thay đổi dữ liệu
Các file Nhật ký redo
Mất mát dữ liệu

Giám sát Undo: Thường yêu cầu quản trị không nhiều. Phạm vi giám sát bao gồm:
• Không gian tự do trong không gian bảng
• Các lỗi “snapshoot too old”
Quản trị Undo: Quản trị Undo nên bao gồm :
• Không gian lỗi trong không gian bảng undo
• Kích thước không gian bảng undo phải đúng
• Đảm bảo các giao dịch lớn chuyển giao chu kỳ
• Các lỗi “Snapshoot too old”
• Cấu hình 1 khoảng duy trì undo tương ứng
• Kích thước không gian bảng đúng
• Đảm bảo duy trì undo.

Sử dụng quản trị undo tự động :
UNDO_MANAGEMENT=AUTO
UNDO_TABLESPACE=UNDOTBS1
Cấu hình duy trì Undo : UNDO_RETENTION đặc tả (theo giây) tổng các thông tin undo đã
chuyển giao đã được duy trì. Thời điểm duy nhất phải tlap tham số này là khi:
• Không gian bảng undo có tchon AUTOEXTEND được phép
• Ta muốn tlap duy trì undo cho các LOB
• Ta muốn đảm bảo duy trì
Đảm bảo duy trì undo
21





Kích thước không gian bảng
Sử dụng Undo Advisor

Đảm bảo duy trì Undo:
• Một giao dịch có thể phát sinh nhiều undo hơn không gian sẵn có thì sẽ lỗi
• Câu lệnh SELECT chạy 15 phút hay ít hơn thường an toàn
Hieu chỉnh kích thước không gian bảng Undo : Thay đổi khoảng thời gian/không gian bảng undo
Sử dụng Undo Advisor: khảo sát undo theo đồ thị

C. CÁC LỆNH ĐIềU KHIểN GIAO DịCH
Ngôn ngữ điều khiển giao dịch (TCL)-Transaction Control Language (TCL)
Trong Oracle các giao dịch không tường minh về bản chất và có thể đặc tả tường minh bằng cách
dùng BEGIN và END. (Trong SQL là BEGIN TRAN và END TRAN)
Giao dịch được điều khiển bởi 1 trong 3 lệnh sau:



COMMIT



ROLLBACK



SAVEPOINT

Chi tiết hơn:
COMMIT
Lênh COMMIT được dùng để chuyển giao giao dịch. Sau khi chuyển giao, xóa các điểm an
toàn và giải phóng các khóa, không thể undo được.
Cú pháp

COMMIT;
The COMMIT WORK command functions in the same way as COMMIT TRANSACTION,
except COMMIT TRANSACTION accepts a user-defined transaction name. This COMMIT
syntax, with or without specifying the optional keyword WORK, is compatible with SQL-92.
This command is available in SQL Server using the following command:
Thêm nữa, chức năng câu lệnh COMMIT WORK tương tự COMMIT. Sự khác nhau duy nhất
là COMMIT TRANSACTION chấp nhận tên giao dịch nsd tự định nghĩa . Với từ khóa WORK
22


tùy chọn được đặc tả, cú pháp COMMIT này là tương thích SQL-92 và có sẵn trong SQL Server
dùng cú pháp :
COMMIT WORK;


SAVEPOINT
Điểm an toàn được dánh dấu phân chia 1 giao dịch dài thành các phần nhỏ hơn. SAVEPOINT
được dùng để đinh danh một điểm quay về trong giao dịch. Như vậy SAVEPOINT được dùng
cùng với ROLLBACK để trả lại vị trí của giao dịch. Cú pháp của Oracle và SQL có khác nhau:
SAVEPOINT <SAVEPOINT NAME>;
ROLLBACK
Lênh ROLLBACK được dùng để undo một phần của giao dịch hiện thời. Nó có khả năng quay
lại toàn bộ giao dịch hay trở lại giao dịch đến 1 điểm an toàn nào đó sao cho cac statements câu
lệnh sau điểm an toàn được quay lại. Cú pháp của Oracle và SQL khác nhau:
ROLLBACK;
ROLLBACK TO <SAVEPOINT NAME>;
Thêm nữa, chức năng câu lệnh ROLLBACK WORK tương tự ROLLBACK. Sự khác nhau duy
nhất là ROLLBACK TRANSACTION chấp nhnậ tên giao dịch nsd tự định nghĩa . Với từ khóa
WORK tùy chọn được đặc tả, cú pháp ROLLBACK này là tương thích SQL-92 và có sẵn trong
SQL Server dùng cú pháp :
ROLLBACK WORK

D.KHÓA TRONG ORACLE
Các loại khóa
Oracle khóa dữ liệu như thế nào(How Oracle Locks Data)
Các khóa là các cơ chế ngăn ngừa tương tác phá hủy giữa các giao dịch truy nhập cùng tài
nguyên – hoặc đối tượng nsd như các bảng/dòng hay các đối tượng hệ thống không nhìn thấy
như cấu trúc dữ liệu chia xẻ trong bộ nhớ và các dòng từ điển dữ liệu.
Trong mọi trường hợp, Oracle giành khóa một cách tự động khi vận hành câu lệnh SQL nên nsd
không cần quan tâm chi tiết. Oracle tự động dùng mức khả dụng thấp nhất tính nghiêm ngặt để
cung cấp mức tương tranh cao nhất dữ liệu và cũng cung cấp tính toàn vẹn an toàn không lỗi.
Oracle cũng cho phép nsd khóa dữ liệu thủ công.
23



Các giao dịch và tương tranh dữ liệu(Transactions and Data Concurrency)
Oracle cung cấp tranh và toàn vẹn dữ liệu giữa các giao dịch dùng cơ chế khóa. Vì các cơ chế
khóa gắn chặt đến điều khiển giao dịch người thiết kế ứng dụng chỉ cần xác định các giao dịch
đúng và Oracle quản trị khóa một cách tự động.
Nhớ rằng Oracle khóa hoàn toàn tự động và không yêu cầu hoạt động nsd. Khóa không tường
minh xuất hiện cho mọi câu lệnh SQL sao cho nsd csdl đó không cần khóa bất kỳ tài nguyên
tường minh nào. Cơ chế khóa mặc định Oracle khóa dữ liệu tai mức thấp nhất của tính nghiêm
ngặt để đảm bảo toàn vẹn dữ liệu trong khi cho phép mức độ tương tranh dữ liệu cao nhất.
Các chế độ khóa(Modes of Locking)
Oracle sử dụng 2 chế độ khóa trong csdl đa nsd :
• Chế độ khóa dành riêng ngăn ngừa các tài nguyên liên hiệp khỏi tài nguyên phân chia.
Chế độ khóa này dành khi cần thay đổi dữ liệu. Giao dịch đầu tiên khóa một tài nguyên dành
riêng là giao dịch duy nhất có thể thay đổi tài nguyên cho tới khi khóa được giải phóng .
• Chế độ khóa chia xẻ cho phép các tài nguyên liên hiệp được chia xẻ, tùy thuộc vào các
thao tác liên quan . Nhiều nsd đọc dữ liệu có thể chia xẻ khóa, trong khi giữ khóa chia xẻ để
ngăn truy nhập tương tranh bằng một người ghi(anh ta cần khóa dành riêng ). Một vài giao
dịch có thể chiếm khóa chia xẻ trên cùng một tài nguyên .

Khoảng thời gian khóa(Lock Duration)
Mọi khóa được chiếm bởi câu lệnh trong một giao dịch được giữ cho khoảng thời gian giao
dịch, ngăn ngừa can thiệp có tính phá hủy như đọc dirty, mất cập nhật, và các thao tác DDL phá
hủy từ các giao dịch tương tranh. Những thay đổi được câu lệnh SQL tạo trở thành nhìn thấy bởi
các giao dịch khac sẽ kdong sau khi giao dịch đầu đã được chuyển giao.
Oracle giải phóng mọi khóa đã chiếm bởi các câu lệnh trong giao dịch khi chúng chuyển
giao/undo. Oracle cũng giải phóng các khóa chiếm sau 1 điểm an toàn khi rollback đến các điểm
an toàn. Tuy nhiên chỉ những giao dịch không chờ cho các tài nguyên được khóa trươc đó mới
có thể chiếm khóa tài nguyên có sẵn lúc này. Các giao dịch chờ sẽ tiếp tục chờ cho tới khi
chuyển giao/rollback.
Phiên bản khóa dữ liệu và sự leo thang khóa(Data Lock Conversion Versus Lock Escalation)

Giao dịch giữ các khóa dòng dành riêng cho mọi dòng insert, update, delete trong giao dịch. Vì
các khóa yêu cầu mức nghiêm ngặt cao nhất, không có khóa thông thường được yêu cầu hay
thực hiện .
Giao dịch biến đổi tự động một khóa bảng mức nghiêm ngặt thấp nhất thành mức nghiêm ngặt
cao hơn tương ứng. VD, giả thiết giao dịch dùng câu lệnh SELECT với mệnh đề FOR UPDATE
để khóa các dòng của bảng. Kết quả nó yêu cầu các khóa dòng dành riêng và khóa bảng chia xẻ
dòng cho bảng. Nếu 1 giao dịch sau đó cập nhật 1 hay nhiều dòng bị khóa, khóa bảng chia xẻ
dòng tự động biến đổi thành khóa bảng dành riêng dòng.
24


Leo thang khóa xuất hiện khi rất nhều khóa được giữ ở một mức nghiền hat(VD, các dòng) và
csdl đưa ra các khóa để khóa mức nghiền hạt cao hơn(vd, bảng). VD, nếu 1 nsd đơn khóa nhiều
dòng trong một bảng, một và csdl leo thang các khóa dòng nsd một cách tự động đối với bảng
đơn. Số các khóa giảm xuống nhưng tính nghiêm ngặt của những gì đang khóa lại tăng lên.
Oracle không bao giờ leo thang khóa. Sự leo thang khóa tăng nhan dẫn đến khóa chết . Nếu hệ
thống cố leo thang khóa với giao dịch T1 nhưng không thể và các khóa bị giữ bởi giao dịch T2.
Khóa chết sẽ được tạo ra nếu T2 cũng bị yêu cầu leo thang khóa với cùng dữ liệu trước khi nó có
thể xử lý.
Khóa chết(Deadlocks)
A deadlock có thể xuất hiện khi 2 hay nhiều nsd chờ dữ liệu bị khóa bởi các khóa dữ liệu khác.
Nó ngăn các hành động kế tiếp. VD, khóa chết trên hình
Tại A, các giao dịch xử lý và chuẩn bị cập nhật . Tại B, không có giao dịch nào thành công vì
không có tài nguyên mà chúng cần cho xử lý. Đó chính là khóa chết.
Figure 13-3 Two Transactions in a Deadlock

Description of "Figure 13-3 Two Transactions in a Deadlock"
Phát hiện khóa chết(Deadlock Detection)
Oracle phát hiện các khóa chết một cách tự động và phân giải chúng bằng cách rollback 1 trong
các câu lệnh liên quan trong khóa chết, vì vậy giải phóng một tập các khóa dòng ddo . Một

thông điệp tương ứng được trả về cho giao dịch đã trải qua rollback mức câu lệnh. Câu lệnh
rollback thuộc về giao dịch đã phát hiện ra khóa chết. Thường giao dịch được báo hiệu nên quay
về tường minh, nhưng nó có thể thử quay về câu lệnh sau khi chờ.
Note:
25