Sử dụng Flashback Table để khôi phục dữ liệu

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!!!

Đọc thêm  Ý nghĩa các loại partition table trong PostgreSQL

Đừ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;
				
			

flashback table

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é.

Viết một bình luận