1. 程式人生 > >Oracle 利用跨平臺sqluldr2匯出資料和sqlldr匯入資料

Oracle 利用跨平臺sqluldr2匯出資料和sqlldr匯入資料

Oracle 利用跨平臺sqluldr2匯出資料和sqlldr匯入資料

 

Oracle資料匯出工具sqluldr2可以將資料以csv、txt等檔案格式匯出,適用於大批量資料的匯出,匯出速度非常快,匯出後可以使用Oracle SQL Loader(sqlldr)工具將資料匯入到資料庫中。下面將介紹Sqluldr2和sqlldr在Windows平臺下的資料處理過程。

簡介:

Sqluldr2:專業用於大資料量匯出工具之一,效率比普通匯出快70%。 ( Sqlldr:專業用於匯入的工具之一,請注意兩個工具的區別。),在使用時,最好用磁碟寫入速度快,網路好,網速快的做。

工具列表:

針對不同平臺用不同的匯出工具:

Windows:     sqluldr2.exe

Linux(32位): sqluldr2_linux32_10204.bin

Linux(64位):   sqluldr2_linux64_10204.bin

 

檔案內容如下圖所示:

利用sqluldr2匯出資料和sqlldr匯入資料的方法
 

 

二、sqluldr2 使用方法

1、首先將sqluldr2.exe複製到執行目錄下,即可開始使用

 

2、檢視help 幫助

利用sqluldr2匯出資料和sqlldr匯入資料的方法
 

3、執行資料匯出命令

3.1、常規匯出

sqluldr2 test/[email protected]/orcl query="select * from temp_001" head=yes file=d:\tmp001.csv

說明:head=yes   表示輸出表頭

利用sqluldr2匯出資料和sqlldr匯入資料的方法

 

3.2、使用sql引數

sqluldr2 test/[email protected]/orcl sql=test_sql.sql head=yes file=d:\tmp001.csv

test_sql的內容為:

select * from temp_001

利用sqluldr2匯出資料和sqlldr匯入資料的方法
 

3.3、使用log引數

當整合sqluldr2在指令碼中時,就希望遮蔽上不輸出這些資訊,但又希望這些資訊能保留,這時可以用“LOG”選項來指定日誌檔名。

sqluldr2 test/[email protected]/orcl sql=test_sql.sql head=yes file=d:\tmp001.csv log=+d:\tmp001.log

利用sqluldr2匯出資料和sqlldr匯入資料的方法

 

3.4、使用 table 引數

當使用 table 引數時,在目錄下會生成對應的ctl控制檔案,如下語句會生成temp_001_sqlldr.ctl檔案。

sqluldr2 test/[email protected]/orcl query="select * from temp_001" table=temp_001 head=yes file=d:\tmp001.csv

利用sqluldr2匯出資料和sqlldr匯入資料的方法
 

生成的控制檔案temp_001_sqlldr.ctl的內容如下:

利用sqluldr2匯出資料和sqlldr匯入資料的方法
 

4、主要引數說明

Field  分隔符  指定欄位分隔符,預設為逗號  

record 分隔符  指定記錄分隔符,預設為回車換行,Windows下的換行 

quote  引號符  指定非數字欄位前後的引號符

 

例如現在要改變預設的欄位分隔符,用“#”來分隔記錄,匯出的命令如下所示:

sqluldr2  test/test sql=tmp.sql field=# 

 

在指定分隔符時,可以用字元的ASCII程式碼(0xXX,大寫的XX為16進位制的ASCII碼值)來指定一個字元,常用的字元的ASCII程式碼如下:

回車=0x0d,換行=0x0a,TAB鍵=0x09,|=0x7c,&=0x26,雙引號=0x22,單引號=0x27

 

在選擇分隔符時,一定不能選擇會在欄位值中出現的字元組合,如常見的單詞等,很多次匯入時報錯,回過頭來找原因時,都發現是因為分隔符出現在欄位值中了。

 

 

三、sqlldr 使用方法

sqlldr工具可以將文字資料匯入到資料庫表中,

 

1、檢視sqlldr 的幫助文件

利用sqluldr2匯出資料和sqlldr匯入資料的方法
 

2、建立測試檔案

在D盤根目錄下建立測試檔案tmp_insert.txt ,其內容如下:

PROD_ID,ACC_NUM

18283918,18762535162

12361527,18482762831

 

3、建立控制檔案tmp_insert01.ctl

內容如下:

options(direct=true,errors=10000000,skip=1) 

load data 

characterset zhs16gbk

into table temp_001 truncate

fields terminated by ',' optionally enclosed by '"'

trailing nullcols

  prod_id   "trim(:prod_id)",

  acc_num "trim(:acc_num)"

)

 

引數說明:

characterset :字符集, 一般使用字符集 AL32UTF8,如果出現中文字符集亂碼時,改成 ZHS16GBK。

fields terminated by 'string':文字列分隔符。當為tab鍵時,改成'\t',或者 X'09';空格分隔符 whitespace,換行分隔符 '\n' 或者 X'0A';回車分隔符 '\r' 或者 X'0D';預設為'\t'。

optionally enclosed by 'char':欄位包括符。當為 ' ' 時,不把欄位包括在任何引號符號中;當為 "'" 時,欄位包括在單引號中;當為'"'時,欄位在包括雙引號中;預設不使用引用符。

fields escaped by 'char':轉義字元,預設為'\'。

trailing nullcols:表字段沒有對應的值時,允許為空。

 

insert:為預設方式,在資料裝載開始時要求表為空;

append:在表中追加新記錄  ;

replace:刪除舊記錄,替換成新裝載的記錄 ;

truncate:先清空表,再新增記錄;

skip=1 :表示插入資料時,跳過第一行(標題),從第二行開始匯入;

 

4、執行資料匯入處理

sqlldr test/[email protected]/orcl data=d:\tmp_insert.txt control=d:\tmp_insert01.ctl log=d:\tmp_insert01.log bad=d:\tmp_insert01.bad

利用sqluldr2匯出資料和sqlldr匯入資料的方法
 

 

注意:在資料匯入資料庫表後,查詢表資料時,會發現最後一個欄位的資料中含有類似空格的字元,其實不是空格,是回車換行符,通過replace函式將其替換掉即可,如下紅色部分處理

options(direct=true,errors=10000000,skip=1) 

load data 

characterset zhs16gbk

into table temp_001 truncate

fields terminated by ',' optionally enclosed by '"'

trailing nullcols

  prod_id  char(32)  "trim(:prod_id)",

  acc_num  char(20)  "replace(:acc_num,chr(13),'')"

)

 

5、支援定義的資料型別

可以定義14種資料型別:

CHAR

DATE

DECIMAL EXTERNAL

DECIMAL

DOUBLE

FLOAT

FLOAT EXTERNAL

GRAPHIC EXTERNAL

INTEGER

INTEGER EXTERNAL

SMALLINT

VARCHAR

VARGRAPHIC

a.字元型別資料

CHAR[ (length)] [delimiter]

length預設為 1.

b.日期型別資料

DATE [ ( length)]['date_format' [delimiter]

使用to_date函式來限制。

c.字元格式中的十進位制

DECIMAL EXTERNAL [(length)] [delimiter]

用於常規格式的十進位制數(不是二進位制=> 一個位等於一個bit)。

d.壓縮十進位制格式資料

DECIMAL (digtial [,precision])

e.雙精度符點二進位制

DOUBLE

f.普通符點二進位制

FLOAT

g.字元格式符點數

FLOAT EXTERNAL [ (length) ] [delimiter]

h.雙位元組字串資料

GRAPHIC [ (legth)]

i.雙位元組字串資料

GRAPHIC EXTERNAL[ (legth)]

j.常規全字二進位制整數

INTEGER

k.字元格式整數

INTEGER EXTERNAL

l.常規全字二進位制資料

SMALLINT

m.可變長度字串

VARCHAR

n.可變雙位元組字串資料

VARGRAPHIC

 

6、常見錯誤示例
SQL*Loader-601: For INSERT option, table must be empty.
這時需要,更改為追加(append)方式載入資料。

建立控制檔案tmp_insert01.ctl,內容如下:
OPTIONS(DIRECT=TRUE,ERRORS=10000000,skip=1)
LOAD DATA
--INFILE 'd:\tmp_insert.txt'
CHARACTERSET AL32UTF8
APPEND INTO TABLE TEMP_001
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
  PROD_ID       "TRIM(:PROD_ID)",
  ACC_NUM     "TRIM(:ACC_NUM)"
)

相關文章:

oracle資料遷移快速匯入匯出:利用sqluldr2匯出資料和sqlldr匯入資料的方法