仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1332|回复: 7
打印 上一主题 下一主题

[学习教程] MYSQL编程:Oracle SQL*Loader 利用指南(转载)

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:42:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
WindowsAzureSQLDatabase并不支持数据压缩和表分区之类的功能,而且SQLDatabase支持的Transact-SQL语言只是完整版的一部分。另外,因为解决方案提供商不能控制物理资源,所以他们不能将数据文件和索引分配给特定的硬件。oracleSQL*Loader是Oracle数据库导进内部数据的一个工具.它和DB2的Load工具类似,但有更多的选择,它撑持变更的加载形式,可选的加载及多表加载.


怎样利用SQL*Loader工具
我们能够用Oracle的sqlldr工具来导进数据。比方:
sqlldrscott/tigercontrol=loader.ctl
把持文件(loader.ctl)将加载一个内部数据文件(含分开符).loader.ctl以下:
loaddata
infilec:datamydata.csv
intotableemp
fieldsterminatedby","optionallyenclosedby"
(empno,empname,sal,deptno)

mydata.csv以下:
10001,"ScottTiger",1000,40
10002,"FrankNaude",500,20
上面是一个指定纪录长度的示例把持文件。"*"代表数据文件与此文件同名,即在前面利用BEGINDATA段来标识数据。
loaddata
infile*
replace
intotabledepartments
(deptposition(02:05)char(4),
deptnameposition(08:27)char(20)
)
begindata
COSCCOMPUTERSCIENCE
ENGLENGLISHLITERATURE
MATHMATHEMATICS
POLYPOLITICALSCIENCE
Unloader如许的工具
Oracle没有供应将数据导出到一个文件的工具。可是,我们能够用SQL*Plus的select及format数据来输入到一个文件:
setechooffnewpage0space0pagesize0feedoffheadofftrimspoolon
spooloradata.txt
selectcol1||,||col2||,||col3
fromtab1
wherecol2=XYZ;
spooloff

别的,也能够利用利用UTL_FILEPL/SQL包处置:
remRemembertoupdateinitSID.ora,utl_file_dir=c:oradataparameter
declare
fputl_file.file_type;
begin
fp:=utl_file.fopen(c:oradata,tab1.txt,w);
utl_file.putf(fp,%s,%s
,TextField,55);
utl_file.fclose(fp);
end;
/

固然你也能够利用第三方工具,如SQLWays,TOADforQuest等。

加载可变长度或指定长度的纪录
如:
LOADDATA
INFILE*
INTOTABLEload_delimited_data
FIELDSTERMINATEDBY","OPTIONALLYENCLOSEDBY"
TRAILINGNULLCOLS
(data1,
data2
)
BEGINDATA
11111,AAAAAAAAAA
22222,"A,B,C,D,"

上面是导进流动地位(流动长度)数据示例:
LOADDATA
INFILE*
INTOTABLEload_positional_data
(data1POSITION(1:5),
data2POSITION(6:15)
)
BEGINDATA
11111AAAAAAAAAA
22222BBBBBBBBBB

跳过数据行:
能够用"SKIPn"关头字来指定导进时能够跳过量少行数据。如:
LOADDATA
INFILE*
INTOTABLEload_positional_data
SKIP5
(data1POSITION(1:5),
data2POSITION(6:15)
)
BEGINDATA
11111AAAAAAAAAA
22222BBBBBBBBBB

导进数据时修正数据:
在导进数据到数据库时,能够修正数据。注重,这仅合适于惯例导进,其实不合适direct导进体例.如:
LOADDATA
INFILE*
INTOTABLEmodified_data
(rec_no"my_db_sequence.nextval",
regionCONSTANT31,
time_loaded"to_char(SYSDATE,HH24:MI)",
data1POSITION(1:5)":data1/100",
data2POSITION(6:15)"upper(:data2)",
data3POSITION(16:22)"to_date(:data3,YYMMDD)"
)
BEGINDATA
11111AAAAAAAAAA991201
22222BBBBBBBBBB990112

LOADDATA
INFILEmail_orders.txt
BADFILEbad_orders.txt
APPEND
INTOTABLEmailing_list
FIELDSTERMINATEDBY","
(addr,
city,
state,
zipcode,
mailing_addr"decode(:mailing_addr,null,:addr,:mailing_addr)",
mailing_city"decode(:mailing_city,null,:city,:mailing_city)",
mailing_state
)

将数据导进多个表:
如:
LOADDATA
INFILE*
REPLACE
INTOTABLEemp
WHENempno!=
(empnoPOSITION(1:4)INTEGEREXTERNAL,
enamePOSITION(6:15)CHAR,
deptnoPOSITION(17:18)CHAR,
mgrPOSITION(20:23)INTEGEREXTERNAL
)
INTOTABLEproj
WHENprojno!=
(projnoPOSITION(25:27)INTEGEREXTERNAL,
empnoPOSITION(1:4)INTEGEREXTERNAL
)

导当选定的纪录:
以下例:(01)代表第一个字符,(30:37)代表30到37之间的字符:
LOADDATA
INFILEmydata.datBADFILEmydata.badDISCARDFILEmydata.dis
APPEND
INTOTABLEmy_selective_table
WHEN(01)Hand(01)Tand(30:37)=19991217
(
regionCONSTANT31,
service_keyPOSITION(01:11)INTEGEREXTERNAL,
call_b_noPOSITION(12:29)CHAR
)

导进时跳过某些字段:
可用POSTION(x:y)来分开数据.在Oracle8i中能够经由过程指定FILLER字段完成。FILLER字段用来跳过、疏忽导进数据文件中的字段.如:
LOADDATA
TRUNCATEINTOTABLET1
FIELDSTERMINATEDBY,
(field1,
field2FILLER,
field3
)

导进多行纪录:
可使用上面两个选项之一来完成将多行数据导进为一个纪录:

CONCATENATE:-usewhenSQL*Loadershouldcombinethesamenumberofphysicalrecordstogethertoformonelogicalrecord.

CONTINUEIF-useifaconditionindicatesthatmultiplerecordsshouldbetreatedasone.Eg.byhavinga#characterincolumn1.

SQL*Loader数据的提交:
一样平常情形下是在导进数据文件数据后提交的。
也能够经由过程指定ROWS=参数来指定每次提交纪录数。

进步SQL*Loader的功能:
1)一个复杂而简单疏忽的成绩是,没有对导进的表利用任何索引和/或束缚(主键)。假如如许做,乃至在利用ROWS=参数时,会很分明下降数据库导进功能。
2)能够增加DIRECT=TRUE来进步导进数据的功能。固然,在良多情形下,不克不及利用此参数。
3)经由过程指定UNRECOVERABLE选项,能够封闭数据库的日记。这个选项只能和direct一同利用。
4)能够同时运转多个导进义务.

惯例导进与direct导进体例的区分:
惯例导进能够经由过程利用INSERT语句来导进数据。Direct导进能够跳过数据库的相干逻辑(DIRECT=TRUE),而间接将数据导进到数据文件中。


即使对于MySQL的商业化的企业版来说,也没有高昂的许可证成本,当你将其与像甲骨文和微软之类的大型专有商业数据库比较的话。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-19 21:19:32 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
活着的死人 该用户已被删除
板凳
发表于 2015-1-28 11:27:28 | 只看该作者
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
深爱那片海 该用户已被删除
地板
发表于 2015-2-5 21:15:18 | 只看该作者
代替了原来VB式的错误判断。比Oracle高级不少。
透明 该用户已被删除
5#
发表于 2015-3-3 23:53:26 | 只看该作者
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
冷月葬花魂 该用户已被删除
6#
发表于 2015-3-11 14:47:18 | 只看该作者
原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
小魔女 该用户已被删除
7#
发表于 2015-3-19 00:22:40 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
海妖 该用户已被删除
8#
发表于 2015-3-26 22:16:56 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表