Flashback Database


Flashback Tecnology mulai dikenalkan pada Oracle 9i yaitu pada fitur Flashback Query. Pada Oracle 10g Flashback technology dikembangkan lebih lengkap lagi dengan fitur sebagai berikut:

  • Flashback Database
  • Flashback Drop
  • Flashback Versions Query
  • Flashback Transaction Query
  • Flashback Table
  • Flashback Drop, Flashback Versions Query, Flashback Transactions Query, and Flashback
    Table digunakan untuk melakukan recovery terhadap schema object. Flashback Drop memungkinkan kita melakukan restore terhadap tabel yang sudah di drop. Flashback Versions Query dan Flashback Transaction Query digunakan untuk mengidentifikasi data, perubahan data dan transaksi yang sudah terjadi dalam database berdasarkan waktu atau system change number (SCN). Flashback Table digunakan untuk melakukan recovery tabel tertentu ke kondisi sebelumnya. Flashback table digunakan apabila user melakukan kesalahan update atau delete data seperti update dan delete tanpa diikuti dengan klausa WHERE sehingga data berubah atau terhapus semua.

    Pada tulisan ini akan dibahas khusus FLASHBACK DATABASE.

    Flashback Database

    Flashback database merupakan fitur baru dalam Oracle 10g, dengan flashback database kita bisa mengembalikan database ke kondisi tertentu berdasarkan waktu atau SCN. Flashback database digunakan untuk melakukan recovery database karena user melakukan truncate large table, drop user atau terjadi kesalahan transaksi yang sangat kompleks sehingga terlalu sulit untuk telusuri.

    Walaupun flashback database lebih mudah dan lebih simple dibandingkan dengan INCOMPLETE RECOVERY namun ada keterbatasan terhadap flashback database. Flashback database tidak bisa dilakukan dalam kondisi seperti:

  • Kerusakan media disk, kita tetap harus melakukan restore file database dari media backup dan melakukan recovery baik complete ataupun incomplete
  • Datafile sudah berubah ukuran menjadi lebih kecil atau biasa disebut shrinking datafiles
  • Control baru direstore atau recreate
  • Drop tablespace dan recovery dengan OPEN RESETLOGS
  • Tidak bisa melakukan flashback database ke SCN yang lebih kecil dari SCN yang ada di flashback log
  • KONFIGURASI FLASHBACK

    Secara default database yang kita buat belum bisa untuk melakukan flashback database. Kita harus melakukan beberapa konfigurasi dulu.

    1. Setting Archivelog Mode

    Flashback database mensyaratkan database harus ARCHIVELOG. Untuk mengetahui apakah database sudah archivelog atau belum, cek dengan perintah berikut:
    SQL> ARCHIVE LOG LIST;
    Database log mode Archive Mode
    Automatic archival Enabled
    Archive destination USE_DB_RECOVERY_FILE_DEST
    Oldest online log sequence 1
    Next log sequence to archive 3
    Current log sequence 3

    Info diatas menunjukkan database sudah ARCHIVELOG. Jika belum lakukan konfigurasi archivelog database dengan perintah berikut:
    SQL>; connect / as sysdba
    SQL> shutdown immediate;
    SQL> startup mount;
    SQL> ALTER DATABASE ARCHIVELOG;
    SQL> ALTER DATABASE OPEN;

    2. Setting Ukuran Flash Recovery Area

    Cek ukuran dari flash recovery area dengan perintah :
    SQL> SHOW PARAMETER db_recovery_file_dest_size

    NAME TYPE VALUE
    ———————————— ———– ——
    db_recovery_file_dest_size big integer 2G

    Secara default ukuran flash recovery area adalah 2 GB, jika iingin dibesarkan lakukan dengan perintah sebagai berikut:
    SQL> ALTER SYSTEM SET db_recovery_file_dest_size=3G;

    System altered.
    3. Setting Retention Flashback
    Retention flashback menentukan sampai sejauh mana database bisa di flashback, makin jauh atau lama waktu flashback tentunya akan lebih banyak mengkonsumsi space di flash recovery area. Misalkan retention flashback ditentukan selama 2 hari, lakukan dengan perintah :
    SQL> ALTER SYSTEM SET
    2 DB_FLASHBACK_RETENTION_TARGET=2880
    3 SCOPE=BOTH;

    System altered.
    5. Aktifkan Fasilitas Flashback
    Untuk meng-enable-kan fasilitas flashback database, database harus dalam kondisi MOUNT. Shutdown dan startup MOUNT database.
    SQL> shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup mount;
    ORACLE instance started.

    Total System Global Area 272629760 bytes
    Fixed Size 1248504 bytes
    Variable Size 88081160 bytes
    Database Buffers 180355072 bytes
    Redo Buffers 2945024 bytes
    Database mounted.

    Enable-kan fasilitas flashback
    SQL> alter database flashback on;

    Database altered.
    Open Database
    SQL> alter database open;

    Database altered.
    Cek apakah database sudah siap melakukan flashback database ?
    SQL> select flashback_on from v$database;
    FLASHBACK_ON
    ————
    YES

    Dari informasi diatas, database sudah siap untuk melakukan flashback jika suatu saat terjadi kesalahan yang dilakukan oleh user.

    MONITORING FLASHBACK
    Flashback database bisa dimonitor melalui dynamic view V$DATABASE, V$FLASHBACK_DATABASE_LOG dan V$FLASHBACK_DATABASE STATS.

    View V$DATABASE menampilkan informasi apakah Flashback Database enable atau disable, jika enable bernilai YES dan disable bernilai NO.
    SQL> select flashback_on from v$database;

    FLASHBACK_ON
    ——————
    YES

    View V$FLASHBACK_DATABASE_LOG view baru di Oracle 10g dan dibuat untuk mendukung fasilitas Flashback Database. Informasi dari view ini adalah total space yang diperlukan di recovery area untuk mendukung aktifitas flashback database. View ini juga menampilkan ukuran flashback data yaitu pada kolom FLASHBACK_SIZE. Kolom ESTIMATED_FLASHBACK_SIZE digunakan untuk menentukan perkiraan ukuran flashback data yang diperlukan untuk setting retention target yang sudah kita lakukan.
    SQL> select
    2 oldest_flashback_scn AS OLD_SCN,
    3 TO_CHAR(oldest_flashback_time,’DD-MM-YYYY:HH24:MI:SS’) AS OLD_TIME,
    4 retention_target,
    5 estimated_flashback_size,
    6 FLASHBACK_SIZE
    7 from v$flashback_database_log;

    OLD_SCN OLD_TIME RETENTION_TARGET ESTIMATED_FLASHBACK_SIZE FLASHBACK_SIZE
    ———- ——————- —————- ———————— ————–
    741507 02-10-2007:13:16:33 2880 0 8192000

    Berdasarkan informasi diatas, kita bis melakukan flashback database sampai ke SCN 741507 atau sampai waktu 02-10-2007:13:16:33. Ukuran flashback data di recovery area adalah 8192000 atau sekitar 7 MB. Perkiraan ukuran flashback data untuk retention target 2880 menit atau 2 hari masih 0, karena database ini baru saja disetting flashback on (baru 20 menit).

    MELAKUKAN FLASHBACK DATABASE

    Berikut ini akan didemokan bagaimana cara melakukan flashback database jika ada kesalahan transaksi dalam database.Sebenarnya kondisi error yang didemokan dibawah ini bisa diselesaikan dengan FLASHBACK TABEL tidak harus dengan FLASHBACK DATABASE.

  • Data Awal
    SQL> SET PAGESIZE 20
    SQL> SELECT EMPNO,ENAME,SAL,COMM
    2 FROM SCOTT.EMP;

    EMPNO ENAME SAL COMM
    ———- ———- ———- ———-
    7369 SMITH 800
    7499 ALLEN 1600 300
    7521 WARD 1250 500
    7566 JONES 2975
    7654 MARTIN 1250 1400
    7698 BLAKE 2850
    7782 CLARK 2450
    7788 SCOTT 3000
    7839 KING 5000
    7844 TURNER 1500 0
    7876 ADAMS 1100
    7900 JAMES 950
    7902 FORD 3000
    7934 MILLER 1300

    14 rows selected.

  • Ambil SCN dan Waktu system
  • SQL> SELECT CURRENT_SCN FROM V$DATABASE;

    CURRENT_SCN
    ———–
    775010

    SQL> SELECT TO_CHAR(SYSDATE,’DD-MM-YYYY:HH24:MI:SS’)
    2 FROM DUAL;

    TO_CHAR(SYSDATE,’DD
    ——————-
    03-10-2007:14:17:18

    Untuk demo ini SCN dan Waktu untuk flashback sudah kita tentukan.
    Dalam operasional sehari-hari kita tentu tidak bisa memastikan kapan atau pada saat SCN berapa user melakukan kesalahan. Untuk melakukan penelusuran perubahan data atau mengecek data kita pada waktu tertentu bisa digunakan FLASHBACK QUERY atau FLASHBACK VERSION QUERY. Flashback Query dan Flashback Version Query akan dibahas pada materi tersendiri.

  • Lakukan update terhadap tabel emp dengan perintah berikut:
  • SQL> UPDATE SCOTT.EMP
    2 SET SAL=4000, COMM=700;

    14 rows updated.

    SQL> COMMIT;

    Commit complete.

    SQL> SELECT EMPNO,ENAME,SAL,COMM
    2 FROM SCOTT.EMP;

    EMPNO ENAME SAL COMM
    ———- ———- ———- ———-
    7369 SMITH 4000 700
    7499 ALLEN 4000 700
    7521 WARD 4000 700
    7566 JONES 4000 700
    7654 MARTIN 4000 700
    7698 BLAKE 4000 700
    7782 CLARK 4000 700
    7788 SCOTT 4000 700
    7839 KING 4000 700
    7844 TURNER 4000 700
    7876 ADAMS 4000 700
    7900 JAMES 4000 700
    7902 FORD 4000 700
    7934 MILLER 4000 700

    14 rows selected.
    User melakukan kesalahan karena mengupdate data tanpa diikuti dengan WHERE sehingga semua data berubah, mau ROLLBACK sudah terlanjur COMMIT.

    Ingat tadi sudah disebutkan sebenarnya ini bisa diselesaikan menggunakan FLASHBACK TABLE. Tetapi disini kita akan gunakan FLASHBACK DATABASE karena materinya flashback database🙂.

    Kembalikan seluruh kondisi objek database ke waktu sebelum tabel SCOTT.EMP diupdate yaitu waktu 03-10-2007:14:17:18 atau SCN : 775010

  • LAKUKAN FLASHBACK KE SCN ATAU TIME
  • 1. Shutdown Database
    SQL> shutdown abort;
    ORACLE instance shut down.

    2. Startup MOUNT database
    SQL> STARTUP MOUNT;
    ORACLE instance started.

    Total System Global Area 419430400 bytes
    Fixed Size 1249368 bytes
    Variable Size 289410984 bytes
    Database Buffers 125829120 bytes
    Redo Buffers 2940928 bytes
    Database mounted.

    3. Flahsback database berdasarkan waktu (03-10-2007:14:17:18)
    SQL> FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP(’03-10-2007:14:17:18′,’DD-MM-YYYY:HH24:MI:SS’);
    Flashback complete.

      Catatan:
      Jika ingin melakukan flashback berdasarkan SCN perintahnya:
      FLASHBACK DATABASE TO SCN 775010;

    4. Open database dengan RESETLOGS
    SQL> ALTER DATABASE OPEN RESETLOGS;

    Database altered.
    5. Verifikasi hasil flashback
    SQL> SELECT EMPNO,ENAME,SAL,COMM
    2 FROM SCOTT.EMP;

    EMPNO ENAME SAL COMM
    ———- ———- ———- ———-
    7369 SMITH 800
    7499 ALLEN 1600 300
    7521 WARD 1250 500
    7566 JONES 2975
    7654 MARTIN 1250 1400
    7698 BLAKE 2850
    7782 CLARK 2450
    7788 SCOTT 3000
    7839 KING 5000
    7844 TURNER 1500 0
    7876 ADAMS 1100
    7900 JAMES 950
    7902 FORD 3000
    7934 MILLER 1300

    14 rows selected.
    Data sudah kembali seperti sebelum diupdate.

    Dengan flashback database berarti semua objek database di flashback. Untuk tablespace kita bisa setting agar pada saat flashback suatu tablespace tidak ikut ter-flashback. Untuk informasi apakah tablespace ikut ter-flashback atau tidak, cek dengan perintah :
    SQL> SELECT NAME, FLASHBACK_ON
    2 FROM V$TABLESPACE;

    NAME FLA
    —————————— —
    SYSTEM YES
    UNDOTBS1 YES
    SYSAUX YES
    USERS YES
    EXAMPLE YES
    TBS_CAT YES
    TEMP_BARU YES
    INDX YES
    TEMP YES

    Misalkan kita menginginkan tablespac INDX tidak ikut ter-flashback maka flashback untuk tablespace INDX harus diset OFF.
    SQL> ALTER TABLESPACE INDX FLASHBACK OFF;
    Tablespace altered.

    SQL> SELECT NAME, FLASHBACK_ON
    2 FROM V$TABLESPACE;

    NAME FLA
    —————————— —
    SYSTEM YES
    UNDOTBS1 YES
    SYSAUX YES
    USERS YES
    EXAMPLE YES
    TBS_CAT YES
    TEMP_BARU YES
    INDX NO
    TEMP YES

    Leave a Reply

    Fill in your details below or click an icon to log in:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out / Change )

    Twitter picture

    You are commenting using your Twitter account. Log Out / Change )

    Facebook photo

    You are commenting using your Facebook account. Log Out / Change )

    Google+ photo

    You are commenting using your Google+ account. Log Out / Change )

    Connecting to %s