Melacak Perubahan Data

Sebagai DBA, tugas kita adalah mengamankan atau menjaga data dari kerusakan sehingga database bisa memberikan data yang valid. Dalam operasional bisa saja user melakukan kesalahan dalam melakukan update data sehingga data yang disajikan menjadi salah. Jika perubahan belum dibuat permanen (commit) perubahan tersebut masih bisa dibatalkan (rollback). Tentunya akan menjadi masalah besar jika perubahan baru disadari setelah beberapa jam, hari atau bulan. User yang mengupdate juga sudah lupa kapan melakukan kesalahan update. Tentunya ini akan menambah pusing DBA karena untuk mencari kapan persisnya kesalahan update itu terjadi.

Untuk Oracle 10g, DBA gak perlu pusing lagi, karena Oracle 10g menyediakan fitur Flashback Query, Flashback Version Query dan Flashback Transaction Query untuk melakukan pelacakan perubahan data yang terjadi.

  • Flashback Query

Fitur ini digunakan untuk mengetahui data (nilai suatu kolom) pada suatu waktu tertentu.

  • Flashbak Version Query

Fitur ini untuk mengetahui perubahan data yang terjadi antara waktu t1 sampai waktu t2

  • Flashback Transaction Query

untuk mengetahui semua perubahan yang disebabkan oleh satu transaction ID

Berikut ini adalah demo bagaimana cara melacak perubahan data dengan Flashback Query dan Flashback Transaction Query.

Login ke database sebagai user SCOTT

CONNECT SCOTT/TIGER;
create table peserta
(ID    NUMBER(4),
 NAMA  CHAR(15),
 NILAI NUMBER(4)) TABLESPACE USERS;
INSERT INTO PESERTA VALUES(1,'BUDI',60);
INSERT INTO PESERTA VALUES(2,'DINA',75);
COMMIT;

– Tunggu sekitar 1 menit

UPDATE PESERTA SET NILAI=65 WHERE ID=1;
INSERT INTO PESERTA VALUES(3,'MAWAR',68);
COMMIT;

– Tunggu sekitar 1 menit

UPDATE PESERTA SET NILAI=70 WHERE ID=1;
INSERT INTO PESERTA VALUES(4,'MAWARDI',80);
COMMIT;

– Lihat data di tabel PESERTA

SQL> SELECT * FROM PESERTA;

        ID NAMA                 NILAI
---------- --------------- ----------
         1 BUDI                    70
         2 DINA                    75
         3 MAWAR                   68
         4 MAWARDI                 80

– Tunggu sekitar 1 menit

– User melakukan kesalahan UPDATE.

UPDATE PESERTA SET NILAI=90;
COMMIT;

– sehingga data pada tabel PESERTA menjadi :

SQL> SELECT * FROM PESERTA;
        ID NAMA                 NILAI
---------- --------------- ----------
         1 BUDI                    90
         2 DINA                    90
         3 MAWAR                   90
         4 MAWARDI                 90

– FLASHBACK VERSION QUERY berdasarkan WAKTU

COL AWAL FORMAT A20
COL AWAL FORMAT A20
COL NAMA FORMAT A5
SET LINESIZE 120
SELECT ID,NAMA,NILAI,
       VERSIONS_STARTSCN SCA_AWAL,
       VERSIONS_ENDSCN SCN_AKHIR,
       TO_CHAR(VERSIONS_STARTTIME,'DD-MM-YY:HH24:MI:SS') AWAL,
       TO_CHAR(VERSIONS_ENDTIME,'DD-MM-YY:HH24:MI:SS') AKHIR
FROM PESERTA
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE ID=1;
   ID NAMA      NILAI AWAL                 AKHIR
----- ----- --------- ----------------- -----------------
    1 BUDI         90 06-03-09:09:25:19
    1 BUDI         70 06-03-09:09:23:37 06-03-09:09:25:19
    1 BUDI         65 06-03-09:09:20:55 06-03-09:09:23:37
    1 BUDI         60                   06-03-09:09:20:55

– FLASHBACK VERSION QUERY berdasarkan SCN

SELECT ID,NAMA,NILAI,
       VERSIONS_STARTSCN SCA_AWAL,
       VERSIONS_ENDSCN SCN_AKHIR
FROM PESERTA
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE ID=1;
   ID NAMA      NILAI   SCA_AWAL  SCN_AKHIR
----- ----- --------- ---------- ----------
    1 BUDI         90    1380320
    1 BUDI         70    1380102    1380320
    1 BUDI         65    1379304    1380102
    1 BUDI         60               1379304

– FLASHBACK QUERY

SELECT * FROM PESERTA
AS OF TIMESTAMP
TO_TIMESTAMP('06-MAR-2009:09:24:00','DD-MON-YYYY:HH24:MI:SS');
    ID NAMA                 NILAI
------ --------------- ----------
     1 BUDI                    70
     2 DINA                    75
     3 MAWAR                   68
     4 MAWARDI                 80
SELECT * FROM PESERTA
AS OF SCN 1380102;
    ID NAMA                 NILAI
------ --------------- ----------
     1 BUDI                    70
     2 DINA                    75
     3 MAWAR                   68
     4 MAWARDI                 80
SQL> SELECT * FROM PESERTA
  2  AS OF TIMESTAMP TO_TIMESTAMP('04-DEC-2008','DD-MON-YYYY');
        ID NAMA            NILAI
---------- ---------- ----------
         1 BUDI               80

– FLASHBACK TABLE

SQL> ALTER TABLE PESERTA ENABLE ROW MOVEMENT;
Table altered.

– KEMBALIKAN TABEL KE KONDISI JAM ‘06-MAR-2009:09:24:00′
– ATAU SCN 1380102

FLASHBACK TABLE PESERTA TO TIMESTAMP
TO_TIMESTAMP('06-MAR-2009:09:24:00','DD-MON-YYYY:HH24:MI:SS');

Flashback complete.

– ATAU BERDASARKAN SCN
– FLASHBACK TABLE PESERTA TO SCN 1380102

SELECT * FROM PESERTA;
    ID NAMA                 NILAI
------ --------------- ----------
     1 BUDI                    70
     2 DINA                    75
     3 MAWAR                   68
     4 MAWARDI                 80

Jika Anda ingin mengembalikan semua kondisi database ke waktu sebelumnya gunakan Flashback Database.

Selamat Mencoba

Salam

Bambang Sutejo

Tags: , , ,

This entry was posted on Thursday, March 19th, 2009 at 3:12 pm and is filed under 2. DBA. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

8 Responses to “Melacak Perubahan Data”

rani ariesty March 20th, 2009 at 8:40 am

wah keren mas,,,,
aku tuwh juga lagi belajar2 database di kampus..
rencana seyh mau riset..tapi belum kepikiran riset database tentang apnya

ada referrensi gk mas???

trus ajarin materi standby database dunk mas..thengkyuh

setijo agus March 31st, 2009 at 8:21 am

thank’s atas infonya tentang fitur Oracle 10g Flashback, tang sangat jelas.

untuk @rani ariesty : bisa lihat materi standby database di
http://setijoagus.wordpress.com/2009/02/28/demo-oracle-data-guard-physical-standby-database-2/

danang June 2nd, 2009 at 5:37 pm

sippp…penjelasannya langsung 2 the point… :D
btw, cara instal ulang oracle 10g gmn ya ? aku sdh coba lewat registry,service…tp kok foldernya ga bisa dihapus ya?..

Bambang Sutejo June 3rd, 2009 at 8:30 am

Uninstall dulu pakai Oracle Universal Installer kemudian pilih Deinstall
Setelah proses uninstall selesai, kalo pakai Windows di restart dulu baru dihapus forlder oracle nya. kemudian install ulang

rainaraj June 17th, 2009 at 5:29 am

Bravo, seems brilliant idea to me is

Kouba August 12th, 2009 at 6:07 am

In truth, immediately i didn’t understand the essence. But after re-reading all at once became clear.

riswanto john August 21st, 2009 at 4:37 pm

maaf pak bambang mau tanya. setelah kita melakukan flashback berdasarkan salah satu SCN. Kenapa ya sewaktu di nyalakan lagi oracle dan sql plusnya. Untuk SCN yang lama kok g bisa tampil? trm ksh

riswanto john August 21st, 2009 at 4:37 pm

maaf pak bambang mau tanya. setelah kita melakukan flashback berdasarkan salah satu SCN. Kenapa ya sewaktu di nyalakan lagi oracle dan sql plusnya. Untuk SCN yang lama kok g bisa tampil lagi? trm ksh

Leave a Reply