Ⅰ sqlLOADER 3 指定不裝載哪一列
oracle裝載表即通過sqlloader的方式導入數據。
Oracle 的SQL*LOADER可以將外部數據載入到資料庫表中。下面是SQL*LOADER的基本特點:
1)能裝入不同數據類型文件及多個數據文件的數據
2)可裝入固定格式,自由定界以及可度長格式的數據
3)可以裝入二進制,壓縮十進制數據
4)一次可對多個表裝入數據
5)連接多個物理記錄裝到一個記錄中
6)對一單記錄分解再裝入到表中
7)可以用 數對制定列生成唯一的KEY
8)可對磁碟或 磁帶數據文件裝入製表中
9)提供裝入錯誤報告
10)可以將文件中的整型字元串,自動轉成壓縮十進制並裝入列表中。
1.2控制文件
控制文件是用一種語言寫的文本文件,這個文本文件能被SQL*LOADER識別。SQL*LOADER根據控制文件可以找到需要載入的數據。並且分析和解釋這些數據。控制文件由三個部分組成:
l 全局選件,行,跳過的記錄數等;
l INFILE子句指定的輸入數據;
l 數據特性說明。
1.3輸入文件
對於 SQL*Loader, 除控制文件外就是輸入數據。SQL*Loader可從一個或多個指定的文件中讀出數據。如果數據是在控制文件中指定,就要在控制文件中寫成 INFILE * 格式。當數據固定的格式(長度一樣)時且是在文件中得到時,要用INFILE "fix n"
load data
infile 'example.dat' "fix 11"
into table example
fields terminated by ',' optionally enclosed by '"'
(col1 char(5),
col2 char(7))
example.dat:
001, cd, 0002,fghi,
00003,lmn,
1, "pqrs",
0005,uvwx,
當數據是可變格式(長度不一樣)時且是在文件中得到時,要用INFILE "var n"。如:
load data
infile 'example.dat' "var 3"
into table example
fields terminated by ',' optionally enclosed by '"'
(col1 char(5),
col2 char(7))
example.dat:
009hello,cd,010world,im,
012my,name is,
1.4壞文件
壞文件包含那些被SQL*Loader拒絕的記錄。被拒絕的記錄可能是不符合要求的記錄。
壞文件的名字由 SQL*Loader命令的BADFILE 參數來給定。
1.5日誌文件及日誌信息
當SQL*Loader 開始執行後,它就自動建立 日誌文件。日誌文件包含有載入的總結,載入中的錯誤信息等。
控制文件語法
控制文件的格式如下:
OPTIONS ( { [SKIP=integer] [ LOAD = integer ]
[ERRORS = integer] [ROWS=integer]
[BINDSIZE=integer] [SILENT=(ALL|FEEDBACK|ERROR|DISCARD) ] )
LOAD[DATA]
[ { INFILE | INDDN } {file | * }
[STREAM | RECORD | FIXED length [BLOCKSIZE size]|
VARIABLE [length] ]
[ { BADFILE | BADDN } file ]
{DISCARDS | DISCARDMAX} integr ]
[ {INDDN | INFILE} . . . ]
[ APPEND | REPLACE | INSERT ]
[RECLENT integer]
[ { CONCATENATE integer |
CONTINUEIF { [THIS | NEXT] (start[: end])LAST }
Operator { 'string' | X 'hex' } } ]
INTO TABLE [user.]table
[APPEND | REPLACE|INSERT]
[WHEN condition [AND condition]...]
[FIELDS [delimiter] ]
(
column {
RECNUM | CONSTANT value |
SEQUENCE ( { integer | MAX |COUNT} [, increment] ) |
[POSITION ( { start [end] | * [ + integer] }
) ]
datatype
[TERMINATED [ BY ] {WHITESPACE| [X] 'character' } ]
[ [OPTIONALLY] ENCLOSE[BY] [X]'charcter']
[NULLIF condition ]
[DEFAULTIF condotion]
}
[ ,...]
)
[INTO TABLE...]
[BEGINDATA]
1)要載入的數據文件:
1.INFILE 和INDDN是同義詞,它們後面都是要載入的數據文件。如果用 * 則表示數據就在控制文件內。在INFILE 後可以跟幾個文件。
2.STRAM 表示一次讀一個位元組的數據。新行代表新物理記錄(邏輯記錄可由幾個物理記錄組成)。
3.RECORD 使用宿主操作系統文件及記錄管理系統。如果數據在控制文件中則使用這種方法。
3. FIXED length 要讀的記錄長度為length位元組,
4. VARIABLE 被讀的記錄中前兩個位元組包含的長度,length 記錄可能的長度。缺傷為8k位元組。
5. BADFILE和BADDN同義。Oracle 不能載入數據到資料庫的那些記錄。
6. DISCARDFILE和DISCARDDN是同義詞。記錄沒有通過的數據。
7. DISCARDS和DISCARDMAX是同義詞。Integer 為最大放棄的文件個數。
2)載入的方法:
1.APPEND 給表添加行。
2.INSERT 給空表增加行(如果表中有記錄則退出)。
3.REPLACE 先清空表在載入數據。
4. RECLEN 用於兩種情況,1)SQLLDR不能自動計算記錄長度,2)或用戶想看壞文件的完整記錄時。對於後一種,Oracle只能按常規把壞記錄部分寫到錯誤的地方。如果看整條記錄,則可以將整條記錄寫到壞文件中。
3)指定最大的記錄長度:
1. CONCATENATE 允許用戶設定一個整數,表示要組合邏輯記錄的數目。
4)建立邏輯記錄:
1.THIS 檢查當前記錄條件,如果為真則連接下一個記錄。
2.NEXT 檢查下一個記錄條件。如果為真,則連接下一個記錄到當前記錄來。
2. Start: end 表示要檢查在THIS或NEXT字串是否存在繼續串的列,以確定是否進行連接。如:continueif next(1-3)='WAG' 或continueif next(1-3)=X'0d03if'
5)指定要載入的表:
1.INTO TABLE 要加的表名。
2.WHEN 和select WHERE類似。用來檢查記錄的情況,如:when(3-5)='SSM' and (22)='*"
6)介紹並括起記錄中的欄位:
1. FIELDS給出記錄中欄位的分隔符,FIELDS格式為:
FIELDS [TERMIALED [BY] {WHITESPACE | [X] 'charcter'} ]
[ [ OPTIONALLY] ENCLOSE [BY] [X]'charcter' ]
TERMINATED 讀完前一個欄位即開始讀下一個欄位直到介紹。
WHITESPACE 是指結束符是空格的意思。包括空格、Tab、換行符、換頁符及回車符。如果是要判斷但字元,可以用單引號括起,如X'1B'等。
OPTIONALLY ENCLOSED 表示數據應由特殊字元括起來。也可以括在TERMINATED字元內。使用OPTIONALLY要同時用TERMINLATED。
ENCLOSED 指兩個分界符內的數據。如果同時用 ENCLOSED和TERMINAED ,則它們的順序決定計算的順序。
7)定義列:
column 是表列名。列的取值可以是:
BECHUM 表示邏輯記錄數。第一個記錄為1,第2個記錄為2。
CONSTANT 表示賦予常數。
SEQUENCE 表示序列可以從任意序號開始,格式為:
SEQUENCE ( { integer | MAX |COUNT} [,increment]
POSITION 給出列在邏輯記錄中的位置。可以是絕對的,或相對前一列的值。格式為:
POSITION ( {start[end] | * [+integer] } )
Start 開始位置
* 表示前欄位之後立刻開始。
+ 從前列開始向後條的位置數。
8)定義數據類型:
可以定義14種數據類型:
CHAR
DATE
DECIMAL EXTERNAL
DECIMAL
DOUBLE
FLOAT
FLOAT EXTERNAL
GRAPHIC EXTERNAL
INTEGER
INTEGER EXTERNAL
SMALLINT
VARCHAR
VARGRAPHIC
1.字元類型數據
CHAR[ (length)] [delimiter]
length預設為 1.
2.日期類型數據
DATE [ ( length)]['date_format' [delimiter]
使用to_date函數來限制。
3.字元格式中的十進制
DECIMAL EXTERNAL [(length)] [delimiter]
用於常規格式的十進制數(不是二進制=> 一個位等於一個bit)。
4.壓縮十進制格式數據
DECIMAL (digtial [,divcision])
5.雙精度符點二進制
DOUBLE
6.普通符點二進制
FLOAT
7.字元格式符點數
FLOAT EXTERNAL [ (length) ] [delimiter]
8.雙位元組字元串數據
GRAPHIC [ (legth)]
9.雙位元組字元串數據
GRAPHIC EXTERNAL[ (legth)]
10.常規全字二進制整數
INTEGER
11.字元格式整數
INTEGER EXTERNAL
12.常規全字二進制數據
SMALLINT
13.可變長度字元串
VARCHAR
14.可變雙位元組字元串數據
VARGRAPHIC
2.2寫控制文件CTL
1. 各數據文件的文件名;
2.各數據文件格式;
3.各數據文件里各數據記錄欄位的屬性;
4.接受數據的ORACLE表列的屬性;
5.數據定義;
6.其它
數據文件的要求:
數據類型的指定
CHAR 字元型
INTEGER EXTERNAL 整型
DECIMAL EXTERNAL 浮點型
3.1數據文件的內容
可以在OS下的一個文件;或跟在控制文件下的具體數據。數據文件可以是:
1、 二進制與字元格式:LOADER可以把二進制文件讀(當成字元讀)列表中
2、 固定格式:記錄中的數據、數據類型、 數據長度固定。
3、 可變格式:每個記錄至少有一個可變長數據欄位,一個記錄可以是一個連續的字元串。
數據段的分界(如姓名、年齡)如用「,」作欄位的 分 ;用,"』作數據
括弧等
4、 LOADER可以使用多個連續欄位的物理記錄組成一個邏輯記錄,記錄文件運行情況文件:包括以下內容:
1、 運行日期:軟體版本號
2、 全部輸入,輸出文件名;對命令行的展示信息,補充信息,
3、 對每個裝入信息報告:如表名,裝入情況;對初始裝入, 加截入或更新裝
入的選擇情況,欄信息
4、 數據錯誤報告:錯誤碼;放棄記錄報告
5、 每個裝X報告:裝入行;裝入行數,可能跳過行數;可能拒絕行數;可能放
棄行數等
6、 統計概要:使用空間(包大小,長度);讀入記錄數,裝入記錄數,跳過記
錄數;拒絕記錄數,放棄記錄數;運行時間等。
Ⅱ 如何使用SQLloader導入數據
1、打開要導出為oracle的Excel,將Excel文件保存為test.txt文件(文件->另存為)
2、創建SQL*Loader輸入數據所需要的文件,均保存到C:,用記事本編輯:
控制文件:input.ctl,內容如下:
load data--1、控制文件標識
infile 'test.txt' --2、要輸入的數據文件名為.txt,注意路徑
append intotable Table_Name --3、向oracle表中追加記錄
fields terminatedby X'09' --4、欄位終止於X'09',是一個製表符(TAB)
(Col1,Col2…) 定義列對應順序
a、insert,為預設方式,在數據裝載開始時要求表為空
b、append,在表中追加新記錄
c、replace,刪除舊記錄,替換成新裝載的記錄
d、truncate,同上
3、在DOS窗口下使用SQL*Loader命令實現數據的輸入
C:>sqlldr userid=system/managercontrol=input.ctl
默認日誌文件名為:input.log
默認壞記錄文件為:input.bad
4、ok,現在就可以查看數據是否導入了。
ORACLESQL Loader的詳細語法
SQL*LOADER是ORACLE的數據載入工具,通常用來將操作系統文件遷移到ORACLE資料庫中。SQL*LOADER是大型數據倉庫選擇使用的載入方法,因為它提供了最快速的途徑(DIRECT,PARALLEL)。
要使用SQL*Loader,必須編輯一個控制文件(.ctl),及一個數據文件(.dat)
首先,我們認識一下SQL*LOADER
在windows下,SQL*LOADER的命令為SQLLDR,在UNIX下一般為sqlldr/sqlload。
如執行:d:\oracle>sqlldr
用法: SQLLOAD 關鍵字=值 [,keyword=value,...]
例如:>sqlldr user/pass
control=控制文件名 log=日誌文件名
SQL*LOADER參數列表
參數名稱
功能描述
Userid
資料庫用戶名及口令
Control
控制文件名稱,描述數據載入的文件信息
Log
日誌文件名稱,用於記錄數據載入過程的信息
Bad
壞信息文件名稱,用於記錄不符合要求的數據信息
Data
數據文件名稱,記錄要載入的原始數據
Discard
丟掉文件名稱,記載了不滿足條件而被過濾的數據
Discardmax
允許丟掉數據量,默認為全部丟掉
Skip
跳過幾個邏輯記錄,預設為0
Load
要載入的記錄數,默認為全部載入
Errors
允許出現的錯誤數,預設為50
Direct
是否使用直接路徑載入數據,默認為false
Readsize
緩沖區大小默認為1048576位元組
1、首先創建空表
SQL>create table stu(stunonumber(5),name varchar(10),addr
varchar(20));
數據文件格式分為自由格式和固定格式
固定格式數據文件(mydata.txt)
001 SHUI LIAOHE
002 LIU BEIJING
其控制文件分別如下
#Load.ctl
Load data
Infile mydata.txt
Into table stu
(stuno position(01:03) integer external,
Name position(05:08) varchar,
Addr position(10:16) varchar)
導入數據
>sqlldr test1/test1 control=』d:\load.ctl』log=』d:\load.log』
自由格式數據文件(mydata.txt)
003,」shuics」,」new york」
004,」liujianxin」,」Beijing」
005,」shuiym」,」Canada」
其控制文件如下
#load.ctl
Load data
Infile mydata.txt
Append|insert|replace|truncate
Into table stu
Fields terminated by 『,』
Optionally enclosed by 『」』
(stuno,name,addr)
導入數據
將Excel數據載入到oracle資料庫
1、將excel文件另存為文本文件(製表符分隔)
2、創建控制文件如下
Load data
Infile 『book.txt』
Append
Into table stu
Fields terminated by X』09』
(stuno,name,addr)
其中X』09』是一個製表符(TAB)
Ⅲ Oracle資料庫不在本地怎麼使用sqlloader
sqlloader的使用與Oracle資料庫是否在本地無關。前提是本地必須裝有Oracle客戶端。
使用Oracle版本:Oracle10g。
步驟:
1、配置本地連接遠程資料庫。在Oracle安裝目錄下,如「C:oracleproct10.2.0db_1 etworkADMIN」找到tnsnames.ora文件,增加內容(中文部分需要根據實際情況修改)並保存:
本地實例名(可自定義英文+數字組合)=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=伺服器IP或伺服器主機名)(PORT=Oracle埠號))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=資料庫服務名)
)
)
2、根據本地的要sqlloader的腳本在資料庫中建立相應的表,數據舉例如下:
Ⅳ oracle sqlloader 指定結束符
可以重新指定記錄的結束符號,比如將記錄結束符定義為:|加回車,infile 'test.dat' "str '|\n'"
完整控制文件為:
load data
infile 'test.dat' "str '|\n'"
into table test
fields terminated by ',' optionally enclosed by '"'
(id char(3),
ch char(5)
)
可以導入如下五條記錄
001,abc|
002,def|
003,"g
i"|
004,"jkl"|
005,mno
Ⅳ sqlloader處理什麼類型文件
需要一個 控制文件test_main.ctl,內容如下:
LOAD DATA
INFILE *
INTO TABLE test_main
FIELDS TERMINATED BY ','
(ID, VALUE)
BEGINDATA
Ⅵ 如何在SqlLoader中裝載日期型的數據
要確保sqlloader時候的環境變數NLS_DATE_FORMAT跟你指定的"dd/Mon/yyyy:hh24:mi:ss"一樣。否則會報日期格式不正確的錯誤。
首先設置操作系統的環境變數NLS_LANG為AMERICAN_AMERICA.ZHS16GBK,UNIX系統在profile中設置,Windows系統在注冊表中設置。
然後,編寫測試用的數據文件,t.txt
aaaaa,xxxxx,2005-01-01 1:00:00
bbbbb,yyyyy,2005-03-01 12:00:00
ccccc,zzzzz,2005-12-01 18:00:00
創建測試表:
create table T_LOAD
(
A VARCHAR2(10),
B VARCHAR2(10),
C DATE
);
編寫sqlldr使用的控制文件
load data
infile 't.txt'
badfile 't.bad'
append into table t_load
fields terminated by ','
trailing nullcols
(
a,
b,
c date "yyyy-mm-dd hh24:mi:ss"
)
開始做sqlldr
sqlldr control=t.ctl
裝載結束以後,查看log文件
SQL*Loader: Release 9.2.0.6.0 - Proction on Mon Jun 6 02:28:39 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Control File: t.ctl
Data File: t.txt
Bad File: t.bad
Discard File: none specified
(Allow all discards)
Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 256000 bytes
Continuation: none specified
Path used: Conventional
Table T_LOAD, loaded from every logical record.
Insert option in effect for this table: APPEND
TRAILING NULLCOLS option in effect
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
A FIRST * , CHARACTER
B NEXT * , CHARACTER
C NEXT * , DATE yyyy-mm-dd hh24:mi:ss
Table T_LOAD:
3 Rows successfully loaded.
0 Rows not loaded e to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.
Space allocated for bind array: 49536 bytes(64 rows)
Read buffer bytes: 1048576
Total logical records skipped: 0
Total logical records read: 3
Total logical records rejected: 0
Total logical records discarded: 0
Run began on Mon Jun 06 02:28:39 2005
Run ended on Mon Jun 06 02:28:41 2005
Elapsed time was: 00:00:01.38
CPU time was: 00:00:00.04
Ⅶ oracle sqlloader 時,表為中文名,中文欄位,報錯:sqlloader350 非字
在sqlloader的數據文件里將,表名和欄位名用英文的雙引號括起來。
Ⅷ mysql中可以用sqlloader嗎
MySql大量輸入導入的時候都是用工具進行導入的,比如,導入EXCEL, TXT 等等等等。
你用過MYSQL的管理工具嗎?裡面有匯入精靈的。
Ⅸ sqlloader使用哪個參數後需要重建索引
1、重建索引的理由
a、Oracle的B樹索引隨著時間的推移變得不平衡(誤解)
b、索引碎片在不斷增加
c、索引不斷增加,刪除的空間沒有重復使用
d、索引 clustering factor (集群因子)不同步,可以通過重建修復(誤解)
Ⅹ sql*loader是個什麼東西
sql*loader 是一個程序, 用來把 文本文件裡面的數據, 導入到 Oracle 資料庫裡面。
下面是一個簡單的例子:
SQL*Loader
首先需要一個 控制文件test_main.ctl,內容如下:
LOAD DATA
INFILE *
INTO TABLE test_main
FIELDS TERMINATED BY ','
(ID, VALUE)
BEGINDATA
1,Test
其中,
第一行LOAD DATA意思是告訴SQL*Loader,要幹啥? 這里是載入數據。
第二行INFILE *意思是數據從哪裡來? 這里是包含在控制文件中。
第三行INTO TABLE 意思是數據要導到哪裡? 這里是要到 test_main 表。
第四行FIELDS TERMINATED BY意思是數據之間用什麼符號分隔? 這里是用 逗號 分隔。
第五行是數據要按什麼順序寫到列裡面
第六行BEGINDATA是告訴SQL*Loader,後面的都是數據了。
然後開始運行 sqlldr 程序
D:\temp>sqlldr userid=test/test123 control=test_main.ctl
SQL*Loader: Release 10.2.0.1.0 - Proction on 星期日 3月 13 14:58:22 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL*Loader-601: 對於 INSERT 選項, 表必須為空。表 TEST_MAIN 上出錯
在 SQL Plus 中,
SQL> truncate table test_main;
表被截斷。
以後,再次測試執行
D:\temp>sqlldr userid=test/test123 control=test_main.ctl
SQL*Loader: Release 10.2.0.1.0 - Proction on 星期日 3月 13 14:58:56 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
達到提交點 - 邏輯記錄計數 1