电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:97日期:2023-09-12 20:47:51
目錄說(shuō)明用法示例:第一種:第二種:關(guān)于SQL *Loader 的性能與并發(fā)操作說(shuō)明

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

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

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

3. exp A表,再 imp 到 B 表,exp 時(shí)可加查詢(xún)條件

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

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

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

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

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

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

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

用例子來(lái)演示 sqlldr 的使用,有兩種使用方法:

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

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

第一種:

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

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

create table users( user_id number, --用戶(hù) ID user_name varchar2(50), --用戶(hù)名 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'));第二種:

使用一個(gè)控制文件(作為模板) 和一個(gè)數(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) 建立一個(gè)控制文件 users.ctl,內(nèi)容如下:

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

說(shuō)明:在操作類(lèi)型 truncate 位置可用以下中的一值:

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

3) 執(zhí)行命令:

sqlldr control=users.ctl

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

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

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

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

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

比如,在控制臺(tái)會(huì)顯示這樣的信息:

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á)到提交點(diǎn),邏輯記錄計(jì)數(shù)4達(dá)到提交點(diǎn),邏輯記錄計(jì)數(shù)5

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

關(guān)于SQL *Loader 的性能與并發(fā)操作ROWS 的默認(rèn)值為 64,你可以根據(jù)實(shí)際指定更合適的 ROWS 參數(shù)來(lái)指定每次提交記錄數(shù)。(體驗(yàn)過(guò)在 PL/SQL Developer 中一次執(zhí)行幾條條以上的 insert 語(yǔ)句的情形嗎?)常規(guī)導(dǎo)入可以通過(guò)使用 INSERT語(yǔ)句來(lái)導(dǎo)入數(shù)據(jù)。Direct導(dǎo)入可以跳過(guò)數(shù)據(jù)庫(kù)的相關(guān)邏輯(DIRECT=TRUE),而直接將數(shù)據(jù)導(dǎo)入到數(shù)據(jù)文件中,可以提高導(dǎo)入數(shù)據(jù)的 性能。當(dāng)然,在很多情況下,不能使用此參數(shù)(如果主鍵重復(fù)的話會(huì)使索引的狀態(tài)變成UNUSABLE!)。通過(guò)指定 UNRECOVERABLE選項(xiàng),可以關(guān)閉數(shù)據(jù)庫(kù)的日志(是否要 alter table table1 nologging 呢?)。這個(gè)選項(xiàng)只能和 direct 一起使用。對(duì)于超大數(shù)據(jù)文件的導(dǎo)入就要用并發(fā)操作了,即同時(shí)運(yùn)行多個(gè)導(dǎo)入任務(wù):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ù)時(shí)(大約超過(guò)10GB),最好抑制日志的產(chǎn)生:

ALTER TABLE RESULTXT nologging;

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

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

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

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

主站蜘蛛池模板: 金属波纹补偿器厂家_不锈钢膨胀节价格_非金属伸缩节定制-庆达补偿器 | 废气处理设备-工业除尘器-RTO-RCO-蓄热式焚烧炉厂家-江苏天达环保设备有限公司 | CCE素质教育博览会 | CCE素博会 | 教育展 | 美育展 | 科教展 | 素质教育展 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | hdpe土工膜-防渗膜-复合土工膜-长丝土工布价格-厂家直销「恒阳新材料」-山东恒阳新材料有限公司 ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 全温恒温摇床-水浴气浴恒温摇床-光照恒温培养摇床-常州金坛精达仪器制造有限公司 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 小型玉石雕刻机_家用玉雕机_小型万能雕刻机_凡刻雕刻机官网 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 蜜蜂职场文库_职场求职面试实用的范文资料大全 | 干洗店加盟_洗衣店加盟_干洗店设备-伊蔻干洗「武汉总部」 | 拖鞋定制厂家-品牌拖鞋代加工厂-振扬实业中国高端拖鞋大型制造商 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 半自动预灌装机,卡式瓶灌装机,注射器灌装机,给药器灌装机,大输液灌装机,西林瓶灌装机-长沙一星制药机械有限公司 | 茅茅虫AI论文写作助手-免费AIGC论文查重_写毕业论文降重 | 广域铭岛Geega(际嘉)工业互联网平台-以数字科技引领行业跃迁 | 检验科改造施工_DSA手术室净化_导管室装修_成都特殊科室建设厂家_医疗净化工程公司_四川华锐 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 铁盒_铁罐_马口铁盒_马口铁罐_铁盒生产厂家-广州博新制罐 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 发光字|标识设计|标牌制作|精神堡垒 - 江苏苏通广告有限公司 | 下水道疏通_管道疏通_马桶疏通_附近疏通电话- 立刻通 | 柴油机_柴油发电机_厂家_品牌-江苏卡得城仕发动机有限公司 | 数显恒温油浴-电砂浴-高温油浴振荡器-常州迈科诺仪器有限公司 | 2-羟基泽兰内酯-乙酰蒲公英萜醇-甘草查尔酮A-上海纯优生物科技有限公司 | 橡胶接头|可曲挠橡胶接头|橡胶软接头安装使用教程-上海松夏官方网站 | 电表箱-浙江迈峰电力设备有限公司-电表箱专业制造商 | 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 | 制氮设备-变压吸附制氮设备-制氧设备-杭州聚贤气体设备制造有限公司 | 沥青车辙成型机-车托式混凝土取芯机-混凝土塑料试模|鑫高仪器 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | 提升海外网站流量,增加国外网站访客UV,定制海外IP-访客王 | 实验室装修_实验室设计_实验室规划设计- 上海广建净化工程公司 | 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 高压油管,液压接头,液压附件-烟台市正诚液压附件 | pbt头梳丝_牙刷丝_尼龙毛刷丝_PP塑料纤维合成毛丝定制厂_广州明旺 |