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
Trang 1Quản lý giao tác
Trang 2Giao 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
Trang 3Thực thi câu lệnh SQL
• Câu lệnh SQL ta quan tâm ở đây là: SELECT, INSERT, UPDATE, và DELETE
Trang 4Thự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
Trang 6Thự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
• 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.
• 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
Trang 7Thự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.
Trang 8Bắ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.
Trang 9• 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
Trang 10• 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
Trang 11• 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;
Trang 12SAVEPOINT
Trang 13Monitor and Resolve Locking Conflicts
Trang 14Shared và Exclusive Locks
– 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.
Trang 15Shared and Exclusive Locks
Session 1 Session 2
acquire exclusive lock on row empid=25
and shared lock on table emp
Update Emp set salary=100 where empid=25;
Trang 16Shared 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;
Trang 18Tranh 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
Trang 19Detecting and Resolving Lock Contention
To terminate a session, either use Database Control, or the ALTER SYSTEM KILL SESSION command.
Trang 21Deadlocks
Trang 22• 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
Trang 23Overview 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
Trang 24Transactions 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