![]() |
| Gambar 1. Flashback operation |
Tujuan dari Flashback dan Database Point-in-Time-Recovery
- User error atau terjadi data corruption. Semisalnya DBA secara tidak sengaja mengubah dari suatu table, atau menghapus dari object yang masih diperlukan
- Kegagalan upgrade dari database atau script
- Memulihkan database secara lengkap karena kegagalan media, dimana anda tidak memiliki semua redo logs dan incremental backup yang belum terupdate/
Physical Flashback Fitur sangat berguna di Backup dan Recovery
Flashback lebih efisien daripada penerapan media recovery. Dimana dia tidak perlu untuk memulihkan datafiles dan hanya membutuhkan sedikit penerapan dari redo log.Pertama, mari kita pelajari restore point. Restore point ini digunakan untuk menjaga keutuhan dari database dari fixed time. Jadi kita dapat melakukan pengembalian keadaan sebelumnya secara langsung.
Ref : docs.oracle
1. Flashback dari update table
Untuk menggunakan restore point, pastikan anda memasukkan privilage SELECT ANY DICTIONARY dan FLASHBACK ANY TABLE ke dalam user hr.
![]() |
| Gambar 2. Hak akses user HR |
Pertama, buatlah restore point dahulu:
SQL> CREATE RESTORE POINT good_data;
Restore point created.
Selanjutnya cek tabel anda yang mau dirubah
SQL> select salary from employees where employee_id=108;
SALARY
----------
12008
Setelah itu, lakukan perubahan pada tabel anda
SQL> update employees set salary = salary*10 where employee_id=108;
1 row updated.
Selanjutnya cek kembali perubahan dan simpan perubahannya
SQL> select salary from employees where employee_id=108;
SALARY
----------
120080
SQL> commit;
Commit complete.
Lalu, gunakan command flashback yang ada dibawah ini dan anda akan mengalami error seperti ini
SQL> FLASHBACK TABLE employees TO RESTORE POINT good_data;
FLASHBACK TABLE employees TO RESTORE POINT good_data
*
ERROR at line 1:
ORA-08189: cannot flashback the table because row movement is not enabled
Oleh karena itu, solusinya mengenable kan row movement
SQL> ALTER TABLE employees ENABLE ROW MOVEMENT;
Table altered.
SQL> FLASHBACK TABLE employees TO RESTORE POINT good_data;
Flashback complete.
Lalu, cek kembali hasilnya
SQL> select salary from employees where employee_id=108;
SALARY
----------
12008
2. Flashback dari drop table
Pertama, buatlah sebuah table terlebih dahulu
SQL> CREATE TABLE EMPLOYEE_DEMO(
2 employee_id number (10) not null,
3 employee_name varchar2(50) not null);
Table created.
Selanjutnya, buatlah restore point terlebih dahulu
SQL> CREATE RESTORE POINT good_data2;
Restore point created.
Dan lakukan drop table
SQL> DROP TABLE employee_demo;
Table dropped.
Lalu lakukan pengecekan hasil buangan dengan show recylebin
SQL> SHOW RECYCLEBIN;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
EMPLOYEE_DEMO BIN$XhHTmdxBE9XgU7coCgrA3A==$0 TABLE 2017-11-16:10:00:46
SQL> SELECT object_name AS recyle_name, original_name, type
2 FROM recyclebin;
Setelah itu, gunakan flashback command kembali
SQL> FLASHBACK TABLE HR.EMPLOYEE_DEMO TO BEFORE DROP;
Flashback complete.
Dan selesai, anda dapat melihat bahwa recycle bin menjadi kosong kembali dan table anda sudah ada.
Untuk multiple table, anda juga dapat melakukan flashack secara bertahap dan mengganti nama tablenya. Semisal
CREATE TABLE temp_employees ( ...columns ); # temp_employees version 1
DROP TABLE temp_employees;
CREATE TABLE temp_employees ( ...columns ); # temp_employees version 2
DROP TABLE temp_employees;
CREATE TABLE temp_employees ( ...columns ); # temp_employees version 3
DROP TABLE temp_employees;
Selanjutnya anda dapat melakukan pengecekan di recycle bin
SQL> SHOW RECYCLEBIN;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
EMPLOYEE_DEMO BIN$XhHTmdxKE9XgU7coCgrA3A==$0 TABLE 2017-11-16:10:20:54
EMPLOYEE_DEMO BIN$XhHTmdxHE9XgU7coCgrA3A==$0 TABLE 2017-11-16:10:19:22
EMPLOYEE_DEMO BIN$XhHTmdxEE9XgU7coCgrA3A==$0 TABLE 2017-11-16:10:19:01
Lalu lakukan flashback dengan mengganti namanya
SQL> FLASHBACK TABLE employee_demo TO BEFORE DROP
2 RENAME TO employee_demo_ver3;
Flashback complete.
SQL> FLASHBACK TABLE employee_demo TO BEFORE DROP
2 RENAME TO employee_demo_ver2;
Flashback complete.
SQL> FLASHBACK TABLE employee_demo TO BEFORE DROP
2 RENAME TO employee_demo_ver1;
Flashback complete.
Performing a Flashback Database Operation
Dimana kita melakukan flashback di suatu titik agar database kembali seperti semula. Dimana titik yang sebagai incarnasi tersebut kita sebut sebagai SCN.Pertama, kita melihat scn yang sedang aktif
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
2963467
Selanjutnya buatlah scn baru dengan enable flashback database. Caranya adalahPertama, ubah database ke mode mount dan jangan buka database dahulu
RMAN> shutdown immediate
database closed
database dismounted
Oracle instance shut down
RMAN> startup mount;
connected to target database (not started)
Oracle instance started
database mounted
Total System Global Area 784334848 bytes
Fixed Size 2929304 bytes
Variable Size 545262952 bytes
Database Buffers 230686720 bytes
Redo Buffers 5455872 bytes
Selanjutnya, silahkan set berapa jangka waktu melakukan penyimpanan
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=4320; # 3 days
Lalu ubah database flashback menjadi ON
ALTER DATABASE FLASHBACK ON;
Selanjutnya masuk ke dalam sql plus dan buatlah restore point seperti berikut
SQL> create restore point before_upgrade guarantee flashback database;
Restore point created.
Dengan begitu selesai.
Setelah membuat enable flashback dan membuat restore point baru, sekarang lanjutkan dengan mengecek konfigurasi scn
SQL> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME
2 FROM V$FLASHBACK_DATABASE_LOG;
OLDEST_FLASHBACK_SCN OLDEST_FL
-------------------- ---------
2970148 16-NOV-17
SQL> SELECT CURRENT_SCN
2 FROM V$DATABASE;
CURRENT_SCN
-----------
2971876
SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,
2 GUARANTEE_FLASHBACK_DATABASE
3 FROM V$RESTORE_POINT
4 WHERE GUARANTEE_FLASHBACK_DATABASE='YES';
NAME
--------------------------------------------------------------------------------
SCN
----------
TIME
---------------------------------------------------------------------------
DATABASE_INCARNATION# GUA
--------------------- ---
BEFORE_UPGRADE
2971821
16-NOV-17 11.00.24.000000000 AM
2 YES
Selanjutnya masukklah ke rman dan masuklah ke mode mount dan lakukan flashback terhadap restore point yang kita buat sebelumnya
RMAN> flashback database to restore point before_upgrade;
Starting flashback at 16-NOV-17
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:01
Finished flashback at 16-NOV-17
Berikut ini linknya : docs.oracleAnda juga dapat mendapatkan hasil yang sama dengan menggunakan rman, seperti dibawah ini
Pertama pulihkan database
RMAN> recover database;
Starting recover at 16-NOV-17
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=22 device type=DISK
starting media recovery
media recovery complete, elapsed time: 00:00:00
Finished recover at 16-NOV-17
Selanjutnya, gunakan flashback ke scn
RMAN> flashback database to scn 2971876;
Starting flashback at 16-NOV-17
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:01
Finished flashback at 16-NOV-17
--------------- Selesai ---------------






