Undo trong Oracle database là gì
Trong Oracle Database, “UNDO” là một khái niệm quan trọng liên quan đến quá trình giao dịch và quản lý transaction.
- Khái niệm:
- “UNDO” là một vùng bộ nhớ được sử dụng để lưu trữ các thay đổi dữ liệu được thực hiện trong quá trình thực hiện một giao dịch.
- Mục đích chính của UNDO là đảm bảo tính nhất quán và khả năng phục hồi (rollback) của dữ liệu trong trường hợp giao dịch bị hủy hoặc lỗi xảy ra.
- Cách sử dụng:
- UNDO được quản lý bởi hệ thống Oracle Database và không cần được quản lý bằng tay.
- Trong quá trình thực hiện một giao dịch, các thay đổi được ghi vào bộ nhớ UNDO.
- Nếu giao dịch hoàn thành thành công, các thay đổi này được áp dụng vào cơ sở dữ liệu và không còn cần thiết cho UNDO nữa.
- Nếu giao dịch bị hủy hoặc lỗi xảy ra, UNDO được sử dụng để hoàn tác các thay đổi, đưa cơ sở dữ liệu về trạng thái trước khi giao dịch được bắt đầu.
- Thao tác quản lý UNDO:
- Oracle tự động quản lý UNDO thông qua các quy trình nội bộ của hệ thống.
- Quản trị viên có thể cấu hình các tham số liên quan đến UNDO như dung lượng vùng bộ nhớ UNDO, thời gian lưu giữ, và cơ chế xử lý khi không gian UNDO đầy.
- Đối với các tác vụ quản trị cao cấp, như sao lưu và phục hồi, UNDO cũng có vai trò quan trọng.
Giả sử chúng ta có một bảng trong cơ sở dữ liệu Oracle có tên là Employees
với các cột EmployeeID
, FirstName
, LastName
, và Salary
. Bây giờ, chúng ta muốn thực hiện một giao dịch để cập nhật mức lương của một nhân viên và kiểm tra tính nhất quán và khả năng phục hồi của UNDO.
Dưới đây là một ví dụ về cách thực hiện giao dịch và sử dụng UNDO:
-- Bước 1: Bắt đầu giao dịch BEGIN -- Bước 2: Thực hiện câu lệnh UPDATE để cập nhật mức lương UPDATE Employees SET Salary = Salary * 1.1 -- Tăng mức lương lên 10% WHERE EmployeeID = 101; -- Giả sử nhân viên có mã số 101 -- Bước 3: Kiểm tra kết quả SELECT * FROM Employees WHERE EmployeeID = 101; -- Bước 4: Hủy bỏ giao dịch (không commit) ROLLBACK; END;
Trong ví dụ trên:
- Ở bước 1, chúng ta bắt đầu một giao dịch bằng cách sử dụng câu lệnh
BEGIN
. - Ở bước 2, chúng ta cập nhật mức lương của nhân viên có
EmployeeID
là 101 bằng cách tăng mức lương lên 10%. - Ở bước 3, chúng ta kiểm tra kết quả của việc cập nhật bằng cách truy vấn bảng
Employees
cho nhân viên cóEmployeeID
là 101. - Ở bước 4, thay vì commit (lưu trạng thái), chúng ta sử dụng
ROLLBACK
để hủy bỏ giao dịch. Khi giao dịch được hủy bỏ, UNDO sẽ được sử dụng để hoàn tác thay đổi, trả về mức lương của nhân viên về trạng thái ban đầu.