欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Oracle中sqlldr的用法大全

 更新時間:2023年07月03日 17:17:02   作者:icybay  
這篇文章主要介紹了關(guān)于Oracle中sqlldr的用法大全,SQLLDR可以在極短的時間內(nèi)加載數(shù)量龐大的數(shù)據(jù),這是一個非常有用的工具,可用于從多種平面文件格式向Oracle數(shù)據(jù)庫中加載數(shù)據(jù),下面我們就來詳細(xì)說明一下sqlldr的用法

說明

在 Oracle 數(shù)據(jù)庫中,我們通常在不同數(shù)據(jù)庫的表間記錄進(jìn)行復(fù)制或遷移時會用以下幾種方法:

1. A 表的記錄導(dǎo)出為一條條分號隔開的 insert 語句,然后執(zhí)行插入到 B 表中

2. 建立數(shù)據(jù)庫間的 dblink,然后用 create tableB as select * fromwhere ...,或 insert intoB select * fromwhere ...

3. exp A表,再 imp 到 B 表,exp 時可加查詢條件

4. 程序?qū)崿F(xiàn) select from A ..,然后 insert into B ...,也要分批提交

5. 再就是本篇要說到的 Sql Loader(sqlldr) 來導(dǎo)入數(shù)據(jù),效果比起逐條 insert 來很明顯

第 1 種方法在記錄多時是個噩夢,需三五百條的分批提交,否則客戶端會死掉,而且導(dǎo)入過程很慢。如果要不產(chǎn)生 REDO 來提高 insert into 的性能,就要下面那樣做:

alter table B nologging;  
insert /* +APPEND */ into B(c1,c2) values(x,xx);  
insert /* +APPEND */ into B select * from A@dblink where .....;

前面簡述了 Oracle 中數(shù)據(jù)導(dǎo)入導(dǎo)出的各種方法,我想一定還有更高明的。下面重點講講 Oracle 的 Sql Loader (sqlldr) 的用法。

在命令行下執(zhí)行 Oracle的 sqlldr 命令,可以看到它的詳細(xì)參數(shù)說明,要著重關(guān)注以下幾個參數(shù):

  • userid-- Oracle 的 username/password[@servicename]
  • control-- 控制文件,可能包含表的數(shù)據(jù)
  • log -- 記錄導(dǎo)入時的日志文件,默認(rèn)為 控制文件(去除擴展名).log
  • bad -- 壞數(shù)據(jù)文件,默認(rèn)為 控制文件(去除擴展名).bad
  • data -- 數(shù)據(jù)文件,一般在控制文件中指定。用參數(shù)控制文件中不指定數(shù)據(jù)文件更適于自動操作
  • errors -- 允許的錯誤記錄數(shù),可以用他來控制一條記錄都不能錯
  • rows -- 多少條記錄提交一次,默認(rèn)為 64
  • skip -- 跳過的行數(shù),比如導(dǎo)出的數(shù)據(jù)文件前面幾行是表頭或其他描述
  • 其他參數(shù)

用法示例:

用例子來演示 sqlldr 的使用,有兩種使用方法:

1. 只使用一個控制文件,在這個控制文件中包含數(shù)據(jù)

2. 使用一個控制文件(作為模板) 和一個數(shù)據(jù)文件

第一種:

一般為了利于模板和數(shù)據(jù)的 分離,以及程序的不同分工會使用第二種方式,所以先來看這種用法。數(shù)據(jù)文件可以是 CSV 文件或者以其他分割符分隔的,數(shù)據(jù)文件可以用 PL/SQL Developer 或者 Toad 導(dǎo)出,也可以。另外,用 Toad 還能直接生成包含數(shù)據(jù)的控制文件。

首先,假定有這么一個表 users,并插入五條記錄:

create table users(  
    user_id number,           --用戶 ID  
    user_name varchar2(50),   --用戶名  
    login_times number,       --登陸次數(shù)  
    last_login date           --最后登錄日期  
)

數(shù)據(jù):

insert?into?users?values(1,'Unmi',3,sysdate);??
insert?into?users?values(2,NULL,5,to_date('2008-10-15','YYYY-MM-DD'));??
insert?into?users?values(3,'隔葉黃鶯 ',8,to_date('2009-01-02','YYYY-MM-DD'));??
insert?into?users?values(4,'Kypfos',NULL,NULL);??
insert?into?users?values(5,'不知秋 ',1,to_date('2008-12-23','YYYY-MM-DD'));

第二種:

使用一個控制文件(作為模板) 和一個數(shù)據(jù)文件

1) 建立數(shù)據(jù)文件,我們這里用 PL/SQL Developer 導(dǎo)出表 users 的記錄為 users_data.csv 文件,內(nèi)容如下:

"   ","USER_ID","USER_NAME","LOGIN_TIMES","LAST_LOGIN"  
"1","1","Unmi","3","2009-1-5 20:34:44"  
"2","2","","5","2008-10-15"  
"3","3","隔葉黃鶯","8","2009-1-2"  
"4","4","Kypfos","",""  
"5","5","不知秋","1","2008-12-23"

2) 建立一個控制文件 users.ctl,內(nèi)容如下:

OPTIONS (skip=1,rows=128) -- sqlldr 命令顯示的 選項可以寫到這里邊來,skip=1 用來跳過數(shù)據(jù)中的第一行  
LOAD DATA  
INFILE "users_data.csv" --指定外部數(shù)據(jù)文件,可以寫多 個 INFILE "another_data_file.csv" 指定多個數(shù)據(jù)文件  
--這里還可以使 用 BADFILE、DISCARDFILE 來指定壞數(shù)據(jù)和丟棄數(shù)據(jù)的文件,  
truncate --操作類型,用 truncate table 來清除表中原有 記錄  
INTO TABLE users -- 要插入記錄的表  
Fields terminated by "," -- 數(shù)據(jù)中每行記錄用 "," 分隔  
Optionally enclosed by '"' -- 數(shù)據(jù)中每個字段用 '"' 框起,比如字段中有 "," 分隔符時  
trailing nullcols --表的字段沒有對應(yīng)的值時允 許為空  
(  
  virtual_column FILLER, --這是一個虛擬字段,用來跳 過由 PL/SQL Developer 生成的第一列序號  
  user_id number, --字段可以指定類型,否則認(rèn) 為是 CHARACTER 類型, log 文件中有顯示  
  user_name,  
  login_times,  
  last_login DATE "YYYY-MM-DD HH24:MI:SS" -- 指定接受日期的格式,相當(dāng)用 to_date() 函數(shù)轉(zhuǎn)換  
)

說明:在操作類型 truncate 位置可用以下中的一值:

1) insert --為缺省方式,在數(shù)據(jù)裝載開始時要求表為空2) append --在表中追加新記錄3) replace --刪除舊記錄(用 delete from table 語句),替換成新裝載的記錄4) truncate --刪除舊記錄(用 truncate table 語句),替換成新裝載的記錄

3) 執(zhí)行命令:

sqlldr  control=users.ctl

在 dbservice 指示的數(shù)據(jù)庫的表 users 中記錄就和數(shù)據(jù)文件中的一樣了。

執(zhí)行完 sqlldr 后希望能留意一下生成的幾個文件,如 users.log 日志文件、users.bad 壞數(shù)據(jù)文件等。特別是要看看日志文件,從中可讓你更好的理解 Sql Loader,里面有對控制文件的解析、列出每個字段的類型、加載記錄的統(tǒng)計、出錯原因等信息。

第一種方式,只使用一個控制文件 在這個控制文件中包含數(shù)據(jù)

1) 把 users_data.cvs 中的內(nèi)容補到 users.ctl 中,并以 BEGINDATA 連接,還要把 INFILE "users_data.csv" 改為 INFILE *。同時為了更大化的說明問題,把數(shù)據(jù)處理了一下。此時,完整的 users.ctl 文件內(nèi)容是:

OPTIONS (skip=1,rows=128) -- sqlldr 命令顯示的 選項可以寫到這里邊來,skip=1 用來跳過數(shù)據(jù)中的第一行  
LOAD DATA  
INFILE *  -- 因為數(shù)據(jù)同控制文件在一 起,所以用 * 表示  
append    -- 這里用 了 append 來操作,在表 users 中附加記錄   
INTO TABLE users  
when LOGIN_TIMES<>'8'  -- 還可以用 when 子 句選擇導(dǎo)入符合條件的記錄  
Fields terminated by ","  
trailing nullcols  
(  
  virtual_column FILLER, --跳過 由 PL/SQL Developer 生成的第一列序號  
  user_id "user_seq.nextval", --這一列直接取序列的下一值,而不用數(shù)據(jù)中提供的值  
  user_name "'Hi '||upper(:user_name)",--,還能用SQL函數(shù)或運算對數(shù)據(jù)進(jìn)行加工處理  
  login_times terminated by ",", NULLIF(login_times='NULL') --可為列單獨指定分隔符  
  last_login DATE "YYYY-MM-DD HH24:MI:SS" NULLIF (last_login="NULL") -- 當(dāng)字段為"NULL"時就是 NULL  
)  
BEGINDATA --數(shù)據(jù)從這里開始  
   ,USER_ID,USER_NAME,LOGIN_TIMES,LAST_LOGIN  
1,1,Unmi,3,2009-1-5 20:34  
2,2,Fantasia,5,2008-10-15  
3,3,隔葉黃 鶯,8,2009-1-2  
4,4,Kypfos,NULL,NULL  
5,5,不知 秋,1,2008-12-23

2) 執(zhí)行一樣的命令:

sqlldr  control=users.ctl

比如,在控制臺會顯示這樣的信息:

C:\>sqlldr control=users.ctlSQL*Loader: Release 9.2.0.1.0 - Production on 星期三 1月 7 22:26:25 2009Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.達(dá)到提交點,邏輯記錄計數(shù)4達(dá)到提交點,邏輯記錄計數(shù)5

上面的控制文 件包含的內(nèi)容比較復(fù)雜(演示目的),請根據(jù)注釋理解每個參數(shù)的意義。還能由此發(fā)掘更多用法。

關(guān)于SQL *Loader 的性能與并發(fā)操作

  1. ROWS 的默認(rèn)值為 64,你可以根據(jù)實際指定更合適的 ROWS 參數(shù)來指定每次提交記錄數(shù)。(體驗過在 PL/SQL Developer 中一次執(zhí)行幾條條以上的 insert 語句的情形嗎?)
  2. 常規(guī)導(dǎo)入可以通過使用 INSERT語句來導(dǎo)入數(shù)據(jù)。Direct導(dǎo)入可以跳過數(shù)據(jù)庫的相關(guān)邏輯(DIRECT=TRUE),而直接將數(shù)據(jù)導(dǎo)入到數(shù)據(jù)文件中,可以提高導(dǎo)入數(shù)據(jù)的 性能。當(dāng)然,在很多情況下,不能使用此參數(shù)(如果主鍵重復(fù)的話會使索引的狀態(tài)變成UNUSABLE!)。
  3. 通過指定 UNRECOVERABLE選項,可以關(guān)閉數(shù)據(jù)庫的日志(是否要 alter table table1 nologging 呢?)。這個選項只能和 direct 一起使用。
  4. 對于超大數(shù)據(jù)文件的導(dǎo)入就要用并發(fā)操作了,即同時運行多個導(dǎo)入任務(wù):
    1. sqlldr userid=/ control=result1.ctl direct=true parallel=truesqlldr userid=/ control=result2.ctl direct=true parallel=truesqlldr userid=/ control=result2.ctl direct=true parallel=true

當(dāng)加載大量數(shù)據(jù)時(大約超過10GB),最好抑制日志的產(chǎn)生:

ALTER   TABLE   RESULTXT   nologging;

這樣不產(chǎn)生REDO LOG,可以提高效率。然后在 CONTROL 文件中 load data 上面加一行:unrecoverable, 此選項必須要與DIRECT共同應(yīng)用。

在并發(fā)操作時,ORACLE聲稱可以達(dá)到每小時處理100GB數(shù)據(jù)的能力!其實,估計能到 1-10G 就算不錯了,開始可用結(jié)構(gòu) 相同的文件,但只有少量數(shù)據(jù),成功后開始加載大量數(shù)據(jù),這樣可以避免時間的浪費。

(注意:一般只能用ASCII碼形式,切記要轉(zhuǎn)換編碼,不然導(dǎo)入數(shù)據(jù)為空)

到此這篇關(guān)于關(guān)于Oracle中sqlldr的用法大全的文章就介紹到這了,更多相關(guān)Oracle的sqlldr用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Informatica bulk與normal模式的深入詳解

    Informatica bulk與normal模式的深入詳解

    本篇文章是對Informatica bulk與normal模式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • ip修改后orcale服務(wù)無法啟動問題解決

    ip修改后orcale服務(wù)無法啟動問題解決

    今天配置虛擬機中設(shè)計了下ip,使虛擬機和主機處在同一網(wǎng)段,然后使用webservice就成功了就來了,oracle連接不上了,接下來講提供詳細(xì)的解決方法
    2012-11-11
  • 詳解Oracle中sqlldr的具體用法

    詳解Oracle中sqlldr的具體用法

    這篇文章主要介紹了詳解Oracle中sqlldr的用法,SQLLDR可以在極短的時間內(nèi)加載數(shù)量龐大的數(shù)據(jù),這是一個非常有用的工具,可用于從多種平面文件格式向Oracle數(shù)據(jù)庫中加載數(shù)據(jù),需要的朋友可以參考下
    2023-07-07
  • Oracle中實現(xiàn)一次插入多條數(shù)據(jù)詳細(xì)代碼舉例

    Oracle中實現(xiàn)一次插入多條數(shù)據(jù)詳細(xì)代碼舉例

    公司的項目,有個功能每次使用需要向數(shù)據(jù)庫插入很多數(shù)據(jù),這里給大家總結(jié)下,這篇文章主要給大家介紹了Oracle中實現(xiàn)一次插入多條數(shù)據(jù)的相關(guān)資料,文中通過圖文及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • Oracle歸檔日志文件(查看、配置、刪除)

    Oracle歸檔日志文件(查看、配置、刪除)

    歸檔日志是非活動的重做日志備份.通過使用歸檔日志,可以保留所有重做歷史記錄,本文主要介紹了Oracle歸檔日志文件(查看、配置、刪除),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Oracle表空間設(shè)置和管理淺析

    Oracle表空間設(shè)置和管理淺析

    這篇文章主要給大家介紹了關(guān)于Oracle表空間設(shè)置和管理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Oracle具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Oracle學(xué)習(xí)筆記(六)

    Oracle學(xué)習(xí)筆記(六)

    最近需要用的oracle,所以大家好好的學(xué)習(xí)下基礎(chǔ)并整理下資料,希望能幫助到需要的朋友。
    2011-12-12
  • Oracle中獲取會話信息的兩個函數(shù)分享

    Oracle中獲取會話信息的兩個函數(shù)分享

    這篇文章主要介紹了Oracle中獲取會話信息的兩個函數(shù)分享,本文分別講解了USERENV和兩個函數(shù)sys_context,并對可以獲取哪些信息作了介紹,需要的朋友可以參考下
    2014-12-12
  • Oracle Number型數(shù)值存儲與轉(zhuǎn)換的實現(xiàn)詳解

    Oracle Number型數(shù)值存儲與轉(zhuǎn)換的實現(xiàn)詳解

    本篇文章是對Oracle中Number型數(shù)值存儲與轉(zhuǎn)換的實現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 安裝Oracle加載數(shù)據(jù)庫錯誤areasQueries的解決

    安裝Oracle加載數(shù)據(jù)庫錯誤areasQueries的解決

    安裝Oracle加載數(shù)據(jù)庫錯誤areasQueries的解決...
    2007-03-03

最新評論