oracle的數據導入導出

最近學習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是個好東西,可以推薦給大家!


發佈了40 篇原創文章 · 獲贊 26 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章