Menggunakan SQL*Loader

SQL Loader adalah tool Oracle untuk me-load data dari flat (text) file ke dalam tabel di database Oracle. Program (executable) SQL Loader adalah sqlldr, lokasi ada di $ORACLE_HOME/bin.

SQL Loader sering digunakan untuk mengatasi kendala jaringan. Misalkan perusahaan punya kantor cabang yang tidak tersambung online dengan pusat; data transaksi biasanya dikirim ke pusat dalam bentuk text file; di pusat, data tersebut kemudian di-load ke database pakai SQL Loader.

SQL Loader juga sering digunakan untuk me-load data dari system yang berbeda. Misalkan transaksi di-handle oleh database non Oracle, sementara datawarehouse menggunakan Oracle. Nah, data transaksi dari non Oracle ini kemudian di-export ke dalam text file, dan kemudian di-import ke Oracle pakai SQL*Loader.

Misalkan saya punya file penjualan.dat yang berisi:

3286;23-DEC-08;SEMARANG
3287;24-DEC-08;SURABAYA
3288;25-DEC-08;MAKASAR
3289;26-DEC-08;MEDAN
3290;26-DEC-08;MAGELANG TENGAH

File penjualan.dat tersebut akan saya load ke tabel penjualan:

CREATE TABLE penjualan
    ( no_invoice 	NUMBER,
      tgl_jual    	DATE,
      area 		varchar2(10));

Langkap pertama, buat control file yang berisi parameter-parameter untuk SQL Loader. Misalkan saya beri nama penjualan.ctl.

load data
APPEND
into table PENJUALAN
fields terminated by ";"
TRAILING NULLCOLS
(no_invoice,tgl_jual,area)

Langkah selanjutnya, load data di penjualan.dat ke tabel PENJUALAN. Gunakan perintah berikut:

sqlldr USERID=test/test CONTROL=penjualan.ctl, DATA=penjualan.dat, LOG=penjualan.log, BAD=penjualan.bad

Parameter untuk sqlldr adalah:

  1. USERID: user dan password ke database Oracle
  2. CONTROL: control file yang akan digunakan
  3. DATA: file (data) yang akan di-load
  4. LOG: file untuk menyimpan log dari proses loader
  5. BAD: file untuk menyimpan data yang tidak diprose

Setelah menjalankan sqlldr di atas, lihat lognya di file penjualan.log. Oo… ternyata ada error:

Record 5: Rejected - Error on table PENJUALAN, column AREA.
ORA-12899: value too large for column "TEST"."PENJUALAN"."AREA" (actual: 15, maximum: 10)

Record (baris) kelima tidak diproses karena lebar kolom AREA hanya 10 karakter, sementara nilai yang dimasukkan panjangnya 15 karakter (MAGELANG TENGAH). Record yang tidak diposes ini ditaruh di file penjualan.bad. Sekarang coba query ke tabel PENJUALAN, data yang masuk hanya 4 record.

SQL> select * from penjualan;

NO_INVOICE TGL_JUAL  AREA
---------- --------- ----------
      3286 23-DEC-08 SEMARANG
      3287 24-DEC-08 SURABAYA
      3288 25-DEC-08 MAKASAR
      3289 26-DEC-08 MEDAN

Referensi
Oracle® Database Utilities 10g Release 2 (10.2) – SQL*Loader

Silahkan baca yang ini juga:

This entry was posted in Utilities and tagged , , , , , , . Bookmark the permalink.

10 Responses to Menggunakan SQL*Loader

  1. Karsanto says:

    Pak, numpang tanya.

    Saya pake oracle 10g r2 on linux. Bisa nda sqlldr ini di run di computer-client?

    selama ini saya mencoba memakai oracle client, maksimal yang saya bisa lakukan adalah execute *.sql dari computer-client.

    Thx before.

  2. rohmadne says:

    Bisa, Pak. Taruh semua file (data, control, log, bad, discard) di mesin client. Untuk koneksi, tambahkan @tnsnames seperti biasa.

    Contoh berikut adalah loader data ke database TSREP:
    sqlldr USERID=test/test@tsrep CONTROL=penjualan.ctl, DATA=penjualan.dat, LOG=penjualan.log, BAD=penjualan.bad

  3. Karsanto says:

    Pak, saya sudah coba jalankan perintah sqlldr di PC client yang sudah terinstall oracle_Client_10.2.

    Ada pesan error sbg berikut :
    “The Procedure entry point WSACleanup could not be located in dynamic link library orauts.dll”

    Kira2 kurang apa yah? Mudah2an bisa dibantu.
    Thx before.

  4. rohmadne says:

    Ada pesan error yang lain?
    Mungkin ada instalasi Orace yang lain di PC anda?

  5. Endang says:

    Pak, kalau misalkan data yang diload akan ditambah parameter penambahan field baru untuk logdate pada waktu data masuk ke database bisa sharing ctl nya seperti apa
    thx

  6. v14nt0 says:

    Pak mau tanya untuk meng-extract data dari semua table di schema ke flat file seperti diatas menggunakan apa ? kalau bisa seh dalam bentuk sql script sehingga bisa di schedule, tidak menggunakan feature2 3rd party seperti yang tersedia di toad. TIA

  7. ayay says:

    dah saya coba jalankan tapi ga berhasil errornya
    ” SQL*Loader-350: Sysntax error at line 1.
    Expecting keyword LOAD,found “L”

    bisa dijelaskan errornya kenapa? dan solusinya bagaimana?

  8. arie says:

    pak rohmad,
    maaf nanya lagi… hehe
    saya mau tanya nih pak, tau gak caranya untuk migrasi data dari oracle ke mysql. jadi struktur data yg ad di oracle ingin dipindahkan ato dicopy ke mysql. soalnya ada aplikasi yang menggunakan dua database mysql dan oracle. nah datanya itu saling terkait. nah untuk memudahkan programmer, si programmer minta ada salah satu/beberapa data/table yang mungkin akan dipindahkan ke oracle, berikut data2nya.. apakah bapak tau caranya..
    makasih pak sebelumny

  9. uus rusmawan says:

    bagaimana cara mengkonversi file txt jadi file database dan sebaliknya file database jadi file txt dengan menggunakan coding VB 6.0

    terima kasih

  10. hosanna says:

    untuk penggunaan sql *loader apakah data yg akan diload butuh ekstensi khusus?misal seperti .dat?

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>