2006年08月14日
ORACLE SQLLDR簡介
使用時機多半是用來把其他的資料庫的資料、文字檔匯入oracle中,或是把較舊的oracle板本裡的資料匯入較新的板本中
測試環境
OS:win2000
ORACLE:10.0.2
操作重點
1、確認執行動作的用戶有權限進行
2、目地table要先建立
3、control檔內容要正確
測試環境
OS:win2000
ORACLE:10.0.2
操作重點
1、確認執行動作的用戶有權限進行
2、目地table要先建立
3、control檔內容要正確
操作流程
1、建立control檔
2、建立要匯入資料的測試資料
3、建立table
4、進行匯入
5、查看
6、怎會沒有資料呢,這時要先查看test.log
原來是資料欄位格式不對啊;而你可以查看bad.log檔,可以看到三行資料
7、修改資料欄位
8、再進行匯入動作
9、查看資料真的有進來了嗎
10、附上log檔
心得:
除了可做單純的匯入之外,你還可以在匯入時加入判斷條件,讓特定的資料到指定的table中,等以後我有需要處理時再把流程跟大家分享了
1、建立control檔
| load data (宣告開始) infile "test.dat" (匯入的資料檔) badfile "bad.log" (放資料格式不符合的) discardfile "discard.log" (放不符合過濾絛件的) into table test1 (資料存放的table) fields terminated by ',' optionally enclosed by '"' (資料要怎樣分割) trailing nullcols ( t1 char , t2 char ) |
2、建立要匯入資料的測試資料
| 1,"test1" 2,"test2" 3,"test3" |
3、建立table
| create table test1 (t1 int ,t2 char); |
4、進行匯入
| E:\sqlldr>sqlldr bcde/bcde control=test.ctl SQL*Loader: Release 10.2.0.1.0 - Production on 星期一 8月 14 12:01:05 2006 Copyright (c) 1982, 2005, Oracle. All rights reserved. 已達確認點 - 邏輯記錄計數 3 |
5、查看
| SQL> select * from test1; 沒有任何資料列被選取 |
6、怎會沒有資料呢,這時要先查看test.log
| SQL*Loader: Release 10.2.0.1.0 - Production on 星期一 8月
14 12:01:05 2006 Copyright (c) 1982, 2005, Oracle. All rights reserved. 控制檔: test.ctl 資料檔: test.dat 不良檔案: bad.log 捨棄檔案: discard.log (可以捨棄全部) 要載入的數目: ALL 要略過的數目: 0 可容許的錯誤: 50 連結陣列: 64 列, 上限為 256000 個位元組 繼續: 未設定 使用的路徑: 傳統 表格 TEST1, 載入 自每一個邏輯記錄. 這個表格的有效插入選項: INSERT TRAILING NULLCOLS 選項處於有效狀態 資料欄名稱 位置 長度 項目 Encl 資料類型 ------------------------------ ---------- ----- ---- ---- --------------------- T1 FIRST * , O(") CHARACTER T2 NEXT * , O(") CHARACTER 記錄 1: 被拒 - 表格 TEST1, 資料欄 T2 發生錯誤 ORA-12899: 資料欄 "BINHU"."TEST1"."T2" 的值太大 (實際: 5, 最大值: 1) 記錄 2: 被拒 - 表格 TEST1, 資料欄 T2 發生錯誤 ORA-12899: 資料欄 "BINHU"."TEST1"."T2" 的值太大 (實際: 5, 最大值: 1) 記錄 3: 被拒 - 表格 TEST1, 資料欄 T2 發生錯誤 ORA-12899: 資料欄 "BINHU"."TEST1"."T2" 的值太大 (實際: 5, 最大值: 1) 表格 TEST1: 已順利載入 0 資料列. 由於資料錯誤, 3 資料列 未被載入 因為所有的 WHEN 子句均不成立, 0 資料列 未被載入 因為所有的欄位均為 NULL, 0 資料列 未被載入 分配給連結陣列的空間: 33024 個位元組 (64 列) 讀取 緩衝區位元組: 1048576 略過的邏輯記錄總數: 0 讀取的邏輯記錄總數: 3 拒絕的邏輯記錄總數: 3 刪除的邏輯記錄總數: 0 自 星期一 8月 14 12:01:05 2006 開始執行 於 星期一 8月 14 12:01:10 2006 結束執行 目前歷時: 00:00:04.82 CPU 時間為: 00:00:00.09 |
7、修改資料欄位
| SQL> alter table test1 modify t2 char(10); 已更改表格. |
8、再進行匯入動作
| E:\sqlldr>sqlldr binhu/2gxirdll control=test.ctl SQL*Loader: Release 10.2.0.1.0 - Production on 星期一 8月 14 12:01:05 2006 Copyright (c) 1982, 2005, Oracle. All rights reserved. 已達確認點 - 邏輯記錄計數 3 E:\sqlldr>sqlldr binhu/2gxirdll control=test.ctl SQL*Loader: Release 10.2.0.1.0 - Production on 星期一 8月 14 12:05:51 2006 Copyright (c) 1982, 2005, Oracle. All rights reserved. 已達確認點 - 邏輯記錄計數 3 |
9、查看資料真的有進來了嗎
| SQL> select * from test1; T1 T2 ---------- -------------------- 1 test1 2 test2 3 test3 SQL> desc test1; 名稱 空值? 類型 ----------------------------------------- -------- ---------------------------- T1 NUMBER(38) T2 CHAR(10) |
10、附上log檔
| SQL*Loader: Release 10.2.0.1.0 - Production on 星期一 8月
14 12:05:51 2006 Copyright (c) 1982, 2005, Oracle. All rights reserved. 控制檔: test.ctl 資料檔: test.dat 不良檔案: bad.log 捨棄檔案: discard.log (可以捨棄全部) 要載入的數目: ALL 要略過的數目: 0 可容許的錯誤: 50 連結陣列: 64 列, 上限為 256000 個位元組 繼續: 未設定 使用的路徑: 傳統 表格 TEST1, 載入 自每一個邏輯記錄. 這個表格的有效插入選項: INSERT TRAILING NULLCOLS 選項處於有效狀態 資料欄名稱 位置 長度 項目 Encl 資料類型 ------------------------------ ---------- ----- ---- ---- --------------------- T1 FIRST * , O(") CHARACTER T2 NEXT * , O(") CHARACTER 表格 TEST1: 已順利載入 3 資料列. 由於資料錯誤, 0 資料列 未被載入 因為所有的 WHEN 子句均不成立, 0 資料列 未被載入 因為所有的欄位均為 NULL, 0 資料列 未被載入 分配給連結陣列的空間: 33024 個位元組 (64 列) 讀取 緩衝區位元組: 1048576 略過的邏輯記錄總數: 0 讀取的邏輯記錄總數: 3 拒絕的邏輯記錄總數: 0 刪除的邏輯記錄總數: 0 自 星期一 8月 14 12:05:51 2006 開始執行 於 星期一 8月 14 12:05:56 2006 結束執行 目前歷時: 00:00:04.75 CPU 時間為: 00:00:00.09 |
心得:
除了可做單純的匯入之外,你還可以在匯入時加入判斷條件,讓特定的資料到指定的table中,等以後我有需要處理時再把流程跟大家分享了
引用URL
http://cgi.blog.roodo.com/trackback/2015107
引用列表:
SQLLDR 是拿來匯入資料用的。使用之前,必須確認目的地 table 已經建好了。還有 control file 滿重要的。宣稱 direct path 的匯入方式速度很快。今天有一個資料檔,裡面是 NBA 球員的資料。(我從 NBA Li
Oracle SQLLDR 的初步認識【自爆前別忘了帶走我的青春】
at 2006年11月16日 17:06
您好~
請問一下喔~trailing nullcols
是什麼意思呢??他的功用是什麼呢??
請問一下喔~trailing nullcols
是什麼意思呢??他的功用是什麼呢??
Posted by 布雷克
at 2006年12月5日 21:47

一照上述板大所言!!
SQL LOAD 無法add Data格式入資料庫囉??
Posted by Phoenix
at 2008年03月21日 12:00