成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

關于Oracle中sqlldr的用法大全

瀏覽:164日期:2023-09-12 20:47:51
目錄說明用法示例:第一種:第二種:關于SQL *Loader 的性能與并發操作說明

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

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

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

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

4. 程序實現 select from A ..,然后 insert into B ...,也要分批提交

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

第 1 種方法在記錄多時是個噩夢,需三五百條的分批提交,否則客戶端會死掉,而且導入過程很慢。如果要不產生 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 中數據導入導出的各種方法,我想一定還有更高明的。下面重點講講 Oracle 的 Sql Loader (sqlldr) 的用法。

在命令行下執行 Oracle的 sqlldr 命令,可以看到它的詳細參數說明,要著重關注以下幾個參數:

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

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

1. 只使用一個控制文件,在這個控制文件中包含數據

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

第一種:

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

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

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

數據:

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'));第二種:

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

1) 建立數據文件,我們這里用 PL/SQL Developer 導出表 users 的記錄為 users_data.csv 文件,內容如下:

' ','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,內容如下:

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

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

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

3) 執行命令:

sqlldr control=users.ctl

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

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

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

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

OPTIONS (skip=1,rows=128) -- sqlldr 命令顯示的 選項可以寫到這里邊來,skip=1 用來跳過數據中的第一行 LOAD DATA INFILE * -- 因為數據同控制文件在一 起,所以用 * 表示 append -- 這里用 了 append 來操作,在表 users 中附加記錄 INTO TABLE users when LOGIN_TIMES<>'8' -- 還可以用 when 子 句選擇導入符合條件的記錄 Fields terminated by ',' trailing nullcols ( virtual_column FILLER, --跳過 由 PL/SQL Developer 生成的第一列序號 user_id 'user_seq.nextval', --這一列直接取序列的下一值,而不用數據中提供的值 user_name ''Hi '||upper(:user_name)',--,還能用SQL函數或運算對數據進行加工處理 login_times terminated by ',', NULLIF(login_times='NULL') --可為列單獨指定分隔符 last_login DATE 'YYYY-MM-DD HH24:MI:SS' NULLIF (last_login='NULL') -- 當字段為'NULL'時就是 NULL ) BEGINDATA --數據從這里開始 ,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) 執行一樣的命令:

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.達到提交點,邏輯記錄計數4達到提交點,邏輯記錄計數5

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

關于SQL *Loader 的性能與并發操作ROWS 的默認值為 64,你可以根據實際指定更合適的 ROWS 參數來指定每次提交記錄數。(體驗過在 PL/SQL Developer 中一次執行幾條條以上的 insert 語句的情形嗎?)常規導入可以通過使用 INSERT語句來導入數據。Direct導入可以跳過數據庫的相關邏輯(DIRECT=TRUE),而直接將數據導入到數據文件中,可以提高導入數據的 性能。當然,在很多情況下,不能使用此參數(如果主鍵重復的話會使索引的狀態變成UNUSABLE!)。通過指定 UNRECOVERABLE選項,可以關閉數據庫的日志(是否要 alter table table1 nologging 呢?)。這個選項只能和 direct 一起使用。對于超大數據文件的導入就要用并發操作了,即同時運行多個導入任務: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

當加載大量數據時(大約超過10GB),最好抑制日志的產生:

ALTER TABLE RESULTXT nologging;

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

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

(注意:一般只能用ASCII碼形式,切記要轉換編碼,不然導入數據為空)

到此這篇關于關于Oracle中sqlldr的用法大全的文章就介紹到這了,更多相關Oracle的sqlldr用法內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Oracle 數據庫
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲一二三专区| 国产精品一页| 先锋a资源在线看亚洲| 国产精品久久久久桃色tv| 91网站最新网址| 精品嫩草影院久久| 成人看片黄a免费看在线| 91精品国产综合久久精品app | 一本久道综合久久精品| 亚洲欧美经典视频| 国产欧美日韩亚洲| 一区二区三区在线观看欧美| 亚洲黄色成人| 尤物av一区二区| 亚洲深夜av| 亚洲一级二级三级在线免费观看| 亚洲一区二区三区免费观看| 亚洲一区欧美一区| 久久久久久久高潮| 日韩电影在线一区二区三区| 在线观看av不卡| 国产一区二区h| 精品国产一区久久| 午夜日韩av| 亚洲色图在线看| 一区二区三区三区在线| 亚洲综合一区在线| 亚洲欧美卡通另类91av| 午夜激情久久久| 欧美三级三级三级爽爽爽| 国产一区二区主播在线| 欧美大片在线观看一区二区| 欧美永久精品| 亚洲柠檬福利资源导航| 欧美综合77777色婷婷| 六月丁香婷婷久久| 欧美xxxxxxxx| 国内一区二区在线视频观看| 亚洲精品欧美专区| 久久资源在线| 国产成人在线免费| 久久免费的精品国产v∧| 日本亚洲欧美天堂免费| 欧美一区二区视频在线观看| 99re热视频这里只精品| 亚洲男人天堂av网| 在线视频中文字幕一区二区| 懂色av一区二区夜夜嗨| 国产精品色在线| 噜噜噜久久亚洲精品国产品小说| 久久99热狠狠色一区二区| 精品国产污网站| 亚洲国产高清一区| 日韩电影一区二区三区四区| 欧美日韩国产一区| 欧美 日韩 国产一区二区在线视频| 国产精品二区一区二区aⅴ污介绍| 国产偷久久久精品专区| 黄页视频在线91| 欧美经典一区二区| 久久久久在线| 成人网在线播放| 亚洲女人的天堂| 欧美日韩在线播放三区| 97se亚洲国产综合自在线| 亚洲综合在线视频| 7878成人国产在线观看| 欧美日韩视频在线一区二区观看视频 | 综合av第一页| 色久综合一二码| k8久久久一区二区三区| 一区二区三区自拍| 制服丝袜亚洲色图| 影音先锋久久精品| 激情五月激情综合网| 国产精品美女www爽爽爽| 色狠狠一区二区| 97se狠狠狠综合亚洲狠狠| 亚洲国产日韩精品| 欧美一区三区四区| 亚洲免费黄色| 国产91露脸合集magnet| 亚洲精品乱码久久久久久久久| 91麻豆精品国产91久久久资源速度| 国内精品久久久久久久影视蜜臀 | 国产成人av网站| 亚洲三级免费观看| 91精品欧美综合在线观看最新 | 精品午夜久久福利影院 | 成人综合在线网站| 一级特黄大欧美久久久| 日韩欧美的一区| 欧美一级一区| 93久久精品日日躁夜夜躁欧美| 日韩黄色免费电影| 亚洲国产精品av| 欧美调教femdomvk| 99国产精品视频免费观看一公开| 懂色av中文字幕一区二区三区| 亚洲香肠在线观看| 日韩欧美国产午夜精品| 久久久777| 欧美色图首页| 国产成人在线观看| 日韩黄色小视频| 日韩伦理av电影| 91麻豆精品国产91久久久资源速度 | 久久天堂国产精品| 欧美国内亚洲| 国内国产精品久久| 亚洲一区二区免费视频| 国产午夜久久久久| 欧美日韩二区三区| 老鸭窝毛片一区二区三区| 欧美涩涩视频| 成人福利视频网站| 久久电影网站中文字幕| 亚洲国产乱码最新视频| 亚洲国产成人午夜在线一区| 欧美人妇做爰xxxⅹ性高电影| 91蜜桃视频在线| 国产真实乱对白精彩久久| 午夜久久久久久| 亚洲欧美在线观看| 精品对白一区国产伦| 欧美日韩另类一区| 久久精品二区三区| 9国产精品视频| 欧美色图麻豆| av一二三不卡影片| 国产一区二区三区久久久| 日韩激情一区二区| 亚洲成人av在线电影| 亚洲人一二三区| 久久久99免费| 精品成人一区二区三区四区| 91精品国产综合久久婷婷香蕉 | 一本色道久久综合| 欧美日韩一卡| av在线综合网| 国v精品久久久网| 国产高清在线精品| 国模少妇一区二区三区| 日韩电影一二三区| 亚洲成国产人片在线观看| 亚洲另类中文字| 国产精品国产三级国产a| 久久久久久久久久久久电影| 日韩一区国产二区欧美三区| 欧美日韩美女一区二区| 日本韩国欧美在线| 久久久久99| 免费在线成人| 欧美中文日韩| 每日更新成人在线视频| 免费在线观看成人av| 麻豆成人小视频| 久久亚洲电影| 色婷婷久久久综合中文字幕| 噜噜爱69成人精品| 久久午夜精品| 在线观看欧美黄色| 欧美日韩视频专区在线播放| 欧美日韩一区二区在线观看 | 777午夜精品免费视频| 一本色道精品久久一区二区三区| 国产尤物精品| 激情欧美一区| 在线欧美三区| 国产一级久久| 榴莲视频成人在线观看| 久久精品官网| 日本乱人伦aⅴ精品| 欧美性受xxxx黑人xyx性爽| 欧美无人高清视频在线观看| 欧美日本一区二区三区四区| 91精品国产免费久久综合| 日韩精品一区在线| 久久久久久免费| 国产精品免费aⅴ片在线观看| 亚洲欧洲国产日韩| 亚洲一区二区三区四区的| 日韩国产欧美三级| 精品一区二区三区在线播放视频| 国产在线播放一区二区三区| 国产成人日日夜夜| 972aa.com艺术欧美| 激情综合网址| 久久九九国产| 欧美精品第1页| 欧美成人aa大片| 久久精品亚洲精品国产欧美kt∨ | 国产综合婷婷| 国产一区二区三区奇米久涩| 免费看的黄色欧美网站| 欧美丝袜第三区| 日韩精品专区在线影院重磅| 国产免费成人在线视频| 亚洲少妇中出一区| 日日夜夜一区二区|