服务器

sql loader的用法
作者 网络 佚名 2006年02月27日 00:00

  【IT168 服务器学院】sql loader可以把一些以文本格式存放的数据顺利的导入到oracle数据库中,是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具。缺点就速度比较慢,另外对blob等类型的数据就有点麻烦了。
  
  用法: SQLLDR keyword=value [,keyword=value,...]

  有效的关键字:
  userid -- ORACLE username/password
  control – 控制文件
  log – 记录的日志文件
  bad – 坏数据文件
  data – 数据文件
  discard – 丢弃的数据文件
  discardmax – 允许丢弃数据的最大值        (全部默认)
  skip -- Number of logical records to skip  (默认0)
  load -- Number of logical records to load  (全部默认)
  errors – 允许的错误记录数          (默认50)
  rows -- Number of rows in conventional path bind array or between direct path data saves
  (每次提交的记录数,默认: 常规路径 64, 所有直接路径)
  bindsize -- Size of conventional path bind array in bytes(默认256000)
  每次提交记录的缓冲区的大小(字节为单位,默认256000)
  silent --禁止输出信息 (header,feedback,errors,discards,partitions)
  direct – 使用直通路径方式导入                    (默认FALSE)
  parfile -- parameter file: name of file that contains parameter specifications
  parallel -- 并行导入                   (默认FALSE)
  file -- File to allocate extents from
  与bindsize成对使用,其中较小者会自动调整到较大者
  sqlldr先计算单条记录长度,乘以rows,如小于bindsize,不会试图扩张rows以填充bindsize;如超出,则以bindsize为准。

  external_table
   -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE(默认NOT_USED)
  columnarrayrows
   -- Number of rows for direct path column array(默认5000)
  streamsize -- Size of direct path stream buffer in bytes(默认256000)
  multithreading
   -- use multithreading in direct path
  resumable -- enable or disable resumable for current session(默认FALSE)
  resumable_name
   -- text string to help identify resumable statement
  resumable_timeout
   -- wait time (in seconds) for RESUMABLE(默认7200)
  date_cache -- size (in entries) of date conversion cache(默认1000)

  注意:有两种方式可以指定命令行参数:通过位置或者通过关键字。前者的例子:''sqlldr scott/tiger foo'';
  后者的例子:''sqlldr control=foo userid=scott/tiger'';
  不能前面使用关键字指定后面通过位置制定的混合方式;
  比如:''sqlldr scott/tiger control=foo logfile=log'' 是允许的,
  但''sqlldr scott/tiger control=foo log''不允许。
  为清楚起见最好所有命令行参数都用关键字指定。
  控制文件:
  一个控制命令的脚本文件,通常以ctl结尾,内容如下:
  LOAD DATA
  INFILE ''t.dat''              要导入的文件
  // INFILE ''tt.date'' 导入多个文件
  // INFILE *               表示要导入的内容就在control文件里 下面的BEGINDATA后面就是导入的内容

  INTO TABLE table_name    指定装入的表
  BADFILE ''c:\bad.txt''    可选,指定坏文件地址,缺省在当前目录下生成与原文件名一致的.bad文件

  ************* 以下是4种装入表的方式
  APPEND             原先的表有数据 就加在后面
  INSERT             装载空表 如果原先的表有数据 sqlloader会停止 默认值
  REPLACE           原先的表有数据 原先的数据会全部删除
  TRUNCATE        指定的内容和replace的相同 会用truncate语句删除现存数据

  ************* 指定分隔符
  FIELDS TERMINATED BY '','' OPTIONALLY ENCLOSED BY ''"''
  // TERMINATED BY WRITESPACE 以空白分割

  TRAILING NULLCOLS            表的字段没有对应的值时允许为空

  ************* 下面是表的字段
  (
  col_1 , col_2 ,col_filler FILLER // FILLER 关键字 此列的数值不会被装载
  // 如: lg,lg,not 结果 lg lg
  )
  如果没声明FIELDS TERMINATED BY '','' 时,可以用下面两种方式实现同样功能:
  1.为每一列指定分隔符
  (
  col_1 [interger external] TERMINATED BY '','' ,
  col_2 [date "dd-mon-yyy"] TERMINATED BY '','' ,
  col_3 [char] TERMINATED BY '','' OPTIONALLY ENCLOSED BY ''lg''
  )
  2.用位置告诉字段装载数据
  (
  col_1 position(1:2),
  col_2 position(3:10),
  col_3 position(*:16), // 这个字段的开始位置在前一字段的结束位置
  col_4 position(1:16),
  col_5 position(3:10) char(8) // 指定字段的类型
  )

  BEGINDATA         对应开始的 INFILE * 要导入的内容就在control文件里
  10,Sql,what
  20,lg,show

   

打开APP阅读全文
{{data.thematic.text}}

相关文章

加载中...

分享到

请使用浏览器的分享功能
分享到微信等