Posts tagged ‘Oracle Flashback Table’

Flashback: Tabel Di Masa Lalu

Aku menemukan cara menarik untuk ber-eksperimen dengan tabel di Oracle, yaitu mengembalikan isi tabel ke keadaan semula walaupun perubahan sudah di-commit. Seandainya saja aku sudah melakukan perubahan di tabel EMP pada jam 12, dan karena diburu-buru lapar, aku melakukan kesalahan fatal (secara logic). Setelah makan siang, aku dapat memeriksa seperti apa isi tabel tersebut pada jam 9 pagi, dengan query berikut:

SELECT * FROM EMP AS OF TIMESTAMP TO_TIMESTAMP(’29-09-2008 09:00:00′, ‘DD-MM-YYYY HH:MI:SS’);

Aku pernah mencoba mengembalikan isi tabel dengan Enterprise Manager Console. Berhubung kerjaanku bukanlah database administrator, hampir tidak mungkin bagiku untuk membuka EM Console. Tapi seandainya saja, user database yang diberikan padaku punya hak akses yang cukup, aku bisa memberikan query berikut ini untuk mengembalikan tabel ke jam 9 pagi:

ALTER TABLE EMP ENABLE ROW MOVEMENT;
FLASHBACK TABLE EMP TO TIMESTAMP TO_TIMESTAMP(’29-09-2008 09:00:00′, ‘DD-MM-YYYY HH:MI:SS’);

Tapi hati-hati: table yang sudah di-TRUNCATE tidak dapat dikembalikan, karena Oracle akan complain dengan pesan ‘unable to read data – table definition has changed’. Jika table langsung di-drop, maka masih dapat dikembalikan, dengan perintah seperti pada contoh berikut:

FLASHBACK TABLE EMP TO BEFORE DROP;

O ya, untuk membersihkan isi recyclebin guna memberikan lebih banyak freespace, gunakan perintah berikut ini:

PURGE RECYCLEBIN;

setelah itu, jika query ke recyclebin, hasilnya akan kosong:

SELECT * FROM RECYCLEBIN;

Untuk mengetahui siapa saja yang melakukan perubahan pada sebuah tabel, gunakan contoh query berikut ini:

SELECT commit_timestamp, logon_user FROM FLASHBACK_TRANSACTION_QUERY WHERE xid IN (
SELECT versions_xid FROM EMP VERSIONS BETWEEN TIMESTAMP TO_TIMESTAMP
( ’29-09-2008 09:00:00′, ‘DD-MM-YYYY HH:MI:SS’) AND TO_TIMESTAMP
( ’29-09-2008 12:00:00′, ‘DD-MM-YYYY HH:MI:SS’)
);

30 September 2008 at 12:00 AM Tinggalkan Komentar

Recycle Bin di Oracle: Mengembalikan Tabel Hilang

Kita semua tahu Windows punya recycle bin yang menampung file-file yang dihapus. Tapi tidak semua orang tahu, termasuk saya yang baru tahu, Oracle punya recyle bin yang menampung object-object database yang di-drop. Selama kita belum meng-”empty” recycle bin Oracle, maka tabel yang dihapus masih dapat dikembalikan lagi.

Sebagai latihan, aku membuat sebuah tabel dengan nama “tblTest”, lalu menghapusnya. Btw, sebelum aku membuat tblTest, aku juga sempat membuat dan menghapus tabel lain dengan struktur field yang berbeda tetapi mempunyai nama yang sama.

Seperti biasa, aku login ke Oracle Enterprise Manager, lalu aku masuk ke bagian “Maintenance”. Dari situ aku memilih “Perform Recovery”, kemudian pada bagian “Object Type”, aku memilih “Tables”. Pada operation type, aku memilih “Flashback Dropped Tables”.

Lalu, pada layar berikutnya, aku men-search object di recyle bin yang ingin aku restore, dalam hal ini adalah table “tblTest”. Amazing… Enterprise Manager menampilkan dua buah tabel yang telah aku hapus, yang sama-sama memiliki nama “tblTest”. Aku tingal memilih tabel yang di-restore, lalu memberi nama baru (jika perlu), dan tabel-pun kembali pada kondisi semula. Semua dilakukan dalam keadaan database online!!

Oops.. aku menemukan satu hal yang seru lagi.. Bagaimana kalau tabel masih ada, tapi datanya tidak sengaja terhapus atau terubah oleh user/developer yang bandel?? Oracle ternyata mampu meng-”undo” data dalam tabel juga. Tapi ada persyaratan tertentu. Sebelumnya aku harus memilih properties table, lalu pilih tab “Options”, kemudian mengisi nilai “Enable Row Movement” menjadi “Yes”.

Lalu, sekarang aku akan meng-update isi tabel, anggap saja aku lupa memberi kriteria pada WHERE sehingga seluruh record mengalami perubahan. Dan karena sudah aku commit perubahannya, bagaimana membalikkan keadaan tabel supaya seperti semula lagi?

Mulai lagi dari “Perform Recovery”, dan object type “Tables”. Tapi kali ini operation type-nya berupa “Flashback Existing Tables”. Pada Point-in-time, aku memilih “Evaluate row changes and transactions to decide on a point in time” supaya Enterprise Manager menampilkan semua perubahan pada tabel yang aku tentukan. Setelah itu tinggal ikuti l langkah-langkah berikutnya, sampai pada akhirnya muncul konfirmasi “The selected tables, xxx, have been flashed back.”. Aku pun memeriksa kembali lagi isi tabel, dan wow… isinya kembali seperti semula, seperti sebelum di-update..

Side Note: Selama aku melakukan latihan-latihan dalam artikel ini, aku cukup sering menemukan error JavaScript saat berpindah ke step berikutnya pada wizard-wizard tertentu. Hal ini hanya terjadi jika aku menggunakan browser Microsoft Internet Explorer 7. Saat mencoba hal yang sama dengan browser FireFox 2, aku tidak menemukan masalah JavaScript tersebut.

13 September 2008 at 4:13 AM Tinggalkan Komentar


Arsip


Ikuti

Get every new post delivered to your Inbox.