Thực hành Flashback trong Oracle database

Để thực hành về Flashback trong Oracle Database, chúng ta có thể thực hiện các bước sau để trải nghiệm từng tính năng của Flashback, bao gồm Flashback Query, Flashback Table, Flashback Drop, Flashback Transaction, và Flashback Database.

Thực hành Flashback trong Oracle database

Cấu hình cần thiết:

Đảm bảo chúng ta đã bật ARCHIVELOG mode và Flashback Logging ON:

Kiểm tra chế độ ARCHIVELOG

ARCHIVE LOG LIST;

Nếu chưa ở chế độ ARCHIVELOG, thực hiện các bước sau để kích hoạt:

Shutdown cơ sở dữ liệu

SHUTDOWN IMMEDIATE;

Khởi động cơ sở dữ liệu ở chế độ mount

STARTUP MOUNT;

Thay đổi chế độ thành ARCHIVELOG

ALTER DATABASE ARCHIVELOG;

Tương tự vậy thực hiện cho Flashback: database phải ở chế độ mount

ALTER DATABASE FLASHBACK ON;

Mở cơ sở dữ liệu:

ALTER DATABASE OPEN;

Kiểm tra chế độ Archivelog và Flashback:

select flashback_on from v$database;

ARCHIVE LOG LIST;

Tạo user mới:

CREATE USER duong_user IDENTIFIED BY oracle;
Alter user duong_user quota 50m on users;
GRANT CONNECT, RESOURCE TO duong_user;

Gán quyền Flashback cho user:

GRANT FLASHBACK ANY TABLE TO duong_user;

Login vào CSDL bằng user duong_user:

CONNECT duong_user/oracle;

1. Flashback Query

Flashback Query cho phép chúng ta truy vấn dữ liệu của một bảng tại một thời điểm trong quá khứ.

Tạo bảng mẫu:

CREATE TABLE employees (id NUMBER, name VARCHAR2(50), salary NUMBER);
INSERT INTO employees VALUES (1, 'John Doe', 5000);
INSERT INTO employees VALUES (2, 'Jane Smith', 6000);
COMMIT;

Chỉnh sửa dữ liệu và kiểm tra flashback:

Kiểm tra thông tin trước khi update

SELECT * FROM employees;

word image 3524 1

Chốt mốc thời gian timestamp:

SELECT TO_CHAR(SYSTIMESTAMP, 'DD-MON-YYYY HH24:MI:SS.FF TZR') FROM dual;

10-SEP-2024 16:41:42.628392 +07:00

Cập nhật bảng:

UPDATE employees SET salary = 7000 WHERE id = 1;

COMMIT;

Truy vấn bảng ở trạng thái trước khi cập nhật:

SELECT * FROM employees AS OF TIMESTAMP TO_TIMESTAMP_TZ('10-SEP-2024 16:41:42.628392 +07:00', 'DD-MON-YYYY HH24:MI:SS.FF TZR');

word image 3524 2

2. Flashback Table

Flashback Table cho phép khôi phục bảng về trạng thái trước đó.

Cập nhật bảng và thực hiện flashback:

Cập nhật dữ liệu:

UPDATE employees SET salary = 8000 WHERE id = 2;

COMMIT;

Khôi phục bảng về thời điểm trước cập nhật:

Chúng ta phải sử dụng user khác user SYS để thực hiện Flashback. Người dùng SYS là tài khoản hệ thống có quyền quản trị cao nhất và Oracle không cho phép thực hiện Flashback trên các đối tượng thuộc sở hữu của SYS vì lý do bảo mật và tính nhất quán của hệ thống.

Thực hiện bật Row movement trước khi Flashback:

ALTER TABLE employees ENABLE ROW MOVEMENT;

Thực hiện Flashback:

FLASHBACK TABLE employees TO TIMESTAMP TO_TIMESTAMP_TZ('10-SEP-2024 16:41:42.628392 +07:00', 'DD-MON-YYYY HH24:MI:SS.FF TZR');

word image 3524 3

word image 3524 4

Dữ liệu bảng đã trở về trạng thái ban đầu khi mới update.

3. Flashback Drop

Nếu chúng ta vô tình xóa một bảng, chúng ta có thể khôi phục nó từ thùng rác (Recycle Bin).

Xóa và khôi phục bảng:

DROP TABLE employees;

SELECT * FROM employees;

ERROR at line 1:

ORA-00942: table or view does not exist

Kiểm tra bảng trong thùng rác:

SELECT object_name, original_name FROM recyclebin;

word image 3524 5

Sau khi drop table thì dữ liệu bảng chưa bị xoá ngay lập tức mà còn lưu lại trong thùng rác

Khôi phục bảng:

FLASHBACK TABLE employees TO BEFORE DROP;

word image 3524 6

4. Flashback Transaction Query

Flashback Transaction cho phép chúng ta xem lại và tra cứu các giao dịch đã xảy ra trên cơ sở dữ liệu. (thực hiện bằng user SYS)

SELECT * FROM flashback_transaction_query
WHERE table_name = 'EMPLOYEES';

word image 3524 7

5. Flashback Database

Flashback Database giúp khôi phục toàn bộ cơ sở dữ liệu về một thời điểm trong quá khứ. Tuy nhiên, để thực hành tính năng này, cần phải có cấu hình Flashback Log và quyền DBA.

Chúng ta thực hiện insert thêm data vào bảng sau đó thực hiện flashback rồi kiểm tra kết quả:

INSERT INTO employees VALUES (3, 'duong', 3333333);
INSERT INTO employees VALUES (4, 'nana', 4444444);
COMMIT;
select * from employees;

word image 3524 8

SHUTDOWN IMMEDIATE;

STARTUP MOUNT;

FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP_TZ('10-SEP-2024 16:41:42.628392 +07:00', 'DD-MON-YYYY HH24:MI:SS.FF TZR');

ALTER DATABASE OPEN RESETLOGS;

Login vào user duong_user sau đó kiểm tra thông tin thì dữ liệu đã trở về lúc thời gian chỉ định bên trên:

conn duong_user/oracle;

select * from employees;

word image 3524 9

Chúc các bạn thành công!

 

Datalinks.vn

Hello các bạn, mình là Dương Nguyễn tác giả của blog này. Với gần 20 năm làm việc trong lĩnh vực CNTT, VT trong và ngoài nước, mong muốn được chia sẻ kiến thức và kinh nghiệm về database với các bạn đam mê và quan tâm đến lĩnh vực này. Đặc biệt là #OracleDatabase hoặc luyện thi #OCP database admin. Các bạn cần người đồng hành thì alo mình nhé. Call/Zalo: 0765 871 888. Thanks you !.....
0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận