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.

2 thoughts on “Melacak Perubahan Data

  1. Do you mind if I quote a couple of your posts as long as
    I provide credit and sources back to your webpage?
    My website is in the exact same area of interest as yours and my visitors would really benefit from some of the information you
    present here. Please let me know if this okay with
    you. Thanks a lot!

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