【匯入匯出】sqlldr 匯入案例

楊奇龍發表於2011-03-09
今天使用sqlldr 將600w單欄位的資料匯入到一個表當中,但是由於未指定分隔符導致匯入資料失敗。重現一下匯入過程。
load.ctl
load data
infile 'd:\rid_600w.txt'
insert
into table tmp_user (tuid)

C:\Users\aaaa>sqlldr  userid=yang/yang control=d:\load.ctl direct=true
SQL*Loader: Release 11.1.0.6.0 - Production on 星期三 3月 9 20:12:02 2011
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
載入完成 - 邏輯記錄計數 6070664。
==========sqlplus記錄
C:\Users\aaaa>sqlplus yang/yang
SQL*Plus: Release 11.1.0.6.0 - Production on 星期三 3月 9 19:42:28 2011
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
連線到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
yang@ORACL> create table tmp_user(tuid varchar2(100));
表已建立。
yang@ORACL> select tuid from tmp_user where rownum <12;
TUID
------------------------
c
c
c
c
c
c
c
c
c
c
c

已選擇11行。
===================匯入的日誌如下:注意 長度的值為1--失敗的關鍵。
SQL*Loader: Release 11.1.0.6.0 - Production on 星期三 3月 9 20:12:02 2011
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
控制檔案:      d:\load.ctl
資料檔案:      d:\rid_600w.txt
  錯誤檔案:    d:\rid_600w.bad
  廢棄檔案:    未作指定
(可廢棄所有記錄)
要載入的數: ALL
要跳過的數: 0
允許的錯誤: 50
繼續:    未作指定
所用路徑:       直接
表 TMP_USER,已載入從每個邏輯記錄
插入選項對此表 INSERT 生效
   列名                        位置      長度  中止 包裝資料型別
------------------------------ ---------- ----- ---- ---- ---------------------
TUID                                FIRST     1           CHARACTER            
表 TMP_USER:
  6070664 行 載入成功。
  由於資料錯誤, 0 行 沒有載入。
  由於所有 WHEN 子句失敗, 0 行 沒有載入。
  由於所有欄位都為空的, 0 行 沒有載入。
在直接路徑中沒有使用繫結陣列大小。
列陣列  行數:    5000
流緩衝區位元組數:  256000
讀取   緩衝區位元組數: 1048576
跳過的邏輯記錄總數:          0
讀取的邏輯記錄總數:       6070664
拒絕的邏輯記錄總數:          0
廢棄的邏輯記錄總數:        0
由 SQL*Loader 主執行緒載入的流緩衝區總數:     1259
由 SQL*Loader 載入執行緒載入的流緩衝區總數:        0
從 星期三 3月  09 20:12:02 2011 開始執行
在 星期三 3月  09 20:12:09 2011 處執行結束
經過時間為: 00: 00: 06.30
CPU 時間為: 00: 00: 01.98
錯誤的原因是因為沒有指出分割符。FIELDS TERMINATED BY '    '/FIELDS TERMINATED BY 'chr(10)' 都可以
==========修改後的load 控制檔案====
load.ctl
load data
infile 'd:\rid_600w.txt'
insert
into table tmp_user FIELDS TERMINATED BY 'chr(10)' (tuid)
fields teriminated by 'chr(10)' 表示一換行符為分隔符
C:\Users\aaaa>sqlldr  userid=yang/yang control=d:\load.ctl direct=true log=d:\sqlldr.log
SQL*Loader: Release 11.1.0.6.0 - Production on 星期三 3月 9 20:21:07 2011
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
載入完成 - 邏輯記錄計數 6070664。
yang@ORACL> truncate table tmp_user;
表被截斷。
yang@ORACL> drop table tmp_user;
表已刪除。
yang@ORACL> create table tmp_user(tuid varchar2(50));
表已建立。
yang@ORACL> select tuid from tmp_user where rownum <12;
TUID
--------------------------
cindy74583
himself49441
paragraph58429
wander80900
soluble32354
situation72689
gross51644
lee54299
dismiss32151
eyesight1968
advance7776
已選擇11行。
yang@ORACL>
===================匯入的日誌如下:注意 長度的值為*
SQL*Loader: Release 11.1.0.6.0 - Production on 星期三 3月 9 20:21:07 2011
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
控制檔案:      d:\load.ctl
資料檔案:      d:\rid_600w.txt
  錯誤檔案:    d:\rid_600w.bad
  廢棄檔案:    未作指定
(可廢棄所有記錄)
要載入的數: ALL
要跳過的數: 0
允許的錯誤: 50
繼續:    未作指定
所用路徑:       直接
表 TMP_USER,已載入從每個邏輯記錄
插入選項對此表 INSERT 生效
   列名                        位置      長度  中止 包裝資料型別
------------------------------ ---------- ----- ---- ---- ---------------------
TUID                                FIRST     *           CHARACTER            
    終止符字串:  'chr(10)'
表 TMP_USER:
  6070664 行 載入成功。
  由於資料錯誤, 0 行 沒有載入。
  由於所有 WHEN 子句失敗, 0 行 沒有載入。
  由於所有欄位都為空的, 0 行 沒有載入。
在直接路徑中沒有使用繫結陣列大小。
列陣列  行數:    5000
流緩衝區位元組數:  256000
讀取   緩衝區位元組數: 1048576
跳過的邏輯記錄總數:          0
讀取的邏輯記錄總數:       6070664
拒絕的邏輯記錄總數:          0
廢棄的邏輯記錄總數:        0
由 SQL*Loader 主執行緒載入的流緩衝區總數:     1259
由 SQL*Loader 載入執行緒載入的流緩衝區總數:        0
從 星期三 3月  09 20:21:07 2011 開始執行
在 星期三 3月  09 20:21:17 2011 處執行結束
經過時間為: 00: 00: 09.89
CPU 時間為: 00: 00: 05.82

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-688865/,如需轉載,請註明出處,否則將追究法律責任。

相關文章