How to efficiently extract and load Tables in Oracle with sqlplus, sqlldr

SUN Oracle

Today I’m posting another technical hint for those who might want to extract huge dataset and have to cope with limited disk space issues. SQL Loader is a powerful Oracle tool for bulk loading, and so far the fastest on Oracle.

A major issue is surely the disk space that needs to be occupied while temporarly storing the loading data on local disks. This example will help you overcoming this issue by dumping the data direct on zip files and allowing SQL Loader to read directly from zipped files.

1. Prepare SQL select statement: this is the content inside the select.sql script

set pagesize 0

set head off

set feed off

set line 200

select

col1 || '|' ||

col2 || '|' ||

coln

from

SCHEMA.TABLENAME

;

exit;

2. Extract the dataset (for UNIX systems)

user@machine> mkfifo to-zip

user@machine> gzip -9 -c < to-zip > dataset.dat.gz

user@machine> sqlplus -s username/password@service @select.sql > to-zip

3. Create the SQLLDR control file (control.ctl file)

LOAD DATA

APPEND

INTO TABLE SCHEMA.TABLENAME

FIELDS TERMINATED BY '|'

TRAILING NULLCOLS

(

COL1

,COL2

,COLN

)

4. Load the dataset

user@machine> mkfifo unzip

user@machine> zcat dataset.dat.gz > unzip

user@machine> sqlldr userid=$username/$password@$service control=control.ctl log=results.log bad=results.bad discard=results.dsc data=unzip direct=y errors=0

And that’s it! please remember that a good behavior will be always to truncate the table first (if you need to replace the data) and force the rebuild of the table related indexes at the end of the process.

Leave a comment