sqlldr的學習與總結
###################################### sqlldr資料載入工具的學習總結
sqlldr是oracle7以來一直比較流行的資料載入工具,使用方便,靈活,在windows介面下是SQLLDR,linux/unix 平臺大小寫敏感,是sqlldr
有關sqlldr的五個檔案:
1.控制檔案:顧名思義該檔案負責控制載入資料的關鍵資訊,其中重要引數如下:
LOAD DATA 控制檔案一般都是以此開頭,用來表示載入資料,預設的不用加任何引數,引數主要有UNRECOVER和RECOVER用來控制所載入資料是否可以恢復,也可以為CONTINUE_LOAD表示繼續載入
INFILE 表示要載入的資料檔案的位置,若為*表示該資料檔案寫在該控制檔案內部
INTO TABLE 表示要載入資料的目標表,載入方式有以下幾種:
INSERT INTO 向表中插入資料,該方式表必須為空表
APPEND INTO 向表中追加資料
REPLACE INTO 替換表中的資料,等於將表的資料delete後再向表中新增資料
TRUNCATE INTO 以truncate的方式將表中的資料清空後載入資料
FIELDS TERMINATED BY "," 指定載入資料的分隔值,此處認為是,分割
(NAME,SEX,AGE)要加入的表中的列名
BEGINDATA 表示以下是要載入的資料,INFILE為*時引數才用得到
2.資料檔案
資料檔案為要載入的資料儲存檔案,格式不統一
3.日誌檔案
預設情況下載入資料完成後會在控制檔案同目錄下生成一個副檔名為.log的日誌檔案,用來記錄資料載入情況
4.錯誤檔案
在sqlldr載入資料時遇到載入錯誤的資料,會把載入錯誤的資料寫入同名下副檔名為.bad的錯誤檔案中。該引數可以自行修改
5.廢棄檔案
如果有需求,可以顯示的制定廢棄資料(不需要載入的資料)寫入到一個副檔名為.dsc的廢棄檔案中,該檔案需要特殊制定,預設情況下不會產生
一個簡單的sqlldr的控制檔案:
[oracle@orcl2 myscript]$ pwd
/u01/myscript
在/u01/myscript下做sqlldr的練習,寫入sqlldr1.ctl如下內容
LOAD DATA
INFILE * //為*說明我要載入的資料就在該控制檔案內
INTO TABLE BONUS //將資料載入到bouns表中
FIELDS TERMINATED BY "," //分割符用的是,
(ENAME,JOB,SAL) //制定要載入到表中的列名
BEGINDATA //以下部分為要載入的資料
TOM,EMP,100
LALY,EMP,110
TOKE,EMP,120
JONE,EMP,130
JECL,MGR,140
JECK,HR,150
KULI,MGR,160
以scott使用者建立bonus表結構
SQL> conn scott/oracle
Connected.
SQL> create table bonus(ENAME varchar(20),JOB varchar(15),SAL number);
Table created.
開始載入資料:
[oracle@orcl2 myscript]$ sqlldr scott/oracle control=sqlldr1.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on Tue Nov 19 10:21:58 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 8
資料載入完畢,檢視通目錄下的檔案:
[oracle@orcl2 myscript]$ ls
sqlldr1.ctl sqlldr1.log
發現多出了一個.log檔案,沒有.bad檔案和.dsc檔案說明此次載入資料無任何的錯誤
在scott使用者下檢視錶中的資料資訊
SQL> select * from bonus;
ENAME JOB SAL
-------------------- --------------- ----------
TOM EMP 100
LALY EMP 110
TOKE EMP 120
JONE EMP 130
JECL MGR 140
JECK HR 150
KULI MGR 160
7 rows selected.
發現7條資料已完全載入如表中
從excel表中向資料庫匯入資料:
拿到一個excel表格,首先複製一份表格出來,以下操作均在備份表格中,以防原資料損壞
得到複製excel表格後,將其列頭和無關資料刪除後,點選檔案->另存為->儲存型別選擇csv(次格式的表格可以用記事本開啟,資料間用的是逗號分隔符),以記事本開啟剛儲存的csv的表格即得到你要的資料,此處我所得到的測試資料如下:
USER1,EMP,100
USER2,EMP,101
USER3,EMP,102
USER4,EMP,103
USER5,EMP,104
USER6,EMP,105
USER7,MGR,106
USER8,MGR,107
USER9,HR,108
編輯名為sqlldr2.ctl的控制檔案:
LOAD DATA
INFILE sqlldr2.dat //指定載入的資料檔案路徑
APPEND INTO TABLE BONUS
FIELDS TERMINATED BY ","
(ENAME,JOB,SAL)
注:若要載入資料中含有自己指定的分隔符,可以在FIELDS TERMINATED BY ","後加上OPTIONALLY ENCLOSED BY '"'指定"為定界符
圖目錄下編輯名為sqlldr2.dat的資料檔案,加入剛才得到的逗號分隔符的資料
USER1,EMP,100
USER2,EMP,101
USER3,EMP,102
USER4,EMP,103
USER5,EMP,104
USER6,EMP,105
USER7,MGR,106
USER8,MGR,107
USER9,HR,108
開始載入資料:
[oracle@orcl2 sqlldr2]$ sqlldr scott/oracle control=sqlldr2.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on Tue Nov 19 10:45:40 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 9
檢視錶中資料是否新增成功
SQL> select * from bonus;
ENAME JOB SAL
-------------------- --------------- ----------
TOM EMP 100
LALY EMP 110
TOKE EMP 120
JONE EMP 130
JECL MGR 140
JECK HR 150
KULI MGR 160
USER1 EMP 100
USER2 EMP 101
USER3 EMP 102
USER4 EMP 103
ENAME JOB SAL
-------------------- --------------- ----------
USER5 EMP 104
USER6 EMP 105
USER7 MGR 106
USER8 MGR 107
USER9 HR 108
16 rows selected.
載入無分隔符的資料
匯出測試資料
SQL> set linesize 60
SQL> set feedback off
SQL> set heading off
SQL> spool /u01/myscript/sqlldr3/sqlldr3.dat
SQL> select * from bonus;
TOM EMP 100
LALY EMP 110
TOKE EMP 120
JONE EMP 130
JECL MGR 140
JECK HR 150
KULI MGR 160
USER1 EMP 100
USER2 EMP 101
USER3 EMP 102
USER4 EMP 103
USER5 EMP 104
USER6 EMP 105
USER7 MGR 106
USER8 MGR 107
USER9 HR 108
SQL> spool off
SQL> set heading on
SQL> set feedback on
檢視匯出結果
[oracle@orcl2 sqlldr3]$ cat sqlldr3.dat
SQL> select * from bonus;
TOM EMP 100
LALY EMP 110
TOKE EMP 120
JONE EMP 130
JECL MGR 140
JECK HR 150
KULI MGR 160
USER1 EMP 100
USER2 EMP 101
USER3 EMP 102
USER4 EMP 103
USER5 EMP 104
USER6 EMP 105
USER7 MGR 106
USER8 MGR 107
USER9 HR 108
將首行的SQL語句刪除
將原表中的資料刪除
SQL> truncate table bonus;
Table truncated.
SQL> select * from bonus;
no rows selected
編寫控制檔案sqlldr3.ctl內容如下:
LOAD DATA
INFILE sqlldr3.dat
TRUNCATE INTO TABLE BONUS
(
ENAME POSITION(1:15), //指定擷取從第一個字元開始到第十五個結束,其間的字元作為ENAME載入到資料庫,下同
JOB POSITION(22:40),
SAL POSITION(44:60)
)
匯入資料:
[oracle@orcl2 sqlldr3]$ sqlldr scott/oracle control=sqlldr3.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on Tue Nov 19 11:27:22 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 16
[oracle@orcl2 sqlldr3]$ ls
sqlldr3.ctl sqlldr3.dat sqlldr3.log
檢視資料匯入情況
SQL> select * from bonus;
ENAME JOB SAL
-------------------- --------------- ----------
TOM EMP 100
LALY EMP 110
TOKE EMP 120
JONE EMP 130
JECL MGR 140
JECK HR 150
KULI MGR 160
USER1 EMP 100
USER2 EMP 101
USER3 EMP 102
USER4 EMP 103
ENAME JOB SAL
-------------------- --------------- ----------
USER5 EMP 104
USER6 EMP 105
USER7 MGR 106
USER8 MGR 107
USER9 HR 108
16 rows selected.
16行資料完全匯入成功!
未完待續。。。
sqlldr是oracle7以來一直比較流行的資料載入工具,使用方便,靈活,在windows介面下是SQLLDR,linux/unix 平臺大小寫敏感,是sqlldr
有關sqlldr的五個檔案:
1.控制檔案:顧名思義該檔案負責控制載入資料的關鍵資訊,其中重要引數如下:
LOAD DATA 控制檔案一般都是以此開頭,用來表示載入資料,預設的不用加任何引數,引數主要有UNRECOVER和RECOVER用來控制所載入資料是否可以恢復,也可以為CONTINUE_LOAD表示繼續載入
INFILE 表示要載入的資料檔案的位置,若為*表示該資料檔案寫在該控制檔案內部
INTO TABLE 表示要載入資料的目標表,載入方式有以下幾種:
INSERT INTO 向表中插入資料,該方式表必須為空表
APPEND INTO 向表中追加資料
REPLACE INTO 替換表中的資料,等於將表的資料delete後再向表中新增資料
TRUNCATE INTO 以truncate的方式將表中的資料清空後載入資料
FIELDS TERMINATED BY "," 指定載入資料的分隔值,此處認為是,分割
(NAME,SEX,AGE)要加入的表中的列名
BEGINDATA 表示以下是要載入的資料,INFILE為*時引數才用得到
2.資料檔案
資料檔案為要載入的資料儲存檔案,格式不統一
3.日誌檔案
預設情況下載入資料完成後會在控制檔案同目錄下生成一個副檔名為.log的日誌檔案,用來記錄資料載入情況
4.錯誤檔案
在sqlldr載入資料時遇到載入錯誤的資料,會把載入錯誤的資料寫入同名下副檔名為.bad的錯誤檔案中。該引數可以自行修改
5.廢棄檔案
如果有需求,可以顯示的制定廢棄資料(不需要載入的資料)寫入到一個副檔名為.dsc的廢棄檔案中,該檔案需要特殊制定,預設情況下不會產生
一個簡單的sqlldr的控制檔案:
[oracle@orcl2 myscript]$ pwd
/u01/myscript
在/u01/myscript下做sqlldr的練習,寫入sqlldr1.ctl如下內容
LOAD DATA
INFILE * //為*說明我要載入的資料就在該控制檔案內
INTO TABLE BONUS //將資料載入到bouns表中
FIELDS TERMINATED BY "," //分割符用的是,
(ENAME,JOB,SAL) //制定要載入到表中的列名
BEGINDATA //以下部分為要載入的資料
TOM,EMP,100
LALY,EMP,110
TOKE,EMP,120
JONE,EMP,130
JECL,MGR,140
JECK,HR,150
KULI,MGR,160
以scott使用者建立bonus表結構
SQL> conn scott/oracle
Connected.
SQL> create table bonus(ENAME varchar(20),JOB varchar(15),SAL number);
Table created.
開始載入資料:
[oracle@orcl2 myscript]$ sqlldr scott/oracle control=sqlldr1.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on Tue Nov 19 10:21:58 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 8
資料載入完畢,檢視通目錄下的檔案:
[oracle@orcl2 myscript]$ ls
sqlldr1.ctl sqlldr1.log
發現多出了一個.log檔案,沒有.bad檔案和.dsc檔案說明此次載入資料無任何的錯誤
在scott使用者下檢視錶中的資料資訊
SQL> select * from bonus;
ENAME JOB SAL
-------------------- --------------- ----------
TOM EMP 100
LALY EMP 110
TOKE EMP 120
JONE EMP 130
JECL MGR 140
JECK HR 150
KULI MGR 160
7 rows selected.
發現7條資料已完全載入如表中
從excel表中向資料庫匯入資料:
拿到一個excel表格,首先複製一份表格出來,以下操作均在備份表格中,以防原資料損壞
得到複製excel表格後,將其列頭和無關資料刪除後,點選檔案->另存為->儲存型別選擇csv(次格式的表格可以用記事本開啟,資料間用的是逗號分隔符),以記事本開啟剛儲存的csv的表格即得到你要的資料,此處我所得到的測試資料如下:
USER1,EMP,100
USER2,EMP,101
USER3,EMP,102
USER4,EMP,103
USER5,EMP,104
USER6,EMP,105
USER7,MGR,106
USER8,MGR,107
USER9,HR,108
編輯名為sqlldr2.ctl的控制檔案:
LOAD DATA
INFILE sqlldr2.dat //指定載入的資料檔案路徑
APPEND INTO TABLE BONUS
FIELDS TERMINATED BY ","
(ENAME,JOB,SAL)
注:若要載入資料中含有自己指定的分隔符,可以在FIELDS TERMINATED BY ","後加上OPTIONALLY ENCLOSED BY '"'指定"為定界符
圖目錄下編輯名為sqlldr2.dat的資料檔案,加入剛才得到的逗號分隔符的資料
USER1,EMP,100
USER2,EMP,101
USER3,EMP,102
USER4,EMP,103
USER5,EMP,104
USER6,EMP,105
USER7,MGR,106
USER8,MGR,107
USER9,HR,108
開始載入資料:
[oracle@orcl2 sqlldr2]$ sqlldr scott/oracle control=sqlldr2.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on Tue Nov 19 10:45:40 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 9
檢視錶中資料是否新增成功
SQL> select * from bonus;
ENAME JOB SAL
-------------------- --------------- ----------
TOM EMP 100
LALY EMP 110
TOKE EMP 120
JONE EMP 130
JECL MGR 140
JECK HR 150
KULI MGR 160
USER1 EMP 100
USER2 EMP 101
USER3 EMP 102
USER4 EMP 103
ENAME JOB SAL
-------------------- --------------- ----------
USER5 EMP 104
USER6 EMP 105
USER7 MGR 106
USER8 MGR 107
USER9 HR 108
16 rows selected.
載入無分隔符的資料
匯出測試資料
SQL> set linesize 60
SQL> set feedback off
SQL> set heading off
SQL> spool /u01/myscript/sqlldr3/sqlldr3.dat
SQL> select * from bonus;
TOM EMP 100
LALY EMP 110
TOKE EMP 120
JONE EMP 130
JECL MGR 140
JECK HR 150
KULI MGR 160
USER1 EMP 100
USER2 EMP 101
USER3 EMP 102
USER4 EMP 103
USER5 EMP 104
USER6 EMP 105
USER7 MGR 106
USER8 MGR 107
USER9 HR 108
SQL> spool off
SQL> set heading on
SQL> set feedback on
檢視匯出結果
[oracle@orcl2 sqlldr3]$ cat sqlldr3.dat
SQL> select * from bonus;
TOM EMP 100
LALY EMP 110
TOKE EMP 120
JONE EMP 130
JECL MGR 140
JECK HR 150
KULI MGR 160
USER1 EMP 100
USER2 EMP 101
USER3 EMP 102
USER4 EMP 103
USER5 EMP 104
USER6 EMP 105
USER7 MGR 106
USER8 MGR 107
USER9 HR 108
將首行的SQL語句刪除
將原表中的資料刪除
SQL> truncate table bonus;
Table truncated.
SQL> select * from bonus;
no rows selected
編寫控制檔案sqlldr3.ctl內容如下:
LOAD DATA
INFILE sqlldr3.dat
TRUNCATE INTO TABLE BONUS
(
ENAME POSITION(1:15), //指定擷取從第一個字元開始到第十五個結束,其間的字元作為ENAME載入到資料庫,下同
JOB POSITION(22:40),
SAL POSITION(44:60)
)
匯入資料:
[oracle@orcl2 sqlldr3]$ sqlldr scott/oracle control=sqlldr3.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on Tue Nov 19 11:27:22 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 16
[oracle@orcl2 sqlldr3]$ ls
sqlldr3.ctl sqlldr3.dat sqlldr3.log
檢視資料匯入情況
SQL> select * from bonus;
ENAME JOB SAL
-------------------- --------------- ----------
TOM EMP 100
LALY EMP 110
TOKE EMP 120
JONE EMP 130
JECL MGR 140
JECK HR 150
KULI MGR 160
USER1 EMP 100
USER2 EMP 101
USER3 EMP 102
USER4 EMP 103
ENAME JOB SAL
-------------------- --------------- ----------
USER5 EMP 104
USER6 EMP 105
USER7 MGR 106
USER8 MGR 107
USER9 HR 108
16 rows selected.
16行資料完全匯入成功!
未完待續。。。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29320885/viewspace-776950/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sqlldr的用法總結SQL
- oracle sqlldr 總結OracleSQL
- 深入學習之連結與總結
- RunLoop的一些學習與總結OOP
- JAVA基礎學習-數字與字串學習總結Java字串
- MongoDB的學習總結MongoDB
- docker的學習總結Docker
- pandas的學習總結
- 學習總結
- 學習前端近一年的反思與總結前端
- Solr學習總結(二)Solr的安裝與配置Solr
- maven 學習總結(五)——聚合與繼承Maven繼承
- mysqlimport學習總結MySqlImport
- Maven學習總結Maven
- MyBatis 學習總結MyBatis
- awk 學習總結
- JNI 學習總結
- tkinter學習總結
- SVG學習總結SVG
- vue學習總結Vue
- WorkFlow學習總結
- HTML學習總結HTML
- Mybatis學習總結MyBatis
- Kafka 總結學習Kafka
- Typescript學習總結TypeScript
- 【TS】學習總結
- lua 學習總結
- vue 學習總結Vue
- HSF學習總結
- ElasticSearch 學習總結Elasticsearch
- BOM學習總結
- JavaWeb學習總結JavaWeb
- Storm學習總結ORM
- redis學習總結Redis
- JVM學習總結JVM
- Oracle學習總結Oracle
- Ajax學習總結
- WebRTC學習總結Web