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

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

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 (1.36 MB, 155 trang )

Bai tap trong dia2\ddbs\oracle\test*
Lenh SQL
Update set.....
Insert into....
Merger into.... (xem VD dưới)
Có thể gan bí danh trong lênh SQL (xem VD dưới)
Có thể nhúng câu lệnh SQL vào lệnh SQL.. (xem VD dưới)
VD: MERGER INTO jobs j USING (SELECT * FROM ac) a ON (j.NUM=a.NUM)...
Có thể dùng SQL hay PL/SQL để thực hiện thao tác
Nếu dùng PL/SQL có thể đảm bảo an ninh, cho phức tap, portable, mở rộng.... được coi là một dtuong của Oracle và có
thể dùng
CÁc đối tượng PL/SQL

DBA có thể :

Ddanh các vấn đề đối tượng PL/SQL

Khuyến cáo việc sử dụng PL/SQL tương ứng.

Nạp các dtuong PL/SQL vào csdl

Trợ giúp người phát triển PL/SQL
Các đối tượng có thể dùng trợ giúp SEARCH để khảo sát
Hàm: trả về 1 gtri định kiểu nào đó-thuộc lược đồ nào- Thân hàm nằm giữa AS....END;
Thủ tục : thực hiện các thao tác – thuộc lược đồ nào- Thân thủ tục nằm giữa AS....END;
Gói- Tập hợp nhiều thủ tục và hàm(bản thân Oracle có 350 gói pvu DBA và các ứng dụng )- Thân gói nằm giữa
AS....END;- Có thể xem nội dung gói nhờ lệnh DISCRIBE <tên gói>
Trigger- Hàm/thủ tục cho các skien (DML: INSERT, UPDATE, DELETE /DDL: CREATE, DROP,
ALTER, GRANT, REVOKE, RENAME /csdl: LOGON, LOGOFF, STARTUP, SHUTDOWN,
SERVERERROR) – Thuộc lược đồ nào- có thể phục vụ khi thao tác dữ liệu.



Giải quyết giao dịch
Lệnh COMMIT và lệnh ROLLBACK
Giải quyết tương tranh
Khóa





Khóa mức cao cho tương tranh dữ liệu: Khóa mức dòng cho inserts, updates, và deletes
Tvan không yêu cầu khóa.
Quản trị sắp xếp hàng đợi tự động
Khóa được giữ cho tới khi kết thúc giao dịch (với thao tác COMMIT / ROLLBACK )

Khóa DML: Mối khóa giao dịch DML yêu cầu 2 khóa: (VD lệnh UPDATE)



Khóa dòng dành riêng(EXCLUSIVE) cho dòng/các dòng được cập nhật
Khóa mức bảng dòng dành riêng(ROW EXCLUSIVE ) cho bang chứa các dòng.

Cơ chế hàng đợi
Bám vết của:




Các phiên chờ khóa.
Các chế độ khóa yêu cầu.

Thứ tự trong đó phiên chờ khóa.

Nguyên nhân đụng độ khóa




Uncommitted changes
Long-running transactions
Unnecessarily high locking levels

Các phien các đụng độ khóa: (Định danh khóa chết/sau đó pgiai khóa chết)




Select Blocking Sessions from the Performance page:
o .- đồ họa: Click lket ID phiên để xem ttin về khóa phiên, bao gồm cả các câu lệnh SQL.
o Đê giải quyết một đụng độ khóa:

Có phiên giữ khóa commit hay rollback

Kết thúc phiên giữ khóa như một resort cuối cung
o Có kill session. Disable/Enable SQL trace
Có thể dùng câu lệnh SQL (select từ v$session với gtri của sid là blocking_session, sau đó là alter..)
o

SQL> select sid, serial#, username
from v$session where sid in
(select blocking_session from v$session)


Kqua đưa ra sid, serial#,username...
o

Hủy phiên: SQL> alter system kill session '144,8982' immediate;




Khóa chết: hủy phiên???

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

LES9-Or
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
Các lệnh DML
o
o

Bao gồm : INSERT, MERGER, UPDATE, DELETE
Thực hiện 2 lệnh RB và COMMIT

===
Dlieu Undo là:


Bản sao của dlieu gốc, dlieu trước khi tdoi

Đc chặn cho mọi giao dịch tdoi dlieu

Đc giữ lại ít nhât cho tới khi giao dịch kthuc

ĐC dùng để hỗ trợ
o Các ttac RB
o Nquan đọc và tvan flashback
o Pchoi từ các giao dịch sco

Các giao dịch và dữ liệu undo
Transactions and Undo Data

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 dbiet

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 Versus 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 undo segment
Đọ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 tdoi dlieu
Các file Nhật ký redo
Mất mát dữ liệu


Gsat Undo: Thường ycau qtri không nhiều. Pvi gsat 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

Kthuoc 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

Kthuoc không gian bảng đúng

Đảm bảo duy trì undo.
Sử dụng quản trị undo tdong :
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 tso 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

Kthuoc không gian bảng

Sử dụng Undo Advisor
Guaranteeing Undo Retention

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
Sizing the Undo Tablespace : Thay đổi khoảng thời gian/không gian bảng undo
Using the Undo Advisor: khảo sát undo theo đồ thị

4 Transaction Management
Dnghia gdich và mta ta qtri giao dịch thế nào:
Nội dung chương:






Introduction to Transactions
Overview of Transaction Management
Overview of Autonomous Transactions

Gthieu về giao dịch (Introduction to Transactions)
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.
Minh họa khái niệm giao dịch bằng việc gửi, rút tiền từ ngân hàng:





Giảm số tiền tài khoản
Tăng số tiền kiểm tra tài khoản
Ghi giao dịch vào jounal giao dịch.

Oracle cần cho phép 2 bối cảnh. Nếu cả 3 câu lệnh SQL có thể thực hiện để dtri
tkhoan theo cân đối đúng, ahuong của giao dịch có thể được adung cho csdl.
Tuy nhiên, nwus 1 vấn đề như không đủ tiền, sai tkhoan, hay sự cố pcung ngăn
ngừa 1 trong 2 câu lệnh giao dịch không hoàn tất, thì toàn bộ giao dịch phải
được rollback sao cho cân đối của mọi tài khoản là đúng.
Figure 4-1illustrates the banking transaction example.

Figure 4-1 A Banking Transaction


Description of "Figure 4-1 A Banking Transaction"

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 thường trực. 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 dnghia dữ
liệu(DDL). Sụ thay đổi bởi lệnh SQL của một giao dịch trở nên thường trực và


nhìn thấy được bởi nsd khác chỉ sau khi giao dịch đã chuyển giao.Các tvan đượ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à pgiai 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 gtri 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.

Đị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 tự động tiếp tục.
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 tvan) câu lệnh treo tự động vận hành tiếp tục.

Tổng quan về qtri gdich(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 leenhjDDDL 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 đề SAVEPOINT
Khi nsd chạy các lệnh như CREATE, DROP, RENAME, hay ALTER. Nếu giao
dịch hthoi 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.
Chú ý: Các ứng dụng nên thường xuyên chuyển giao tminh 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ó ng hĩa là thay đổi thường trực 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. Skien 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ể dta 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 sment rollback ) để lưu các gtri 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
Rollback
Rollback
Rollback
Rollback
thường
Rollback

mức câu lệnh(do lỗi câu lệnh hay vận hành khóa chết)
đến 1 điểm an toàn
của 1 giao dịch do yêu cầu nsd
của 1 giao dịch do kết thúc không bình thường tiến trình
của mọi giao dịch đã biết khi 1 thể hiện kết thúc không bình

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 tchieu), sẽ xuất
hiện:
o
o
o

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.
Oracle giải phóng mọi khóa giao dịch của dữ liệu.
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 tlap
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 tchieu đế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 ktu dgian và dễ nhớ để đặt tên.Tên giao dịch thay thế
cgiao các comment cho giao dịch ptan với các ưu điểm:







Dễ dàng giám sát các giao dịch dài và pgiai các giao dịch ptan nngo
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ể dngf tên các giao dịch để tkiem các giao dịch đặc tả
trong nhật ký redo.
Ta có thể dùng tên giao dịch để tìm ra 1 giao dịch đặc tả trong view tdien
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
tdiem bởi cùng một người sở hữu. Ta có thể dùng tên bky cho phép ta pbiet giao
dịch.(CÂN CHÚ Ý lệnh này)

Chuyển giao comment(Commit Comment)


Trong phần trước, đã knoi giao dịch vói cgiao comment . Tuy nhiên, comment có
thể liên hiệp với gdich chỉ khi gdich đang cgiao.
Chuyển giao comment vẫn được hỗ trợ cho tthich ngược. Oracle khuyến cáo ta
nên dùng các tên giao dịch . Các chuyển giao bị bỏ qua trong các giao dịch đã
được đặt tên.
Note:
Trong tương lai, cgiao commit sẽ bị deprecated.

Cche chuyển giao 2 pha(The Two-Phase Commit Mechanism)
Trong csdl ptan, Or cần phối hợp dkhien gdich qua mạng và duy trì tính nquan
dlieu, thậm chí nếu sco mạng hay hthong xhien .
Một giao dịch phân tán là giao dịch bao gồm 1 hay nhiều clenh, cnhat dlieu
trên 2 hay nhiều nút knhau của csdl ptan.

Một cơ chế chuyển giao 2 pha dbao rằng mọi sv csdl tgia trong 1 gdich ptan
hoặc tất cả đc cgiao hoặc undo các clenh trong gdich. Cche cgiao 2 pha cũng
bảo vệ các ttac DML ko tminh thien bởi các ràng buộc tven, lời gọi ttuc từ xa và
các trigger.
Cche cgiao 2 pha là trong suốt hoàn toàn với nsd, người đang công bố các gdich
ptan. Thực tế, nsd thậm chí ko cần biết gdich ptan. Lệnh COMMIT thông báo
kthuc gdich và chuyển sang cche cgiao 2 pha để cgiao gdich. Các cú pháp mã
hay lệnh phức ko đc ycau để bao hàm các gdich trong thân của udung csdl.
Ttrinh nền pchoi (RECO) pgiai tdong outcome của các gdich ptan nngo – các
gdich ptan ở đó sự cgiao bị ngắt bởi kiểu sco hthong hay mạng bky. Sau khi sự
cố đã đc sửa chữa và cgiao đc tlap lại, ttrinh RECO cho mỗi csdl cbo sẽ cgiao hay
rollbacj tdong bky các gdich ptan một cách nquan trên các nút lquan.
Nếu sco trong tgian dai, Or cho phép mỗi người qtri cbo cgiao hay undo tcong
các gdich ptan nngo. Tchon này cho phép
In the event of a long-term failure, Oracle allows each local administrator to
manually commit or undo any distributed transactions that are in doubt as a
result of the failure. This option enables the local database administrator to free
any locked resources that are held indefinitely as a result of the long-term
failure.


If a database must be recovered to a point in the past, Oracle's recovery facilities
enable database administrators at other sites to return their databases to the
earlier point in time also. This operation ensures that the global database
remains consistent.
See Also:
Oracle Database Heterogeneous Connectivity Administrator's Guide

Tquan về các gdich tự trị(Overview of Autonomous
Transactions)

Autonomous transactions are independent transactions that can be called from
within another transaction. An autonomous transaction lets you leave the context
of the calling transaction, perform some SQL operations, commit or undo those
operations, and then return to the calling transaction's context and continue with
that transaction.
Once invoked, an autonomous transaction is totally independent of the main
transaction that called it. It does not see any of the uncommitted changes made
by the main transaction and does not share any locks or resources with the main
transaction. Changes made by an autonomous transaction become visible to
other transactions upon commit of the autonomous transactions.
One autonomous transaction can call another. There are no limits, other than
resource limits, on how many levels of autonomous transactions can be called.
Deadlocks are possible between an autonomous transaction and its calling
transaction. Oracle detects such deadlocks and returns an error. The application
developer is responsible for avoiding deadlock situations.
Autonomous transactions are useful for implementing actions that need to be
performed independently, regardless of whether the calling transaction commits
or rolls back, such as transaction logging and retry counters.

Các khối PL/SQL tự trị (Autonomous PL/SQL Blocks)
(~gọi chương trình con)
Ta có thể gọi các giao dịch ttri bên trong 1 khối PL/SQL. Sử dụng pragma
AUTONOMOUS_TRANSACTION..Pragma là định hướng biên dịch. Ta có thể khai
báo các kiểu sau của khối PL/SQL sau là ttri:



Stored procedure or function
Local procedure or function







Package
Type method
Top-level anonymous block

Khi một khối PL/SQL đc đưa vào, ncanh giao dịch của nơi gọi sẽ treo. Thao tác
này dbao rằng cac thao tác SQL thực hiện trong khối này (hoặc các khối khác đc
gọi từ nó) không pthuoc hay ahuong đến tthai của ncanh giao dịch gọi.
Khi một khối ttri viện dẫn các khối ttri khác hay chính nó, khối đc gọi không chia
xẻ ncanh giao dịch với khối gọi. Tuy nhiên, khi một khối ttri viện dẫn một khối
không ttri(tức là khối không công bố trước là ttri) thì khối đc gọi thừa kế ncanh
giao dịch của khối ttri gọi.
Các clenh dkhien gdich trong các khối tự trị(Transaction Control
Statements in Autonomous Blocks)
Các clenh dkhien gdich trong 1 khối PL/SQL tự trị chỉ áp dụng với gdich tự trị
active hthoi.VD, các clenh:

SET TRANSACTION
COMMIT
ROLLBACK
SAVEPOINT
ROLLBACK TO SAVEPOINT
Tương tự các clenh dkhien
Similarly, transaction control statements in the main transaction apply only to
that transaction and not to any autonomous transaction that it calls. For
example, rolling back the main transaction to a savepoint taken before the

beginning of an autonomous transaction does not undo the autonomous
transaction.
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
Khái niệm giao dịch/các giao dịch remote và phân tán/vấn đề tương tranh
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
Các khái niệm
-Giao dịch


- Các kniem liên quan
4 Related Concepts:

u

u

Các yêu cầu từ xa

u

Các giao dịch từ xa

u

Các giao dịch phân tán


Các yêu cầu phân tán
- Trong suốt giao dịch
4 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 .
4

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 mta của toàn bộ csdl khi nhìn bởi DBA.
Mta csdl được biết như lược đồ tổng thể phân tán là lược đồ csdl chung được dùng bởi
TP cục bộ để dịch các yêu cầu nsd thành các truy vấn con

4

Transaction Transparency

4

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

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
(Figure 10.10)

u


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 (Figure 10.11)

u

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) (Figure 10.12)

u

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)

4

Trong suốt giao dịch

4

Gthuc chuyển giao 2 pha

4

u

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


u

Mỗi DP(?) 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

u

Giao thức chuyển giao 2 pha yêu cầu một giao thức DO-UNDO-REDO và giao
thức write-ahead

Giao thức chuyển giao 2 pha
u

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.


u
4

l

DO thực hiện thao tác và ghi giá trị “before” and “after” trong nky
gdich

l

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


l

REDO làm lại một thao tác sử dụng lối vào nky được viết bởi phần DO
của chuỗi

Giao thức buộc lối vào nky được viết để lưu thường trực trước khi thao tác thực
tế xảy ra

Giao thức chuyển giao 2 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ệ thộc hay cohort (tụ tập). Các giao thức thực hiện gồm 2 pha:
u

u

u

Phase 1: Chuẩn bị
l

Bộ phối hợp gửi một tdiep PREPARE TO COMMIT đến mọi lệ thuộc

l

Các lệ thuộc nhận tdiep viết nhật ký giao dịch sử dụng giao thức writehead, và gửi một tdiep xnhan đên bộ phối hợp

l

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
l

Bộ phối hợp quảng bá tdiep COMMIT đến mọi lệ thuộc và chờ đáp ứng

l

Mỗi lệ thuộc nhận tdiep COMMIT thì cập nhật csdl dùng giao thức DO

l

Các lệ thuộc gửi đáp ứng với tdiep 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 tdiep ABORT, vì
vậy chúng UNDO mọi thay đổi

Trường họp nghiên cứu: Oracle

4. Distributed Transaction Management (tài liệu quantrigiaodich 1.pdf)
¤ Transaction Concepts and Models
¤ Distributed Concurrency Control
¤ Distributed Reliability
¤ Data Replication
Transaction: Tập hợp các hành động tạo sự chuyển đổi nhất quán của trạng thái hệ thống
trong khi đảm bảo sự nhất quán hệ thống(; concurrency transparency, ; failure transparency)
VD:
FLIGHT(FNO, DATE, SRC, DEST, STSOLD, CAP) //stsold:cho ngoi da ban,cap:capacity
CUST(CNAME, ADDR, BAL)

FC(FNO,CNAME, SPECIAL)
begin transaction Reservation
begin
input(fight no,date,customer name);


EXEC SQL SELECT STSOLD, CAP INTO temp1, temp2
FROM FLIGHT where FNO = flight_no and DATE = date;
if temp1 = temp2 then output(“\no free seats");
abort
else
EXEC SQL UPDATE FLIGHT SET STSOLD = STSOLD +1
WHERE FNO =flight_no and DATE = date;
EXEC SQL INSERT into FC(FNO,DATE,CNAME,SPECIAL)
VALUES (flight_no, date, customer_name, null);
commit;
output(“\reservation completed");
end Reservation.
+ Các kiểu lỗi
Hình thức:
¤ Let Oij(x) be some operation Oj of a transaction Ti operating on an
object x, where Oj 2 fRead,Writeg and Oj is atomic.
{ OSi = j Oij
{ Ni 2 fcommit, abortg
¤ A transaction Ti is a partial order Ti = fi;{ i = OSi [fNig
{For any two operations Oij;Oik 2 OSi, if Oij = R(x) and Oik = W(x),
then for any data item x either Oij { 8Oij 2 OSi;Oij Consider transaction T (

! time):
R(x);R(y);x = x + y;W(x); commit -;<, DAG // Directed acyclic graph: đồ thị không chu trình
Các tchat giao dịch:
¤ 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.
¤ 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 .


## ##

o Quản trị gdich pt :
Như CSDL đơn: Transaction manager, scheduler, recovery manager, buffer manager
CSDL phân tán: Global transaction manager (Transaction Coordination)
Các đặc trưng của giao dịch:
¤ Dựa trên các pvi ứng dụng ((non-)distributed,heterogeneous transactions),
Thời gian (on-line vs batch), tchuc hay các hoạt đọng ghi /đọc (two-step,
restricted, action model), và cấu trúc
Cấu trúc
¤ Giao dịch phẳng : sequence of primitive operations nằm giữa begin và end của
giao dịch.
¤ Các giao dịch lồng:
- Các thao tác giao dịch có thể bản than 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
than 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 kín:
(1) sub-tas begin after parent and nish before them,
(2) commit of sub-ta is conditional upon commit of parent


- Nesting mở:
(1) sub-ta can execute and commit independently,
(2) compensation may be necessary
¤ 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
Xử lý giao dịch công bố:
¤ Cấu trúc giao dịch (transaction model)
¤ Tính nhất quá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 để dbo 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:
- ¤ 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ố.
Điều khiển tương tranh: 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
~ Bất thường: mất cập nhật, đọc bẩn, phân tích không nhất quá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à lạp luận về
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 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.


¤ A complete schedule S(T) over a set of transactions
T = fT1;::: ;Tng is a partial order S(T) = fT ;{ T = i i; for i = 1;:::n
{ { For any two con
icting operations Oij;Okl 2 T ,
either Oij +S1 = {R1(A);W1(A);R2(A);R2(B);C2;R1(B);W1(B);C1g
¤ Trong một lịch biểu nối tiếp
{ all operations in transaction occur consecutively
{ no interleaving of transaction operations
{ if each transaction results in a consistent state, then the serial schedule
of these transaction results in a consistent state, too.
+S1 = {R1(A);W1(A);R1(B);W1(B);C1;R2(A);R2(B);C2; g
Các lịch biểu tương đương : Two schedules S and S0
are said to be equivalent i

¤ they contain the same transactions and operations (S:T = S0
:T ),
¤ they order all conflicting operations of non-aborting transactions in the
same way.
Lịch biểu nối tiếp hóa: 1 lbieu S đc gọi là nnoois tiếp hóa nêu nó tương đương
với 1 lbieu nối tiếp nào đó.
Example:
+S1 = {R1(A);W1(A);R1(B);W1(B);C1;R2(A);R2(B);C2; g
+S2 = {R1(A);W1(A);R2(A);R2(B);C2;R1(B);W1(B);C1g
+S3 = {R1(A);W1(A);R2(A);R1(B);W1(B);C1;R2(B);C2g
Kiểm tra tính nối tiếp:
¤ If precedence graph (based on conflicting operations) for schedule S has
no cycles, then S is serializable. Serial schedule is obtained through
toplogical sorting.
¤ Việc thực hiện khả thi:
In practice, for concurrently executing transactions, the scheduler veri


es whether the actual schedule is serializable. For this, the scheduler
maintains and extends the precedence graph while new operations are
performed (or announced) by transactions.
{ if the actual graph is acyclic, then continue schedule
{ otherwise reset (some) transactions.
Tính ntiep trong CSDL phân tán
¤ Local as well as global schedules have to be considered
¤ For global schedule to be serializable
1. Each local schedule should be serializable
2. Two coniciting operations should be in the same relative order in all
of the local schedules where they appear together


Không thể nối tiếp tổng thể :
Consider two sites and data item x = 1 duplicated at both sites.
T1 : Read(x) T2 : Read(x)
x:=x+5 x:=x10
write(x) write(x)
commit commit
These two schedules may be generated locally at the two sites.
+S1 = {R1(x);W1(x);C1;R2(x);W2(x);C2g
+S2 = {R2(x);W2(x);C2;R1(x);W1(x);C1g
LậP LịCH là nối tiếp hóa riêng phần(chúng có thể là nối tiếp), nhưng :::
Cac giải thuật điều khiển tương tranh :
Bi quan
Two-Phase Locking Protocol (2PL)
{ Centralized (primary site) 2PL
{ Primary Copy 2PL
{ Distributed 2PL
-

Timestamp Ordering (TO)

{ Basic TO
{ Multiversion TO
{ Conservative TO
-

Hybrid

Optimistic
¤ Locking-based
¤ Timestamp ordering-based



Locking-based Algorithms:
* Gdich chỉ ra của nó bằng khóa các ycau từ bô ll (qtri khóa)
* Khóa hoặc là khóa đọc rl (còn gọi là khóa chia xe) hoặc là khóa ghi wl(còn gọi là khóa
drieng)
Các khóa đọc và các khóa ghi ddo
Lock-Compatibility Matrix:

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(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)
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
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 khoa
cho dữ liệu ở site đó.
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 vieetd 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 đề)


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 ỉ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)g then reject write;
else begin
execute write(x);
WTS(x) := TS(T);
end.
end case.
Problem: Basic TO tries to execute operations as soon as possible. TO
algorithm can never cause operations to wait, but instead, restarts them.

Advantage due to deadlock freedom, disadvantage, because numerous restarts
would have adverse performance implications.
Conservative Timestamp Ordering
¤ As basic TO, but additionally assurance of \write phase".
¤ Idea: operations of each transaction are queued until an ordering can be
established so that rejections are not possible, and they are executed in
that order.
read: if TS(T) < WTS(x) then reject read
else if lock queue(x) = ;^
TS(T) > minfTS(T0
) j T0
2 lock queue(x)g;
then insert read(x) into read queue(x);
else begin
execute read(x); RTS(x) := max{RTS(x);TS(T)g;
end;
lock: if TS(T) < max{RTS(x);WTS(x)g then reject lock
else insert lock(x) into lock queue(x);
write: lr queue := lock queue(x) [ read queue(x);


if TS(T) > minfTS(T0
) j T0
2 lr queue(x)g then
insert write(x) into write queue(x);
else begin
execute write(x); delete corresponding lock from lock queue(x);
WTS(x) := TS(T);
check read queue(x) and write queue(x) for executable operations;
end;

Comments:
¤ read: timestamp of read must be current wrt write timestamp of object
(as it is for normal TO)
Whether or not read is executed immediately or deferred depends on
whether lock with smaller timestamp already exists for this object.
In this case, read is deferred (insert into read queue), otherwise read is
executed
¤ lock lock queue corresponds to lock request queue in two-phase locking
protocol
¤ write write is only deferred if locks or reads with smaller timestamp for
that object exist and which need to be executed


rst
after executing write(x), exclusive lock is released.
possibly other operations then can be executed on that object
Multiversion Timestamp Ordering
¤ Do not modify values in DB but create new values.
¤ A readi(x) is translated into a read on one version of x
!