Table of Contents
Giới thiệu
Flashback Table là gì?
Flashback Table là kỹ thuật đưa dữ liệu của 1 bảng quay lại 1 thời điểm cụ thể trong quá khứ.Kỹ thuật này thường được sử dụng khi người dùng hay ứng dụng lỡ thay đổi hay xoá nhầm dữ liệu.
Một số chú ý quan trọng khi sử dụng Flashback
- Không flashback được những đối tượng thuộc schema SYS.
- Nếu bảng cần flashback có bảng con tham chiếu đến, cần flashback bảng con trước.
- Nếu những hành động sau diễn ra sau thời điểm bạn cần flashback, thao tác flashback sẽ không thực hiện được:
- upgrading, moving, truncating table,
- thêm constraint vào table, thêm table vào cluster
- thay đổi hay xoá cột trong bảng
- thay đổi column encryption key
- add, drop, merg, split, coales, hay truncate partition hay subpartition (trừ việc thêm partition kiểu range).
- Các đối tượng dependant với table (indexes, trigger) sẽ quay lại nhưng tên sẽ giữ nguyên như lúc ở recyclebin. Cần thay đổi lại tên sau khi flashback.
Các bước thực hiện Flashback
Kiểm tra xem Flashback log đã được enable hay chưa
select flashback_on from v$database;
Nếu chưa, bạn hãy thực hiện bước sau:
Enable Flashback log
alter database flashback on;
và set thời gian bạn muốn lưu trữ các file flashback log (mặc định là 1440 phút = 24 giờ)
alter system set db_flashback_retention_target= 2880;
Tạo bảng và thêm dữ liệu
create table duydx.products (
id number primary key,
product_name varchar2(50)
);
Thêm dữ liệu cho bảng
insert into duydx.products values (1,'Product 1');
insert into duydx.products values (2,'Product 2');
insert into duydx.products values (3,'Product 3');
insert into duydx.products values (4,'Product 4');
insert into duydx.products values (5,'Product 5');
commit;
Kiểm tra SCN hay thời gian hiện tại
select to_char(current_scn) from v$database;
TO_CHAR(CURRENT_SCN)
----------------------------------------
4668734
select to_char(sysdate, 'dd-MON-YYYY hh24.MI.SS') from dual;
TO_CHAR(SYSDATE,'DD-MON-YYH
---------------------------
12-DEC-2022 11.14.50
Giả lập xoá nhầm dữ liệu
delete duydx.products;
commit;
Bạn đã xoá nhầm toàn bộ dữ liệu của bảng products!!!
Đừng lo lắng, hãy ngay lập tức làm theo các bước dưới đây:
Enable row movement
alter table duydx.products enable row movement;
Flashback to scn
flashback table duydx.products to scn 4668734;
Số SCN ở đây là số bạn đã ghi lại được ở bước bên trên. hoặc bạn cũng có thể chỉ định ra thời gian trước khi bị xoá nhầm.
Flashback to timestamp
flashback table duydx.products to timestamp to_timestamp('12-DEC-2022 11.14.50','dd-MON-YY hh24.MI.SS');
Disable row movement
alter table duydx.products disable row movement;
Kiểm tra lại dữ liệu
select * from duydx.products;
Chúc các bạn thành công.
Nguồn: https://dangxuanduy.com/
Hiện tại, tôi có tổ chức đều đặn các khóa học về quản trị Oracle Database, tôi sẽ để thông tin ở đây, để bạn nào quan tâm về lịch học cũng như chương trình học có thể theo dõi nhé.
