前言
今天主要學習下sqlload的簡單實用方法,學習環(huán)境為Linux Oracle 11g。
這塊學習內容屬于數(shù)據(jù)庫遷移的知識,sqlload工具適用于將文本文件導入到數(shù)據(jù)庫,分為兩種方式:常規(guī)導入和直接路徑導入。常規(guī)導入等同于SQL語句的執(zhí)行導入,如果數(shù)據(jù)量較大的話,會慢一點;而直接路徑導入則等同于直接拷貝數(shù)據(jù)文件,速度會更快一點。
下面通過一個小實驗,感受下這款數(shù)據(jù)導入工具的使用
實驗步驟
實驗一(數(shù)據(jù)和控制文件代碼在一個文件)
- scott用戶下,新建表dept1,將dept的數(shù)據(jù)導入
SQL> conn scott/scott
Connected.
SQL> create table dept1 as select * from dept where 1=2;
Table created.
2.使用vi編輯器編寫sqlload的控制文件,內容如下
[oracle@localhost oracle]$ cat a.txt
LOAD DATA
INFILE * #由于數(shù)據(jù)文件和控制文件在一起,故此處使用*
INTO TABLE DEPT1 #填寫要插入的表名,前綴默認insert,對無數(shù)據(jù)的表進行插入數(shù)據(jù);如果表已有數(shù)據(jù),可使用append參數(shù),在表里追加數(shù)據(jù)
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' #代表要插入數(shù)據(jù)的格式,使用逗號隔開,類似示例中“NEW YORK”這類中間帶空格的,則使用雙引號標注
(DEPTNO, #括號內寫入表的字段名
DNAME,
LOC)
BEGINDATA
10,ACCOUNTING,"NEW YORK"
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
tips:強烈建議將代碼多分開幾行書寫,不要堆砌在一起。這樣運行的時候,linux的報錯可以直接指出是哪一行出錯,能更快速定位到我們的錯誤位置。本人便是因為代碼里的一個中文括號,折騰了許久
3.運行sqlldr導入命令
[oracle@localhost oracle]$ sqlldr scott/scott control='/u01/oracle/a.txt'
SQL*Loader: Release 11.2.0.1.0 - Production on Mon Nov 1 19:01:51 2021
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 4
4.此時登錄數(shù)據(jù)庫,查看dept1的數(shù)據(jù),可以看到導入成功了
SQL> set line 1000
SQL> select * from dept1;
DEPTNO DNAME LOC
---------- -------------------- ---------------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
實驗二(控制文件和數(shù)據(jù)文件分開)
- 編輯控制文件和數(shù)據(jù)文件,內容如下
[oracle@localhost oracle]$ cat aa.txt
LOAD DATA
INFILE bb.txt #由于數(shù)據(jù)文件在同目錄,所以不需要指定路徑
APPEND INTO TABLE DEPT1 #參數(shù)append代表追加數(shù)據(jù)
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(DEPTNO,
DNAME,
LOC)
[oracle@localhost oracle]$ cat bb.txt
10,ACCOUNTING,"NEW YORK"
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
2.使用操作系統(tǒng)命令導入數(shù)據(jù)到數(shù)據(jù)庫里
[oracle@localhost oracle]$ sqlldr scott/scott control='/u01/oracle/aa.txt'
SQL*Loader: Release 11.2.0.1.0 - Production on Mon Nov 1 20:33:38 2021
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 4
3.登入數(shù)據(jù)庫,查看是否導入成功
SQL> select * from dept1;
DEPTNO DNAME LOC
---------- ------------------------------------------ ---------------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
8 rows selected.
總結
本文舉的例子算是最簡單的使用了,在實際工作中,數(shù)據(jù)會以各種形式出現(xiàn),只有了解sqlldr各項參數(shù)的含義,才可以寫出適合自己的代碼。
另外,數(shù)據(jù)的大小也是一個需要斟酌的因素。sqlldr導入的效率如果太差,就需要使用直接路徑的導入方式,否則就該考慮換個工具。
最后修改時間:2021-12-22 14:37:57
「喜歡這篇文章,您的關注和贊賞是給作者最好的鼓勵」
關注作者
【版權聲明】本文為墨天輪用戶原創(chuàng)內容,轉載時必須標注文章的來源(墨天輪),文章鏈接,文章作者等基本信息,否則作者和墨天輪有權追究責任。如果您發(fā)現(xiàn)墨天輪中有涉嫌抄襲或者侵權的內容,歡迎發(fā)送郵件至:contact@modb.pro進行舉報,并提供相關證據(jù),一經(jīng)查實,墨天輪將立刻刪除相關內容。




