Melacak Perubahan Data

By: Cha-Cha D AceWell

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

0 Responses to "Melacak Perubahan Data"

Leave a Reply

Jangan Lupha Tgalkan Peson Yow...