Tải bản đầy đủ (.pptx) (25 trang)

Quản trị cơ sở dữ liệu Oracle 09 control transactions

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 (380.86 KB, 25 trang )

Quản lý giao tác


Giao tác cơ sở dữ liệu



Một giao tác là một đơn vị công việc nguyên tố chứa một hoặc nhiều câu lệnh
DML.

– Nguyên tố: không thể phân chia được nữa. Hoặc là thực hiện thành công (committed)



hoặc là bị hủy bỏ (rolled back)

Tính (ACID) của giao tác: giao tác phải đảm bảo tính nguyên tố (Atomic), nhất
quán (Consistency), cô lập (Isolation), bền vững (Durability)


Thực thi câu lệnh SQL



Câu lệnh SQL ta quan tâm ở đây là: SELECT, INSERT, UPDATE, và DELETE.


Thực thi một câu lệnh SELECT








Bước 1: User process chuyển câu lệnh SELECT tới server process và server sẽ
tìm kiếm trong database buffer cache xem có dữ liệu không

– Nếu có: đi tới bước 4
– Ngược lại: đi tới bước 2

Bước 2: định vị block dữ liệu trong datafiles
Bước 3: copy chúng vào trong database buffer cache
Bước 4: chuyển dữ liệu tới server process
Bước 5: trả kết quả về user process.



Thực thi một câu lệnh UPDATE





Lock phải được tạo ra trên những dòng dữ liệu và index key tương ứng.



Từ đây, tất cả các câu truy vấn đến dữ liệu đã bị thay đổi từ những session khác
sẽ được chuyển đến undo data.


Redo được tạo ra: server process ghi những thay đổi vào log buffer.
Việc update được thực thi trong database buffer cache:

– Block of table data được cập nhật với giá trị mới của column.
– Giá trị cũ của column được ghi vào block trong undo segment.


Thực thi câu lệnh INSERT và DELETE




Định vị block liên quan trong database buffer cache.
Tất cả những change vector áp dụng cho data và undo block được ghi vào log
buffer

– Đối với INSERT: vector được áp dụng cho undo block là rowid của dòng dữ liệu mới.
– Đối với DELETE: change vector được ghi vào undo block là toàn bộ dòng dữ liệu.


Bắt đầu và kết thúc của một transaction




Một session bắt đầu một transaction khi gặp câu lệnh DML và kết thúc khi gặp
một câu lệnh COMMIT hoặc ROLLBACK.
Ngoài ra, những trường hợp sau sẽ ngầm kết thúc một transaction:

– Chạy một câu lệnh DDL (CREATE, ALTER, or DROP) hoặc DCL (GRANT or

REVOKE).

– Thoát khỏi công cụ người dùng (SQL*Plus, SQL Developer …)
– Nếu client session thất bại(fail).
– Nếu hệ thống xảy ra hỏng hóc.


COMMIT






LGWR đẩy dữ liệu từ log buffer vào ổ đĩa (disk).
DBWn không làm bất cứ công việc gì.
LGWR báo hiệu transaction hoàn thành.
Tất cả những session khác sẽ không phải vào undo blocks nữa.


ROLLBACK





Oracle giữ một hình ảnh (image) dữ liệu vốn có trước khi transaction bắt đầu.
Rollback sẽ hủy bỏ tất cả những thay đổi bằng cách restore lại dữ liệu.
Các session khác sẽ không nhận ra bất cứ sự thay đổi gì trên dữ liệu.



SAVEPOINT





Kiểm soát hiệu quả của lệnh ROLLBACK.
Đảo ngược tất cả những thay đổi sau một thời điểm nào đó
Cú pháp:

– SAVEPOINT savepoint;
– ROLLBACK TO savepoint;


SAVEPOINT


Monitor and Resolve Locking Conflicts


Shared và Exclusive Locks



Exclusive lock:



Shared lock:


– Ngăn chặn việc chia sẻ dữ liệu.
– Lock được nắm giữ cho đến khi transaction kết thúc.
– Cho phép tài nguyên liên quan được chia sẻ.
– Ngăn chặn session khác yêu cầu một exclusive lock trên table.


Shared and Exclusive Locks
Session 1

Session 2

--acquire exclusive lock on row empid=25

--acquire exclusive lock on row empid=40

--and shared lock on table emp

--and shared lock on table emp

Update Emp set salary=100 where empid=25;

Update Emp set salary=500

--1 row updated

where empid=40;
--1 row updated
--the session will hang until the lock on row
--empid=25 release


Update Emp set salary=500
where empid=25;
--release exclusive and shared lock
Commit;
--still hold exclusive lock on row empid=40, 25
--and shared lock on Emp

1 row updated
Commit;


Shared and Exclusive Locks
--acquire exclusive lock on table Emp
--and release it when DDL statement ends

ALTER TABLE emp DROP COLUMN address

--acquire exclusive lock on row empid=25
--and shared lock on table emp
Update Emp set salary=100 where empid=25;
--1 row updated

--cannot drop column because
--shared lock on table emp
ALTER TABLE emp DROP COLUMN firstname

Commit;




Tranh chấp Lock (Lock Contention)





Lock contention: hai hay nhiều session muốn có exclusive lock trên cùng row
hay object.
Oracle database cung cấp tiện ích cho việc phát hiện tranh chấp lock.
Một trường hợp đặc biệt trong tranh chấp lock là deadlock.


Detecting and Resolving Lock Contention

To terminate a session, either use Database Control, or the ALTER SYSTEM KILL SESSION command.


Deadlocks





Hai session block lẫn nhau, session này đang đợi session kia để giải phóng lock
nắm giữ.
Deadlock không phải do DBA, gây nên do việc thiết kế chương trình không khoa
học.
Và được giải quyết tự động bởi database.



Deadlocks


Deadlocks





Nếu deadlock xảy ra, cả hai session sẽ dừng lại một chút.
Một session nhận biết deadlock sẽ rollback câu lệnh gây nên deadlock.
Giải phóng tài nguyên cho session khác.


Overview of Undo






Undo data is the information needed to reverse the effects of DML statements
It is often referred to as rollback data
The preupdate version of the data is written out to an undo segment
An image of the data before the transaction occurred is constructed from the undo
segments


Transactions and Undo Data








When a transaction starts, Oracle will assign it to one (and only one) undo
segment
All the undo data must be retained until a transaction commits
Active undo can never be overwritten
Expired undo can be overwritten.
Unexpired undo can be overwritten, but only if there is a shortage of undo space



×