Skip to content

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 berikut ini juga :

4 Comments

  1. 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.

    Posted on 18-Sep-08 at 6:22 am | Permalink
  2. rohmadne

    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

    Posted on 23-Sep-08 at 1:41 am | Permalink
  3. 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.

    Posted on 06-Oct-08 at 4:05 am | Permalink
  4. rohmadne

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

    Posted on 08-Oct-08 at 1:04 am | Permalink

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*