最近學習oracle數據的操作,主要是導入導出的實現:好多朋友說用exp和imp做導入導出。可是exp和imp不太靈活。單表數據導出,生成文件格式不太好控制。好些ETL系統,數據的抽取,加載。針對oracle,都是通過sqlplus spool導出,sqlldr加載數據。
下面用shell寫了兩個腳本,對oracle數據的導出和加載進行操作:
導出:用sqlplus spool,但是set的命令很多,網上拷貝吧!,在測試的時候遇到個問題:我在命令行執行spool導出,會把spool的冗餘信息一起導到數據文件中,但是放在shell腳本里,就是純淨的數據文件。
#!/bin/bash
#sqlplus -S /nolog > result.log<<EOF
#conn mymis/mymis
sqlplus -S /nolog > result.log<<EOF
conn mymis/[email protected]:1521/ORCL
set head off
set headsep off
set newp none
set linesize 100
set pagesize 10000
set sqlblanklines OFF
set trimspool ON
set termout off
set feedback off
spool d:\export.dat
SELECT USER_ID || ',' || USER_NAME || ',' || USER_PASSWORD || ',' || USER_MAIL || ',' || PHONE_NO || ',' || REMARK FROM MYMIS.TB_MYMIS_USER_INFO;
spool off
exit
EOF
導入:採用sqlldr加載,需要配置一個控制文件!shell去讀取控制文件就行了。
下面控制文件:
LOAD DATA
INFILE 'd:\export.dat'
badfile 'l2.bad'
Append INTO TABLE MYMIS.TB_MYMIS_USER_INFO_BAK
FIELDS TERMINATED BY ','
TRAILING
(
USER_ID,
USER_NAME,
USER_PASSWORD,
USER_MAIL,
PHONE_NO,
REMARK
)
下面是shell腳本:
#!/bin/bash
im_data()
{
sqlldr mymis/[email protected]:1521/ORCL log=l2.log control=l2.ctl streamsize=25600000
echo "sqlldr1 end"
exit
EOF
}
im_data
這樣就完成了數據的導入導出了!
題外話:windows下面學習unix shell,cygwin是個好東西,可以推薦給大家!