In today’s article, I will be explaining how we can use the FLASHBACK TABLE statement to restore an earlier state of a table in case of an error.
1. We query the data of the table to be tested.
| 
					 1 2 3 4 5 6 7 8  | 
							13:09:15 [Primary-2] SQL> select * from hr.regions; 	 REGION_ID REGION_NAME 	---------- ------------------------- 	         1 Europe 	         2 Americas 	         3 Asia 	         4 Middle East and Africa  | 
					
2. DML operations are performed on the table.
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  | 
							13:09:24 [Primary-2] SQL> update hr.regions set region_name='Middle East' where region_id=4; 	1 row updated. 	13:10:07 [Primary-2] SQL> commit; 	Commit complete. 	13:10:11 [Primary-2] SQL> insert into hr.regions values(5,'Africa'); 	1 row created. 	13:11:11 [Primary-2] SQL> commit; 	Commit complete.  | 
					
3. We query the table’s data again.
| 
					 1 2 3 4 5 6 7 8 9  | 
							13:11:19 [Primary-2] SQL> select * from hr.regions; 	 REGION_ID REGION_NAME 	---------- ------------------------- 	         1 Europe 	         2 Americas 	         3 Asia 	         4 Middle East 	         5 Africa  | 
					
4. The table is flashback.
| 
					 1 2 3 4 5  | 
							13:12:16 [Primary-2] SQL> flashback table hr.regions to timestamp to_timestamp('25/05/2018 13:05:00','DD/MM/YYYY HH24:MI:SS'); 	flashback table hr.regions to timestamp to_timestamp('25/05/2018 13:05:00','DD/MM/YYYY HH24:MI:SS') 	                   * 	ERROR at line 1: 	ORA-08189: cannot flashback the table because row movement is not enabled  | 
					
5. Row movement is enabled in the table.
| 
					 1 2 3  | 
							13:13:37 [Primary-2] SQL> alter table hr.regions enable row movement; 	Table altered.  | 
					
6. The painting is flashback.
| 
					 1 2 3  | 
							13:15:57 [Primary-2] SQL> flashback table hr.regions to timestamp to_timestamp('23/05/2018 13:05:00','DD/MM/YYYY HH24:MI:SS'); 	Flashback complete.  | 
					
7. It is checked whether the table is back to its previous state.
| 
					 1 2 3 4 5 6 7 8  | 
							13:16:11 [Primary-2] SQL> select * from hr.regions; 	 REGION_ID REGION_NAME 	---------- ------------------------- 	         1 Europe 	         2 Americas 	         3 Asia 	         4 Middle East and Africa  | 
					
 
