Oracle數據庫sqlload用法的相關知識是本文我們主要要介紹的內容,那麼什麼是sqlload呢?看完下面的例子我們就知道了。當用Oracle數據庫處理百萬級別數據時,選擇sqlload應該是比較好的方案。下面是自學sqlload的例子,供初學者參考。
1、在哪兒運行sqlload?
首先,電腦上至少裝有Oracle客戶端程序,在這裡就可以執行sqlload,運行-->cmd--->sqlldr。裡面有很多注釋可以自己參考。
2、控制文件
寫sqlload需要的控制文件.ctl或者.cvs格式。
control.ctl內容:
- LOAD DATA
- INFILE 'f:\TL_FUND_MMS_BATCH.txt'
- BADFILE 'f:\BAD_TL_FUND_MMS_BATCH1.dat'
- APPEND
- INTO TABLE tl_fund_mms_batch
- FIElds terminated by ","
- Optionally enclosed by '"'
- trailing nullcols
- (
- NUMBATCHSEQID ,
- VC2BATCHNAME,
- VC2RESOURCEID,
- NUMCOUNTTOTAL ,
- NUMCOUNTSUCS,
- NUMCOUNTLONG ,
- NUMCOUNTFAILD ,
- VC2BILLPATH,
- NUMCREATEUSERID ,
- NUMSENDUSERID ,
- NUMDEALFLAG,
- DATCREATETIME DATE "YYYY-MM-DD HH24:MI:SS",
- DATSENDTIME DATE "YYYY-MM-DD HH24:MI:SS"
- )
3、數據文件
- TL_FUND_MMS_BATCH.txt內容:103,"肖測試", "0111022109240241310006", 1, 1, 0, 0,
- "../webaPPS/billFiles\data(2).XML", 900000, 900000, 2,2011-4-28 15:50:26,2011-4-28 15:50:26
4、執行命令
我把所有文件都放到了F盤:
執行命令:sqlldr mjjzh/mjjzh@orcl f:\control.ctl log=f:\log.log
5、查看日志
如果執行完命令,在指定的目錄下就會生成日志信息,如果執行過程中有錯誤,就會在相應的目錄下生成壞數據文件,有錯誤的時候也會打印這句話:達到提交點 - 邏輯記錄計數 1。不要認為打印了這句就認為執行成功了。
log.log內容:
- SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 5月 12 17:01:38 2011
- Copyright (c) 1982, 2005, Oracle. All rights reserved.
- 控制文件: f:\control.ctl
- 數據文件: f:\TL_FUND_MMS_BATCH.txt
- 錯誤文件: f:\BAD_TL_FUND_MMS_BATCH1.dat
- 廢棄文件: 未作指定
- (可廢棄所有記錄)
- 要加載的數: ALL
- 要跳過的數: 0
- 允許的錯誤: 50
- 綁定數組: 64 行, 最大 256000 字節
- 繼續: 未作指定
- 所用路徑: 常規
- 表 TL_FUND_MMS_BATCH,已加載從每個邏輯記錄
- 插入選項對此表 APPEND 生效
- TRAILING NULLCOLS 選項生效
- 列名 位置 長度 中止 包裝數據類型
- ------------------------------ ---------- ----- ---- -------------------------
- NUMBATCHSEQID FIRST * , O (") CHARACTER
- VC2BATCHNAME NEXT * , O (") CHARACTER
- VC2RESOURCEID NEXT * , O (") CHARACTER
- NUMCOUNTTOTAL NEXT * , O (") CHARACTER
- NUMCOUNTSUCS NEXT * , O (") CHARACTER
- NUMCOUNTLONG NEXT * , O (") CHARACTER
- NUMCOUNTFAILD NEXT * , O (") CHARACTER
- VC2BILLPATH NEXT * , O (") CHARACTER
- NUMCREATEUSERID NEXT * , O (") CHARACTER
- NUMSENDUSERID NEXT * , O (") CHARACTER
- NUMDEALFLAG NEXT * , O (") CHARACTER
- DATCREATETIME NEXT * , O (") DATE YYYY-MM-DD HH24:MI:SS
- DATSENDTIME NEXT * , O (") DATE YYYY-MM-DD HH24:MI:SS
- 記錄 1: 被拒絕 - 表 TL_FUND_MMS_BATCH 出現錯誤。
- ORA-00001: unique constraint (MJJZH.PK_TL_FUND_MMS_BATCH) violated
- 注:ORA-00001: unique constraint (MJJZH.PK_TL_FUND_MMS_BATCH) violated,是因為主鍵重復。
- 表 TL_FUND_MMS_BATCH:
- 0 行 加載成功。
- 由於數據錯誤, 1 行 沒有加載。
- 由於所有 WHEN 子句失敗, 0 行 沒有加載。
- 由於所有字段都為空的, 0 行 沒有加載。
- 為綁定數組分配的空間: 214656 字節 (64 行)
- 讀取 緩沖區字節數: 1048576
- 跳過的邏輯記錄總數: 0
- 讀取的邏輯記錄總數: 1
- 拒絕的邏輯記錄總數: 1
- 廢棄的邏輯記錄總數: 0
- 從 星期四 5月 12 17:01:38 2011 開始運行
- 在 星期四 5月 12 17:01:39 2011 處運行結束
- 經過時間為: 00: 00: 01.20
- CPU 時間為: 00: 00: 00.06
6、注意事項:
①、日期格式轉換:表中的最後兩個字段是日期格式,這裡需做 DATCREATETIME DATE "YYYY-MM-DD HH24:MI:SS", 轉換,相當於to_date()。且數據文件中是2011-4-28 15:50:26格式,不是"2011-4-28 15:50:26"格式。否則會出錯。(後來測試的時候發現帶上也不會出錯了,奇怪。)
②、插入數據庫中的內容包含":如果數據文件中是"肖測試",控制文件中需加上Optionally enclosed by '"',這樣在插入數據庫時,內容就不包含"",下面是加Optionally enclosed by '"'與不加的效果。
關於Oracle數據庫sqlload用法的相關知識就介紹到這裡了,希望本次的介紹能夠對您有所收獲!