Pada tahun 2008, salah seorang calon Administrator Database menghubungi via telepon dengan suara agak bingun. Sebab persoalan yang disampaikan "mencemaskannya". Ceritanya, salah seorang operator mencetak beberapa Kartu Keluarga. Operator tersebut merasa heran dan bertanya-tanya dalam hati, "Kenapa nama kepala keluarga antar Kartu Keluarga sama? Padahal kemarin sesuai dengan data yang dientri".
Kemudian sesama operator saling bertatapan atas kejadian yang terjadi. Karena merasa penasaran, beberapa operator berbeda kecamatan membuka Daftar Cetak Kartu Keluarga, dan ternyata antar kecamatan nama kepala keluarga telah berubah menjadi sama semuanya. Temuan operator tesebut disampaikan kepada Administrator Database. Sang admin mencoba mengingat-ingat faktor penyebabnya. Beberapa saat kemudian, baru dia ingat faktor penyebabnya. Bahwa dia telah mengubah (update) nama kepala keluarga (table data_keluarga), namun belum selesai mengetik batasan kriteria (where) dia langsung keluar (Exit) dari database siakoff, karena diburu oleh listrik yang mati.
Saat Administrator menghubungi dan bercerita, beberapa instruktur sedang kumpul. Salah satu instruktur geleng-geleng kepala mendengar cerita ubah nama kepala keluarga belum sempat mengetik batasan kriteria. Para instruktur pun terdiam sejenak, mungkin karena mikir solusi terbaik dan tercepat.
Salah satu instruktur bertanya, "Kapan terakhir database di-backup ?" Setelah ditelpon sang Administrator, diperoleh jawaban. Bahwa database di-backup seminggu yang lalu. Mendengar jawaban seminggu yang lalu, sang Instuktur geleng-geleng kepala, sambil berujar, "Seharusnya database di-backup setiap hari". Tak lama kemudian sang Instruktur meyampaikan solusi, "Kalau database backup digunakan, maka entri data seminggu yang lalu dianggap hilang dan entri ulang". Instruktur kedua menanggapi, "Solusi menggunakan database backup seminggu yang lalu, itu maaah pekerjaan ribet dan lama, bisa-bisa operator ngomel-ngomel". Karena instruktur pertama dipanggil panitia pelatihan aplikasi untuk mengajar modul Pindah-Datang, sang Instruktur itu pun pamitan.
Instruktur kedua memberi solusi. Bagaimana kalau data pada table data_keluarga dan biodata_wni dengan kriteria stat_hbkel=1 ditampilkan melalui TOAD kemudian disimpan dalam format Text. Terus file Text dibuka dengan Excel, kemudian dibuat fungsi untuk script update. Selanjutnya diambil (copy) seluruh script update dan disalin (paste) ke jendela Notepad, lalu filenya disimpan berekstensi sql (misalnya ubahkepkel.sql). File ubahkepkel.sql dijalankan melalui SQL*Plus dengan script @ubahkepkel.sql
Mendengar usul dari Instruktur kedua, sang guru memberi tanggapan, "Panjang kali prosedur kerjanya, kalau bisa singkat kenapa harus panjang-panjang". Beberapa saat kemudian, sang guru pun mendekati kumputer kesayangannya dan mulai mikirin script untuk penyelesaian masalah. Beberapa saat sang guru melakukan simulasi sesuai contoh kasus. Kemudian sang guru berkata, "Solusi tersingkat dan tercepat dengan Prosedur Language melalui SQL alias PL/SQL". Sambil menyisap rokok kesayangannya, sang guru mulai kotak-katik script dan mensimulasikannya. Belum habis sebatang rokok diisapnya, script PL/SQL selesai. Script dimaksud sebagai berikut.
declare
cursor biorec is
select to_char(no_kk) as no_kk,nama_lgkp from biodata_wni
where stat_hbkel=1;
rec biodata_wni%rowtype;
begin
for rec in biorec
loop
update data_keluarga set nama_kep=rec.nama_lgkp
where no_kk=rec.no_kk;
commit;
end loop;
end;
/
Cara menjalankan prosedur di atas. Disarankan copy script di atas dan paste ke jendela Notepad . Selanjutnya buka akses database (siakoff) melalui SQL*Plus. Copy script dari file Notepad dan paste pada jendela SQL. Tunggu sampai tampil PL/SQL procedure successfully completed, sebagi tanda eksekusi prosedur selesai.
Hikmah yang didapat dari tulisan ini, mem-backup database seyogianya menjadi pekerjaan rutin harian. Selesai proses StopServer langsung dilakukan backup database. Kalau mau melakukan ubah data dengan script update, jangan sampai lupa kriteria batasan yang unik, seperti nomor KK atau NIK. Semoga.
3 komentar:
Kasus ini pernah terjadi di dumai... bisa dikembalikan semula melalui sql pak..
To Hasan Basri,
Script yg pak Saleh tunjukkan, menurut saya, digunakan untuk mengubah(update) seluruh nama_kep pada tabel data_keluarga (seluruhnya, tidak peduli dia terubah atau tidak, jika ada). Script diatas memperlakukan demikian karena tidak ada 'history' yang dapat dijadikan referensi bahwa nama_kep mana saja yang berubah. Jadi wajar saja kalau semuanya saja nama_kep di update. Satu-satunya referensi, melihat script diatas, adalah stat_hbkel=1 pada tabel biodata_wni dan mengambil nama_lgkp untuk digunakan value/nilainya sebagai update nama_kep.
Ada beberapa hal yang perlu digarisbawahi disini:
1. Update tanpa where akan mengubah seluruh field yang di set value barunya seluruhnya (all value for field(s) in the table).
2. Tidak ada mekanisme 'History' atau 'Log' bahwa apa saja yang sudah dilakukan, contohnya apa saja yang sudah di update. (Kecuali memanfaatkan fasilitas Archive Log).
3. Untungnya, para 'pengoprek SIAK' tau hubungan antara nama_kep dengan nama_lgkp. Seperti telah dijelaskan sedikit diatas.
4. Kasus seperti ini... rasanya (mungkin saya memang lemot, mohon maaf), tidak dapat terselesaikan dengan tuntas dan efektif jika hanya menggunakan perintah SQL. Karena script diatas kelihatannya bersifat Solution for All same kind problem. Untuk semua masalah yang sama, 1, 2 sebagian kecil, sebagian besar, atau seluruhnya nama_kep terubah dan untuk dikembalikan cukup hanya dengan satu script tsb.
5. Sepengetahuan saya, biasanya kalau ada masalah SIAK dan keluar script sebagai solusinya, ada targetnya. Yaitu, seperti telah dijelaskan pada poin 4 diatas.
Semoga ga salah komentar saya. Sekedar ikut peduli aja.
Cerita Pak Saleh sangat bagus, sayangnya, sebagai instruktur untuk Indonesia Raya, studi kasusnya masih minim. Yah, mungkin bapak terlalu sibuk.... Smoga kesehatan dan kekuatan dilimpahkan untuk para 'pengoprek SIAK' agar Adminduk semakin maju.
Bravo SIAK !
Posting Komentar
Mau komentar? Silahkan tuliskan Nama dan asal Kab/KotaMaaf, komentar bernada spam akan dihapus!