Step One: Loading Data


Aku pernah diberi tugas yang berkaitan dengan memasukkan data dalam jumlah yang cukup besar ke database. Aku ingat waktu itu aku punya sebuah file teks berisi perintah INSERT INTO yang ukurannya mencapai 50 MB lebih atau sekitar beberapa ratus ribu lebih record. Dengan berbekalkan TOAD, aku-pun menunggu hasil eksekusi selama lima jam!

Seandainya saja aku memiliki hak akses administrator saat itu (lain kali jika diberi tugas itu lagi aku pasti akan memintanya), aku harusnya memakai SQL*Loader. Utility ini memang ditujukan untuk keperluan memasukkan data dalam jumlah besar ke dalam tabel. Dan enaknya, Oracle Enterprise Manager dapat memanggil SQL*Loader bagi kita. Cukup pilih “Maintenance” dari “Database”, kemudian klik pada “Load Data From File”.

Sebelum mulai me-load data, aku harus membuat control file dan data file terlebih dahulu. Berikut ini adalah contoh control file:

LOAD DATA INTO TABLE Scott.tblTest
REPLACE FIELDS TERMINATED BY ‘;’
(n1, n2, n3, n4, n5, n6, n7, n8, n9, n10)

SQL*Loader akan men-parsing file data berdasarkan instruksi yang aku tentukan di control file. Pada contoh di atas, aku memberi tahu bahwa setiap field di data file dipisahkan oleh tanda titik koma (;).

Saat pertama kali meng-klik “Load Data From File”, aku dibawa ke layar “Load Data: Control File”. Disini aku harus mengisi lokasi control file yang akan aku pakai, dan juga host credentials. Host credentials akan meminta data user di sistem operasi yang menjalankan Oracle yang memiliki akses atas file-file yang dibutuhkan dalam proses load data.

Mengisi host credentials terlihat gampang.. cukup memasukkan user name (account di OS) dan password-nya. Tapi pada prakteknya di sistem operasi Windows, Oracle Enterprise Manager selalu menolak user name dan password yang aku masukkan, padahal aku yakin data yang aku isi sudah benar. Setelah browsing di web guna mencari solusi, akhirnya aku menemukan jawabannya. Di Windows, aku harus memilih “Administrative Tools”, “Local Security Policy”, “Local Policies”, dan klik pada “User Rights Assignment”. Disini aku harus memasukkan user name/user group aku pada policy “Log on as a batch job”.. Baru setelah itu Oracle Enterprise Manager tidak komplain lagi.

O ya, aku melakukan sebuah eksprimen sederhana, yaitu memasukkan 10.000 record yang terdiri atas 10 field angka ke sebuah tabel. Saat memasukkan data ini secara manual dengan meng-eksekusi file berisi INSERT INTO di SQL*Plus, aku butuh sekitar 52 detik. Ini adalah perkiraan kasar, selain itu juga termasuk waktu yang terbuang untuk menampilkan tulisan informasi ke layar (tidak berhubungan dengan database). Lalu dengan data yang sama, aku me-load data dengan Enterprise Manager melalui metode “Conventional Path” (sama-sama SQL INSERT tetapi commit setiap 64 record), dengan hasil waktu eksekusi-nya adalah 00:00:00.94 (CPU Time 00:00:00.09)… Sementara jika aku memakai “Direct Path”, maka waktu eksekusi-nya adalah 00:00:00.83 (CPU Time 00:00:00.03)

Kesimpulannya: lain kali jika ada yang memintaku memasukkan data dalam jumlah besar, aku tidak akan ragu-ragu memakai SQL*Loader pada metode “Direct Path” atau “Parallel Direct Path”.

Perihal Solid Snake
I'm nothing...

3 Responses to Step One: Loading Data

  1. Herdis Suryatna mengatakan:

    setuju…saya juga pernah melakukan hal tersebut..ada ga cara untuk menjalankan script itu secara otomatis. misal setiap jam 7. data akan masuk ke tabel tertentu.

    • Solid Snake mengatakan:

      thanks sudah setuju🙂 sepertinya ada caranya.. kita perlu memanggil utility bernama sqlldr.exe dengan menyertakan control file & parameter file sebagai argumennya.. untuk memanggil sqlldr.exe pada waktu yang sudah dijadwalkan, bisa memakai cron (di Unix/Linux) atau Task Scheduler (di Windows). Selain itu, juga bisa memakai Oracle Scheduler yang ada di package DBMS_SCHEDULER (yang ini tidak tergantung OS).

  2. Herdis Suryatna mengatakan:

    misalnya begini
    ada file loader.ctl isinya :
    load data
    infile ‘c:\data\mydata.csv’
    into table emp
    fields terminated by “,” optionally enclosed by ‘”‘
    ( empno, empname, sal, deptno )

    File mydata.csv isinya:
    10001,”Scott Tiger”, 1000, 40
    10002,”Frank Naude”, 500, 20

    eksekusi : sqlldr username@server/password control=loader.ctl
    sumber : http://www.orafaq.com/wiki/SQL*Loader_FAQ

    Bagaimana jika dimasukan ke crontab?terima kasih

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: