oracle資料庫使用sqlldr命令匯入txt資料

景歲發表於2014-03-26
oracle資料庫使用sqlldr命令匯入資料分為以下幾步:

1. 準備工作:建立表空間,並在表空間內建立相應的表格。
    資料庫、表空間與表的關係:Oracle資料庫是通過表空間來儲存物理表的,一個資料庫例項可以有N個表空間,一個表空間下可以有N張表。
    建立表空間的語句:
CREATE TABLESPACE TABLESPACE_NAME
DATAFILE 'F:/records/TABLESPACE_NAME.dbf'
SIZE 8G  AUTOEXTEND ON NEXT 2G
MAXSIZE UNLIMITED;

    建立表的語句:
CREATE TABLE TABLE_NAME
(
  ID CHAR(10 BYTE)
  NAME CHAR(20 BYTE)
  ADDRESS CHAR(20 BYTE)
  PHONE_NUMBER CHAR(20 BYTE)
)

2. 準備資料匯入的控制檔案.ctl檔案

ctl檔案的格式:
load file
infile 'f:/records/data/data01.txt'  #此處表示一次向同一個表中輸入不止一個txt檔案
infile 'f:/records/data/data02.txt'
infile 'f:/records/data/data03.txt'
APPENDED INTO TABLE TABLE_NAME
 FIELDS TERMINATED BY ','       #表示分隔符為逗號
TRAILING NULLCOLS                 #允許跳過空白列
(ID, NAME, ADDRESS, PHONE_NUMBER) 

3. 在命令列使用sqlldr命令匯入資料

sqlldr username/password@instancename control=F:/RECORDS/input.ctl log=F:/records/input.log errors=10000 direct=y

執行完後資料即匯入成功。


幾點注意事項:
1. 建表需要命令sqlplus /@例項名 as sysdba登陸,然後使用命令@f:/xxxx/xxxx.sql執行內含建表語句的sql檔案建表,建完表需要輸入exit退出(原因是……這一步容易被忽略),再執行匯入資料的"sqlldr 使用者名稱/密碼@例項名 control=F:/xxxx/xxxx.ctl log=F:/xxxx/xxxx.log errors=100000000 direct=y parallel=y"語句。
2. 如果某個txt資料檔案記錄數過大,會出現錯誤提示,這個問題有兩個方法可以解決:
   1)增大sqlldr的值: sqlldr預設的readsize為1048576(10M ),最大可設定為20M,設定方法:在ctl檔案最開頭輸入         options(size=2097152)。
   2)使用txt切割工具將超出大小的txt切割成數份。

相關文章