数据装载--sqlldr的使用

来源:互联网 发布:软件测试说明书实例 编辑:程序博客网 时间:2024/05/17 08:47


引言
oracle自己带了很多的工具可以用来进行数据的迁移、备份和恢复等工作。但是每个工具都有自己的特点。
exp、imp:可以对数据库中的数据进行导入和导出,是一种很好的数据库备份和恢复的工具,因此主要用在数据库的热备份和恢复方面,速度快,使用简单,快捷。缺点:在不同版本的数据库之间的导入和导出,总会出现这样那样的问题, 并且只适合oracle使用。
sqlldr:可以把一些以文件格式存放的数据顺利导入到oracle数据库中,是一种在不同数据库之间进行数据迁移的非常方便且通用的工具。但其速度慢,另外对blob等类型的数据有点麻烦。
下面介绍下sqlldr的使用。

一、sqlldr的结构

sqlldr主要由sqlldr本身命令参数、装载控制文件、装载bad文件、装载log文件、装载数据文件、discard文件组成。对数据装载有以下4种方式 :
APPEND  原先的表有数据 就加在后面 
INSERT  装载空表 如果原先的表有数据 sqlloader会停止 默认值 
REPLACE  原先的表有数据 原先的数据会全部删除 
TRUNCATE 指定的内容和replace的相同 会用truncate语句删除现存数据

其结构图为:

二、sqlldr的功能
可以通过网络客户端连接到服务器,实现远程数据装载
可以在同一个session装载数据入多个表
可以在同一个session装载多个数据文件
可以指定数据字符集,从而实现不同编码的转会
可以实现对数据选择性的装载
可以通过sql函数来操作数据,实现数据操作性的装载
可以实现唯一序列转载通过制定列
装载数据可以从磁盘、磁带或者命名管道获取
完整的错误报告描述,可以方便找到出错原因
可以装载复杂的对象关系数据,如xml格式
提供多种装载方式:Append,insert,replace,truncate


三、sqlldr参数
有效的关键字:
userid --    ORACLE username/password
control -    控制文件
log -          记录的日志文件
*               表示数据文件在控制文件之后,如果是独立的数据文件,则把文件代替*
bad -         坏数据文件,记录错误的未加载数据
data -        数据文件,* data参数只能指定一个数据文件,如果控制文件也通过infile指定了数据文件,并且指定多个, 则sqlldr在执行时,先加载data参数指定的数据文件,控制文件中第一个infile指定的数据文件被忽略, 但后续的infile指定的数据文件继续有效
discard -    丢弃的数据文件,默认情况不产生,必须指定
discardmax - 允许丢弃数据的最大值        (全部默认)
skip --      跳过记录数,从数据文件中,从第一行开始要计算要跳过的行数,*,对于多表加载的情况,如果有when条件
             判断的话,或者直接路径下的多表加载,如果要加载的记录数不同,则该参数无效.
load --      给你一万行的数据,却只要求你导入10行
errors -     允许的错误记录数,超过则终止任务         (默认50)
rows --      常规路径导入时:指绑定数组中的行数;直接路径导入时,指一次从数据文件只读取的行数,该参数同时受bindsize制约,如果rows*每行实际占用大小超出bindsize最大可用值,则rows自动降低达到bindsize最大可用值(每次提交的记录数,默认: 常规路径 64, 所有直接路径)
bindsize -- 为绑定数组指定的最大可用空间,用来存贮一次读取的rows的记录,该值不能太小,至少要放入一条逻辑记录 但设置太大也没什么作用。 每次提交记录的缓冲区的大小(字节为单位,默认256000)
bind array size=(number of rows)*(sun(fixed field lengths)+sum(maximum varying field lengths)+((number of varying
                          length fields)*(size of length indicator)))
silent --    禁止输出信息 (header,feedback,errors,discards,partitions)
sqlldr scott/scott control=ldr_case9.ctl silent=header 这样就可以不输出头部信息了.
direct -     使用直通路径方式导入,不走buffer cache,通过direct path api发送数据到服务器端的加载引擎,加载引擎按照数据块的格式处理数据并直接写向数据文件,因此效率较高(默认FALSE)
parfile --   高密度的sqlldr导入,省得写参数,就建个脚本吧
parallel -- 并行导入 仅在直接路径加载时有效(默认FALSE)
file --      并行加载时会用到该参数,指定file参数,要加载的内容即只向指定的数据文件写入数据,减少i/o
skip_unusable_indexes--默认为false,如果是true,则加载完数据时,就算此表索引不可用,数据加载完不会改变此索引状态,oracle 数据库中也有此同名参数,但顺序是先看sqlldr,再数据库
skip_index_maintenance--    是否跳过索引维护,默认false,直接路径加载有效,如果设置为true,因加载完数据不维护索引,因此索引会失效.
readsize----    缓冲区大小,默认值:1048576单位字节,最大不超过20m,该参数仅当从数据文件读取时有效,如果是从近制文件读取数 据,则默认为64k
external_table: not_used:不使用外部表,通过常规路径或直接路径加载数据
                 generate_only:sqlldr并不执行加载,而是生成创建外部表的sql和处理数据的sql,并保存在log文件中,用户可
                  以修改后拿到sqlplus中执行
                 execute:执行外部表并加载数据
columnarrayrows: 指定直接路径加载时流缓冲区的行数
                -- Number of rows for direct path column array(默认5000)
streamsize :    -- Size of direct path stream buffer in bytes(默认256000)
                指定直接路径加载时流缓冲区的大小
multithreading 是否启用多线程,多cpu为true,单cpu false,直接路径加载时有效
           --   use multithreading in direct path
resumable --   会话等待空闲空间分配,在执行sqlldr时,如果余下空间不足,false参数则直接报错退出,如果设置为true,
                               则等待,让dba手动处理,达到resumable_timeout参数中指定的超时时间,再退出
                enable or disable resumable for current session(默认FALSE)
resumable_name 会话标示名,通过查询user_resumable或dba_resumable二个字典来获取信息,
               -- text string to help identify resumable statement
resumable_timeout: 会话超时,在多少时间未能执行sqlldr则退出,设置true有效
           -- wait time (in seconds) for RESUMABLE(默认7200)
date_cache --   日期转换用缓存在,用于提高转换效率.仅在直接路径加载时有用
             size (in entries) of date conversion cache(默认1000)


四、sqlldr的例子

1.要装载数据的表结构:

create table TEST
(
  userid   VARCHAR2(100),
  username VARCHAR2(100),
  email    VARCHAR2(100)
);

2.数据文件,命名为:data.txt,并将其放在D盘目录下。

文件格式如下:

a001,zhangsan,zhangsan@163.com
a002,lisi,lisi@163.com
a003,wangwu,wangwu@163.com


3.控制文件:

load data
infile 'D:\data.txt'
append
into table TEST
fields terminated by ','
trailing nullcols
(
    userid,
    username,
    email
)

4.命令:

cmd进入命令窗口,在命令窗口下,直接输入下面命令:
Sqlldr username/pwd@orcl control=d:\control.ctl

回车即可。

装载成功:

达到提交点 - 逻辑记录计数 2
达到提交点 - 逻辑记录计数 3

0 0
原创粉丝点击