Wednesday, March 6, 2013

Import Large Amount of Data into Oracle DB 大量匯資料到Oracle DB

        之前因故要匯入幾百萬筆的資料到oracle的DB內,當然是使用我最熟的Toad for Oracle來操作,誰知道資料量太大了,toad當場當給我看;翻了翻中外的技術文件,找到了個好用的方法,穩又方便,實際使用結果相當OK,這個方法就叫做SQL Loader。
     
         SQL Loader簡單來說有點像批次處理,他利用SQL的指令,一筆一筆將資料匯到指定的Table內去。

SQL Loader的操作,主要需要三個類別的檔案:

1. 執行SQL動作的批次檔,用來在DOS或Terminal模式下執行(ex: import.bat);
2.要被匯入rawdata檔案,我通常是用.csv檔案(ex: rawdata.csv);
3.SQL動作批次檔呼叫的細部匯入參數控制檔(ex: import.ctl)。

其中分別針對以上三個檔案做實際範例說明,且已下假設import.bat、import.ctl在同一個目錄下,而rawdata在c:\test下:

1.執行SQL動作的批次檔import.bat內容
    sqlldr userid=report/report123@report control=import.ctl log=import.log

2.SQL動作批次檔呼叫的細部匯入參數控制檔 import.ctl  (以下於實際ctl檔案內,均如下一行一
   行寫)
   Load data --控制文件標識
   infile 'C:\test\rawdata.csv' --要導入的檔名'e:\aa.csv'
   append into table report.trans_jobh_tmp --向Table OLDSSS_TEST導入數據
   fields terminated by "," --檔案分隔符(csv為",")
   TRAILING NULLCOLS
   (RECV_TIME  DATE "YYYY/MM/DD HH24:MI:SS",
   START_TIME  DATE "YYYY/MM/DD HH24:MI:SS",
  ORIGINAL_ZONE,REAL_EMPTY,ORIGINAL_PARTITION,OP_SEQ) --檔案對應的欄位名

3.要被匯入rawdata檔案 (主要是要以逗號分隔,細部內容格式需確認是否正確)
   2011/1/12 00:07,2011/1/12 00:07,U2,,Empty,,
   2011/1/12 00:01,2011/1/12 00:01,103,Real,1,
   2011/1/12 00:04,2011/1/12 00:04,103,Real,1,1040
                       .
                       .
                       .

最候,完成以上的檔案後,執行批次檔就可以囉~~

No comments:

Post a Comment