关于Oracle中SqlLoader的用法

 更新时间:2023年07月03日 10:15:59   作者:ShyTan  
这篇文章主要介绍了关于Oracle中SqlLoader的用法,sqlldr是oracle的sql*loader工具,他可以把外部的文本格式数据导入到oracle的内部表中,适用于不同数据库之间的数据转化迁移,需要的朋友可以参考下

简介:

SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件(数据)迁移到ORACLE数据库中。SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。

目前的理解就是:把文本文件,log文件,excel导入到数据库中

写sqlldr只需2步:

1:建立一个ctl控制文件 

OPTIONS (skip=1,rows=128)   #sqlldr 命令显示的 选项可以写到这里边来,skip=1 用来跳过数据中的第一行
LOAD DATA   #控制文件标识 
INFILE '/app/audit/shell/monitor/inter.txt'   #要导入的文件。目前搜索资料看到的可以是log文件,txt文本文件,excel文件
BADFILE '/app/audit/shell/monitor/inter.dat'   #BADFILE 坏数据。这里还可以使用DISCARDFILE 来指定丢弃数据的文件,
truncate   #操作类型,用 truncate table 来清除表中原有 记录 ,也可以用 insert,append,replace等代替truncate,下面会详细讲解
into table ts_of_ceshi_mid1   #往ts_of_ceshi_mid1中插入数据
Fields terminated by "|"      #用于分割一行中各个属性值的符号(例如每个属性值用逗号 分割 , 那么就把 "|" 改为 ",") 
Optionally enclosed by '"'    #数据中每个字段用 '"' 框起,比如字段中有 "," 分隔符时
TRAILING NULLCOLS #表的字段没有对应的值时允 许为空 如果不加入这行导入到数据库的时候就会自动跳过字段是null值的那一列, 这样数据插入后就会属性和值对应不上
(
orig_name,
true_name,
status,
rec_num number, #字段可以指定类型,否则认 为是 CHARACTER 类型, log 文件中有显示
last_rec_num,
last_cycle,
last_status,
finsh_date DATE "YYYY-MM-DD HH24:MI:SS"  #可以指定接受日期的格式,相当用 to_date() 函数转换
)

2:在命令窗口执行,或者在shell脚本中写

nohup sqlldr 用户名/密码@数据库名称 control=/app/audit/txt/inter.ctl log=/app/audit//txt/inter.log

nohup可以不用写,我这是挂到后台执行,所以用nohup。可以直接写:

sqlldr 用户名/密码@数据库名称 control=/app/audit/txt/inter.ctl log=/app/audit//txt/inter.log

扩展: 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:不使用外部表,通过常规路径或直接路径加载数据
enerate_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)

到此这篇关于关于Oracle中SqlLoader的用法的文章就介绍到这了,更多相关SqlLoader用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 数据库ORA-01196故障-归档日志丢失恢复详解

    数据库ORA-01196故障-归档日志丢失恢复详解

    这篇文章主要介绍了数据库ORA-01196故障-归档日志丢失恢复详解,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • 探索ORACLE之ASM概念(完整版)

    探索ORACLE之ASM概念(完整版)

    ASM是Oracle 10g R2中为了简化Oracle数据库的管理而推出来的一项新功能,这是Oracle自己提供的卷管理器,主要用于替代操作系统所提供的LVM,它不仅支持单实例,同时对RAC的支持也是非常好
    2013-11-11
  • oracle实现动态查询前一天早八点到当天早八点的数据功能示例

    oracle实现动态查询前一天早八点到当天早八点的数据功能示例

    这篇文章主要介绍了oracle实现动态查询前一天早八点到当天早八点的数据功能,涉及Oracle针对日期时间的运算与查询相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • 关于SQL执行计划错误导致临时表空间不足的问题

    关于SQL执行计划错误导致临时表空间不足的问题

    故障现象:临时表空间不足的问题已经报错过3次,客户也烦了,前两次都是同事添加5G的数据文件,目前已经达到40G,占用临时表空间主要是distinct 和group by 以及Union all 表数据量在200W左右,也不至于把40G的临时表空间撑爆。
    2013-04-04
  • Oracle更换监听端口的流程步骤

    Oracle更换监听端口的流程步骤

    本文详细介绍了如何修改Oracle数据库的监听端口,步骤包括查看监听状态、停止监听、修改listener.ora配置文件、更新local_listener参数、启动监听、检查端口开放,并涉及防火墙设置,文中通过图文讲解的非常详细,需要的朋友可以参考下
    2024-10-10
  • Oracle sysaux表空间异常增长的完美解决方法

    Oracle sysaux表空间异常增长的完美解决方法

    sysaux表空间会因为多种情况而增大,下面这篇文章主要给大家介绍了关于Oracle sysaux表空间异常增长的完美解决方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Oracle管道函数pipelined function的用法小结

    Oracle管道函数pipelined function的用法小结

    这篇文章主要介绍了Oracle管道函数pipelined function的用法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • 详解Oracle中sqlldr的具体用法

    详解Oracle中sqlldr的具体用法

    这篇文章主要介绍了详解Oracle中sqlldr的用法,SQLLDR可以在极短的时间内加载数量庞大的数据,这是一个非常有用的工具,可用于从多种平面文件格式向Oracle数据库中加载数据,需要的朋友可以参考下
    2023-07-07
  • Oracle查看逻辑读、物理读资源占用排行的SQL语句

    Oracle查看逻辑读、物理读资源占用排行的SQL语句

    这篇文章主要介绍了Oracle查看逻辑读、物理读资源占用排行的SQL语句,需要的朋友可以参考下
    2014-10-10
  • oracle 11g RAC 常用命令整理分享

    oracle 11g RAC 常用命令整理分享

    很多朋友会经常用到oracle 11g RAC的命令,今天我也用到了,同时也整理了一些常用的命令,以备不时之需
    2012-11-11

最新评论