最近由于遇到oracle控制文件的使用,虽然不是很复杂,但是从来没有用过,专门花点时间看看。点击 这里 查看详细

1,概述:

Sql Loader: 一个批量工具,将文件数据导入到数据库。可以导入一个表或者多个表,甚至可以在导入时修改数据。

2,使用

a,你电脑需要装Oracle,不然你是找不到Sqlldr 这个命令的。

在控制输入台输入 sqlldr:

会列出相关的参数介绍。

  1. > sqlldr
  2. .
  3. .
  4. .
  5. Usage: SQLLDR keyword=value [,keyword=value,...]
  6.  
  7. Valid Keywords:
  8.  
  9. userid -- ORACLE username/password
  10. control -- control file name
  11. log -- log file name
  12. bad -- bad file name
  13. data -- data file name
  14. discard -- discard file name
  15. discardmax -- number of discards to allow (Default all)
  16. skip -- number of logical records to skip (Default 0)
  17. load -- number of logical records to load (Default all)
  18. errors -- number of errors to allow (Default 50)
  19. rows -- number of rows in conventional path bind array or between direct
  20. path data saves
  21. (Default: Conventional path 64, Direct path all)
  22. bindsize -- size of conventional path bind array in bytes (Default 256000)
  23. silent -- suppress messages during run (header,feedback,errors,discards,
  24. partitions)
  25. direct -- use direct path (Default FALSE)
  26. parfile -- parameter file: name of file that contains parameter specifications
  27. parallel -- do parallel load (Default FALSE)
  28. file -- file to allocate extents from
  29. skip_unusable_indexes -- disallow/allow unusable indexes or index partitions
  30. (Default FALSE)
  31. skip_index_maintenance -- do not maintain indexes, mark affected indexes as
  32. unusable (Default FALSE)
  33. commit_discontinued -- commit loaded rows when load is discontinued (Default
  34. FALSE)
  35. readsize -- size of read buffer (Default 1048576)
  36. external_table -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE
  37. (Default NOT_USED)
  38. columnarrayrows -- number of rows for direct path column array (Default 5000)
  39. streamsize -- size of direct path stream buffer in bytes (Default 256000)
  40. multithreading -- use multithreading in direct path
  41. resumable -- enable or disable resumable for current session (Default FALSE)
  42. resumable_name -- text string to help identify resumable statement
  43. resumable_timeout -- wait time (in seconds) for RESUMABLE (Default 7200)
  44. date_cache -- size (in entries) of date conversion cache (Default 1000)
  45.  
  46. PLEASE NOTE: Command-line parameters may be specified either by position or by keywords.
  47. An example of the former case is 'sqlldr scott/tiger foo'; an example of the latter
  48. is 'sqlldr control=foo userid=scott/tiger'.One may specify parameters by position before
  49. but not after parameters specified by keywords.For example, 'sqlldr scott/tiger control=foo
  50. logfile=log' is allowed, but 'sqlldr scott/tiger control=foo log' is not, even though the
  51. position of the parameter 'log' is correct.

b, sqlldr 将文本文件的导入到数据库

这里看个简单例子。看看sqlldr到底怎么工作的。

1,准备数据文件,例如input.txt.这个文件将导入到数据库中。

首先查看我们数据库的表格式。

  1. create table student(
  2. SNAME VARCHAR(20),
  3. SAGE INTEGER,
  4. SEMAIL VARCHAR(20),
  5. SPHONE VARCHAR(20),
  6. SADDRESS VARCHAR(20)
  7. )

input.txt 文件

  1. 12,12,abc@gmail.com,12,address
  2. 13,13,abc@gmail.com,13,address
  3. 14,14,abc@gmail.com,14,address
  4. 15,15,abc@gmail.com,15,address
  5. 16,16,abc@gmail.com,16,address
  6. 17,17,abc@gmail.com,17,address
  7. 18,18,abc@gmail.com,18,address
  8. 19,19,abc@gmail.com,19,address

2,控制文件input.ctl

  1. load data
  2. infile 'input.txt'
  3. append into table student --这里用的Append.
  4. fields terminated by "," --这里表示逗号分割。
  5. (SNAME,SAGE,SEMAIL,SPHONE,SADDRESS)

这里用的Append, 追加数据,还有几个其他的参数:

a,insert,为缺省方式,在数据装载开始时要求表为空

b,append,在表中追加新记录

c ,replace,删除旧记录,替换成新装载的记录

d,truncate,同上

3,sqlldr 调用控制文件

  1. sqlldr username/password@Database control =input.ctl //input.ctl 为控制文件

在这里需要提下,这里是会生成日志文件,默认为文件名文件名+.log. 当前为 input.log

如果执行失败了,会生成bad file. 如果在当前执行中错误,会生成input.bad file。

下面指定Log 和bad 文件,当然可以加上路径

  1. sqlldr userid=username/password@database control=input.ctl log=input.log bad=input.bad SILENT=(HEADER, FEEDBACK)

SILENT=(HEADER, FEEDBACK) 控制端不显示信息,例如下面的信息将不再控制端显示。只在日志文件中

  1. Record 4: Rejected - Error on table EMP
  2. ORA-00001: unique constraint <name> violated

当然是可以显示指定的。

  1. load data
  2. infile input.txt
  3. badfile t.bad
  4. discardfile t.dsc
  5. append into table student
  6. fields terminated by ","
  7. (SNAME,SAGE,SEMAIL,SPHONE,SADDRESS)

看看日志文件:input.log

  1. SQL*Loader: Release 10.2.0.1.0 - Production on Tue May 20 17:36:52 2014
  2.  
  3. Copyright (c) 1982, 2005, Oracle. All rights reserved.
  4.  
  5. Control File: input1.ctl
  6. Data File: input1.ctl
  7. Bad File: input1.bad
  8. Discard File: none specified
  9.  
  10. (Allow all discards)
  11.  
  12. Number to load: ALL
  13. Number to skip: 0
  14. Errors allowed: 50
  15. Bind array: 64 rows, maximum of 256000 bytes
  16. Continuation: none specified
  17. Path used: Conventional
  18.  
  19. Table STUDENT, loaded from every logical record.
  20. Insert option in effect for this table: APPEND
  21.  
  22. Column Name Position Len Term Encl Datatype
  23. ------------------------------ ---------- ----- ---- ---- ---------------------
  24. SNAME FIRST * , CHARACTER
  25. SAGE NEXT * , CHARACTER
  26. SEMAIL NEXT * , CHARACTER
  27. SPHONE NEXT * , CHARACTER
  28. SADDRESS NEXT * , CHARACTER
  29.  
  30. Table STUDENT:
  31. 1 Row successfully loaded.
  32. 0 Rows not loaded due to data errors.
  33. 0 Rows not loaded because all WHEN clauses were failed.
  34. 0 Rows not loaded because all fields were null.
  35.  
  36. Space allocated for bind array: 82560 bytes(64 rows)
  37. Read buffer bytes: 1048576
  38.  
  39. Total logical records skipped: 0
  40. Total logical records read: 1
  41. Total logical records rejected: 0
  42. Total logical records discarded: 0
  43.  
  44. Run began on Tue May 20 17:36:52 2014
  45. Run ended on Tue May 20 17:36:52 2014
  46.  
  47. Elapsed time was: 00:00:00.05
  48. CPU time was: 00:00:00.04

4,查看数据库

到此一个简单的例子完成,从一个文本文件导入到数据库。

文件可以为不同格式文件,.dat,.csv都可以的。

C,sqlldr直接在控制文件中导入数据。

  1. load data
  2. infile *
  3. append into table student
  4. fields terminated by ","
  5. (SNAME,SAGE,SEMAIL,SPHONE,SADDRESS)
  6. begindata
  7. 20,20,abc@gmail.com,20,address --这里是数据

D,当文件数据是以绝对位置分开的,我们可以直接截取。当然,截取的开始与结束必须小心了。

  1. load data
  2. infile t.dat
  3. append into table student
  4. (SNAME position(01:20),
  5. SAGE position(21:23) ,
  6. SEMAIL position(41:60),
  7. SPHONE position(61:80),
  8. SADDRESS position(81:100)
  9. )

t.dat 文件

  1. Jack 12 abc@gmail.com 134998879 Singapore
  2. Jack2 12 abc@gmail.com 134998879 Singapore
  3. Jack3 12 abc@gmail.com 134998879 Singapore
  4. Jack4 12 abc@gmail.com 134998879 Singapore
  5. Jack5 12 abc@gmail.com 134998879 Singapore
  6. Jack6 12 abc@gmail.com 134998879 Singapore
  7. Jack7 12 abc@gmail.com 134998879 Singapore

还数据在Load to database 的时候,load的数据是可以改变的。

  1. LOAD DATA
  2. INFILE *
  3. INTO TABLE modified_data
  4. ( rec_no "my_db_sequence.nextval",
  5. region CONSTANT '',
  6. time_loaded "to_char(SYSDATE, 'HH24:MI')",
  7. data1 POSITION(1:5) ":data1/100",
  8. data2 POSITION(6:15) "upper(:data2)",
  9. data3 POSITION(16:22)"to_date(:data3, 'YYMMDD')"
  10. )
  11. BEGINDATA
  12. 11111AAAAAAAAAA991201
  13. 22222BBBBBBBBBB990112

可以将多个文件导入到同一个表或者多个表中

  1. load data
  2. infile t1.dat
  3. infile t2.dat
  4. infile t3.dat
  5. append into table student
  6. (SNAME position(:),
  7. SAGE position(:) ,
  8. SEMAIL position(:),
  9. SPHONE position(:),
  10. SADDRESS position(:)
  11. )

这里有很多命令的解释

这里有很多问题的回答(FAQ

简单实现几个例子,稍后有时间添加多点理论知识,再边学习边完善了。

Oracle Sql Loader的学习使用的更多相关文章

  1. [Oracle] SQL*Loader 详细使用教程(2)- 命令行参数

    sqlldr工具   SQL*Loader的客户端工具是sqlldr,在操作系统的命令行下输入sqlldr,后面不接任何参数,将显示帮助信息如下所示(所有命令行参数的简单描述及其默认值),所以你并不需 ...

  2. [Oracle] SQL*Loader 详细使用教程(3)- 控制文件

    控制文件是SQL*Loader里最重要的文件,它是一个文本文件,用来定义数据文件的位置.数据的格式.以及配置数据加载过程的行为,在sqlldr中以control参数指定控制文件.   在控制文件里配置 ...

  3. [Oracle] SQL*Loader 详细使用教程(1)- 总览

    SQL*Loader原理   SQL*Loader是Oracle提供的用于数据加载的一种工具,它比较适合业务分析类型数据库(数据仓库),能处理多种格式的平面文件,批量数据装载比传统的数据插入效率更高. ...

  4. [Oracle] SQL*Loader 详细使用教程(4)- 字段列表

    在上一篇中我们介绍了SQL*Loader中最重要的文件——控制文件,而本篇要介绍控制文件中最重要的部分——字段列表,字段列表的作用是把数据文件中的记录和数据库中表的列对应起来,下面是字段列表的一个例子 ...

  5. Oracle SQL Loader

    C:/Documents and Settings/WWJD>sqlldr SQL :: Copyright (c) , , Oracle. All rights reserved. 用法: S ...

  6. Oracle SQL*Loader commit point tips

    http://www.dba-oracle.com/t_sql_loader_commit_frequency.htm - Question:  Can I control the commit fr ...

  7. [Oracle] SQL*Loader 详细使用教程(5)- 典型例子

    本文介绍SQL*Loader在实际使用过程中经常用到的典型例子. 1. 表中的列比数据文件的列要少怎么办? 假设一个csv的文件如下: a1,a2,a3,a4 b1,b2,b3,b4 c1,c2,c3 ...

  8. Oracle SQL*Loader 数据导入工具

    SQL*Loader是一个向Orale大量倒数据的工具,可以从界定文件中导入数据如用 , 界定的,可以从定宽的文件导入数据,

  9. Oracle SQL优化进阶学习

    引言 对于下面的Oracle分页如何优化该段语句: SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM task_log order by ...

随机推荐

  1. JS开发工具WebStorm使用快捷键

    快捷键可以提高开发效率,最好用的就是这些! 代码编辑 Ctrl + d   复制整行 Ctrl + '-/+'  模块折叠 Ctrl + [ ]   括号匹配 Ctrl + F12 结构展示 Shif ...

  2. 浅谈StringBuffer

    StringBuffer,由名字可以看出,是一个String的缓冲区,也就是说一个类似于String的字符串缓冲区,和String不同的是,它可以被修改,而且是线程安全的.StringBuffer在任 ...

  3. java基础 (一)之HashMap

    HashMap的存储结构是由数组和链表共同完成.Entry<K,V>[] ,Entry是单向链表. 1 HashMap数据结构 HashMap的底层主要是基于数组和链表来实现的,它之所以有 ...

  4. Python自学:第三章 访问列表元素

    #输出并首字母大写 bicycles = ['trek','cannondale','redline','specialized'] print(bicycles[0].title()) 输出为: T ...

  5. js的Timer方法

    如显示时间: <script> //获取时间 function mytime(){ var a = new Date(); var b = a.toLocaleTimeString(); ...

  6. mongoengine 分页 切片与 skip + limit 的区别

    首先要了解切片与 skip 的原理 切片原理是将 index(索引) 或 cursor(游标)移动到 start 位置再 进行切分: skip原理是跳过start条数据后再获取 1. 单纯的普通分页用 ...

  7. IDA Pro安装教程

    1.下载 http://tools.pediy.com/windows/disassemblers.htm 我们这里选择6.8版本下载 2.安装 打开下载的安装包,解压出来进入IDAPro68文件夹, ...

  8. .net core部署到Ubuntu

    1.使用vs2017创建Asp.net Core Web应用程序,选择ubuntu中安装的.net core版本,这里选择2.1版本: 2.右键发布该项目,选择文件系统发布: 3.在ubuntu中安装 ...

  9. 【Sql】经典sql语句

    参考网页:https://www.cnblogs.com/qixuejia/p/3637735.html 1./**查询课程1比课程2,成绩高的学生学号1.分析这些元素都在一个表里,但是上下两条记录, ...

  10. Mac上svn报错解决方案

    具体的报错信息为:xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing ...