sql loader 参数详解
生活随笔
收集整理的這篇文章主要介紹了
sql loader 参数详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Sqlldr
sql loader可以把一些以文本格式存放的數據順利地導入到oracle數據庫中,它是一種在不同數據庫之間進行數據遷移非常方便而且通用的工具。缺點就是速度比較慢,另外對blob等類型的數據就有點麻煩了。
一、用法: SQLLDR keyword=value [,keyword=value,...]
二、有效的關鍵字:
userid -- ORACLE username/password
control – 控制文件
log – 記錄的日志文件
bad – 壞數據文件
data – 數據文件
discard – 丟棄的數據文件
??? discardmax – 允許丟棄數據的最大值???????? (全部默認)
skip -- Number of logical records to skip?? (默認0)
load -- Number of logical records to load?? (全部默認)
errors – 允許的錯誤記錄數?????????? (默認50)
rows -- Number of rows in conventional path bind array or between direct path data saves(每次提交的記錄數,默認: 常規路徑 64, 所有直接路徑)
bindsize -- Size of conventional path bind array in bytes(默認256000)
每次提交記錄的緩沖區的大小(字節為單位,默認256000)
silent --禁止輸出信息 (header,feedback,errors,discards,partitions)
direct – 使用直通路徑方式導入???????????????????? (默認FALSE)
parfile -- parameter file: name of file that contains parameter specifications
parallel -- 并行導入??????????????????? (默認FALSE)
file -- File to allocate extents from
???? skip_unusable_indexes ??? -- disallow/allow unusable indexes or index partitions(默認FALSE)
???? skip_index_maintenance ?? -- do not maintain indexes, mark affected indexes as unusable(默認FALSE)
readsize -- Size of Read buffer???????????????? (默認1048576)
與bindsize成對使用,其中較小者會自動調整到較大者。sqlldr先計算單條記錄長度,乘以rows,如小于bindsize,不會試圖擴張rows以填充bindsize;如超出,則以bindsize為準。
????? external_table ?????? -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE(默認NOT_USED)
????? columnarrayrows ???? -- Number of rows for direct path column array(默認5000)
????? streamsize???????? -- Size of direct path stream buffer in bytes(默認256000)
????? multithreading ?????? -- use multithreading in direct path
resumable -- enable or disable resumable for current session(默認FALSE)
????? resumable_name ?????? -- text string to help identify resumable statement
????? resumable_timeout ?????? -- wait time (in seconds) for RESUMABLE(默認7200)
????? date_cache -- size (in entries) of date conversion cache(默認1000)
注意:有兩種方式可以指定命令行參數:通過位置或者通過關鍵字。
????? (1)通過位置指定命令行參數的例子:'sqlldr scott/tiger foo';
???? (2)通過關鍵字指定命令行參數的例子:'sqlldr control=foo userid=scott/tiger';
不能前面使用關鍵字指定后面通過位置指定的混合方式;
比如:'sqlldr scott/tiger control=foo logfile=log' 是允許的;
但'sqlldr scott/tiger control=foo log'不允許。
通過位置指定命令行參數的時候,必須將“位置”放在user/passwd之前。
為清楚起見最好所有命令行參數都用關鍵字指定。
三、控制文件:一個控制命令的腳本文件,通常以ctl結尾,內容如下:
LOAD DATA
INFILE 't.dat'????????????? //要導入的文件
// INFILE 'tt.date'???????? //導入多個文件
// INFILE *?????????????????? //表示要導入的內容就在control文件里 下面的BEGINDATA后面就是導入的內容
INTO TABLE table_name?? // 指定裝入的表
BADFILE 'c:\bad.txt'????//可選,指定壞文件地址,缺省在當前目錄下生成與原文件名一致的.bad文件
//************* 以下是4種裝入表的方式
APPEND?????????? // 原先的表有數據 就加在后面
// INSERT???????????? //裝載空表 如果原先的表有數據 sqlloader會停止 默認值
// REPLACE??????? //?? 原先的表有數據 原先的數據會全部刪除
// TRUNCATE???????????? //?? 指定的內容和replace的相同 會用truncate語句刪除現存數據
//************* 指定分隔符
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
// TERMINATED BY WRITESPACE //以空白分割
TRAILING NULLCOLS?????????? // 表的字段沒有對應的值時允許為空
************* 下面是表的字段
(
col_1 , col_2 ,col_filler FILLER // FILLER 關鍵字 此列的數值不會被裝載
??? // 如: lg,lg,not 結果 lg lg
)??
???? 如果沒聲明FIELDS TERMINATED BY ',' 時,可以用下面兩種方式實現同樣功能:
(1)、為每一列指定分隔符
(
col_1 [interger external] TERMINATED BY ',' ,
col_2 [date "dd-mon-yyy"] TERMINATED BY ',' ,
col_3 [char] TERMINATED BY ',' OPTIONALLY ENCLOSED BY 'lg'
)
(2)、用位置告訴字段裝載數據
(
col_1 position(1:2),
col_2 position(3:10),
col_3 position(*:16), // 這個字段的開始位置在前一字段的結束位置
col_4 position(1:16),
col_5 position(3:10) char(8) // 指定字段的類型
)
BEGINDATA?????????//對應開始的 INFILE * 要導入的內容就在control文件里
10,Sql,what
20,lg,show
zt:http://hi.baidu.com/chenjian3/blog/item/fe63bc51ee032018367abef7.html
總結
以上是生活随笔為你收集整理的sql loader 参数详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算思维
- 下一篇: 详细介绍 Qt Creator 快捷捷应