知识大全 SQL*Loader

Posted 文件

篇首语:上下观古今,起伏千万途。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 SQL*Loader相关的知识,希望对你有一定的参考价值。

Oracle数据库备份与恢复之二:SQL*Loader  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   基本知识

  Oracle 的  SQL* LOADER  可以将外部格式化的文本数据加载到数据库表中 通常 与 SPOOL导出文本数据方法配合使用

   命令格式

  SQLLDR keyword=value [ keyword=value ……]

  例 $ sqlldr user/pwd control=emp ctl data=emp dat bad=emp bad log=emp log

   控制文件

  SQL*LOADER  根据控制文件可以找到需要加载的数据 并且分析和解释这些数据

  控制文件由三个部分组成 具体参数参考帮助文档   全局选件 行 跳过的记录数等 INFILE 子句指定的输入数据   数据特性说明

  ment ——注释

  例

  load data infile *

  append    ——除了 append外 还有 insert replace truncate等方式

  into table emp fields terminated b y |

  (

  no             float external name char( )

  age           integer external

  duty         char( ) salary      float external

  upd_ts     date( ) YYYYMMDDHH MISS )

  begindata

   |Mulder| | | |

   |Scully| | | |

  控制文件中infile选项跟sqlldr 命令行中data 选项含义相同 如使用infile *则表明数据在本控制文件以 begin data 开头的区域内 一些选项 FIELDS TERMINATED BY WHITESPACE FIELDS TERMINATED BY x FILLER_ FILLER //  指定某一列将不会被装载

  DEPTNO position( ) DNAME position(* ) //  指定列的位置SEQNO RECNUM //载入每行的行号

  SKIP n          //  指定导入时可以跳过多少行数据

   数据文件

  按控制文件数据格式定义的数据行集

  例

   |Tom| | | |

   |Jerry| | | |

  固定格式 可变格式 流记录格式

  固定格式

  当数据固定的格式(长度一样)时且是在文件中得到时 要用 INFILE fix n

  load data

  infile example dat fix

  into table example

  fields terminated b y optionally enclosed by

  (col char( ) col char( )) example dat

   cd fghi

   lmn

   pqrs

   uvwx

  可变格式

  当数据是可变格式(长度不一样)时且是在文件中得到时 要用 INFILE var n 如

  load data

  infile example dat var

  into table example

  fields terminated b y optionally enclosed by

  (col char( ) col char( )) example dat

   hello cd world im

   my name is

  流记录格式 // Stream recored format load data infile xx dat str |\\n

  into table xx field terminated b y optionally enclosed by

  (col char( ) col char( ))

  example dat

  hello ccd |

  world bb |

     坏文件

  bad=emp bad坏文件包含那些被 SQL*Loader拒绝的记录 被拒绝的记录可能是不符合要求的记录

     日志文件及日志信息

  log=emp log当 SQL*Loader  开始执行后 它就自动建立  日志文件 日志文件包含有加载的总 结 加载中的错误信息等

  

     高级选项

   Conventional Path Load与Direct Path Load

  Conventional path Load 通过常规通道方式上载

  特点 mit always  gen redo logs   enforce all constraints fire insert triggers can load into cluster other user can make change

  rows 每次提交的记录数

  bindsize 每次提交记录的缓冲区

  readsize 与 bindsize 成对使用 其中较小者会自动调整到较大者

  sqlldr 先计算单条记录长度 乘以 rows 如小于 bindsize 不会试图扩张 rows以填充 bindsize 如超出 则以 bindsize 为准 命令为

  $ sqlldr dbuser/oracle control=emp ctl log=emp log rows= bindsize=

  Direct Path Load

  通过直通方式上载 可以跳过数据库的相关逻辑 不进行  SQL解析 而直接将数 据导入到数据文件中

  特点 save conditionly gen redo logs enforce PK UK NN not fire triggers can not load into cluster other user can not make change命令为

  $ sqlldr dbuser/oracle control=emp ctl log=emp log direct=true

   SPOOL导出文本数据方法

  导入的数据文件可以用 SPOOL导出文本数据方法生成

  SQL*PLUS环境设置

  SET NEWPAGE NONE HEADING OFF SPACE

  PAGESIZE SET TRIMOUT ON TRIMSPOOL ON LINESIZE

  注 LINESIZE 要稍微设置大些 免得数据被截断 它应和相应的 TRIMSPOOL结合使用防止导出的文本有太多的尾部空格

  但是如果 LINESIZE 设置太大 会大大降低导出的速度 另外在 WINDOWS下导 出最好不要用 PLSQL导出 速度比较慢 直接用  MEND 下的 SQLPLUS命令最 小化窗口执行 对于字段内包含很多回车换行符的应该给与过滤 形成比较规矩的文本 文件

  通常情况下 我们使用 SPOOL方法 将数据库中的表导出为文本文件 如下述

  set trimspool on

  set linesize pagesize newpage heading off    term off spool  路径+文件名

  select col || ||col || ||col || ||col || …… from tablename

  spool off

  

   脚本

     将表中数据记录导出为字段值用分隔符 | 分开的 dat文件

  #!/bin/ksh

  ##################################################################

  ##    名称 unloadtable

  ##    功能   本 shell 用于将表中数据记录导出

  ##                 导出为字段值用分隔符 | 分开的 dat文件

  ##    编者

  ##    日期

  ##################################################################

  if [ $# ne ]

  then echo usage unloadtable tablename username password

  exit

  fi

  ##准备工作

  echo set heading off     >/tmp/$l

  echo set pagesize >>/tmp/$l

  echo set linesize     >>/tmp/$l

  echo set feedback off    >>/tmp/$l

  echo set tab off              >>/tmp/$l

  echo  select  column_name||   from  user_tab_columns  where  lower(table_name)= $   order  by

  column_id >> /tmp/$l

  ##产生 select 语句

  echo set heading off     >/tmp/$ sel

  echo set pagesize >>/tmp/$ sel

  echo set linesize     >>/tmp/$ sel

  echo set feedback off    >>/tmp/$ sel

  echo set tab off              >>/tmp/$ sel

  echo select >>/tmp/$ sel

  echo  `sqlplus  s  $ /$   <  /tmp/$l`  |sed  s/ /|| | ||/g   |sed  s/||$//g |sed  s/date/\\ date\\ /g

  >>/tmp/$ sel

  ##生成 dat文件

  #echo from $ \\n/ >>/tmp/$ sel    由于  /  导致多执行一次 select

  echo from $ \\n >>/tmp/$ sel

  sqlplus s $ /$ < /tmp/$ sel >$ _tmp dat

  #awk if(FNR!= ) print $ $ _tmp dat >$ dat       FNR 选项使得第一条记录选不出

  awk print $ $ _tmp dat >$ dat

  rm f $ _tmp dat

     将数据导入到相应表中

  #!/bin/ksh

  ##################################################################

  ##    名称 loadtable

  ##    功能 本 shell 用于将已经准备好的 dat数据文件导入相应的表中

  ##               dat 文件各个字段值用分隔符 | 分开

  ##    编者

  ##    日期

  ##################################################################

  if [ $# ne ]

  then

  echo usage loadtable tablename username    password exit fi

  ##准备工作

  echo set heading off     >/tmp/$lsql

  echo set pagesize >>/tmp/$lsql

  echo set linesize     >>/tmp/$lsql

  echo set feedback off    >>/tmp/$lsql

  echo set tab off              >>/tmp/$lsql

  echo  select  column_name||   from  user_tab_columns  where  lower(table_name)= $   order  by

  column_id >> /tmp/$lsql

  ##产生 ctl文件

  echo load data >/tmp/$ ctl

  echo infile * >>/tmp/$ ctl

  echo into table $ >>/tmp/$ ctl

  echo fields terminated by | >>/tmp/$ ctl

  echo `sqlplus s $ /$ < /tmp/$lsql` |sed s/ $/)/g |sed s/^/(/g >>/tmp/$ ctl

  ##开始导入数据

  echo truncate table $ >/tmp/$ sql

  sqlplus $ /$ < /tmp/$ sql

cha138/Article/program/Oracle/201311/17312

相关参考

知识大全 使用 SQL*Loader 向 Oracle 导入数据

使用SQL*Loader向Oracle导入数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使

知识大全 使用SQL Server*Loader进行数据导入

使用SQLServer*Loader进行数据导入  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Oracle数据库专享工具:SQL*Loader

Oracle数据库专享工具:SQL*Loader  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!SQ

知识大全 SQL&Loader可把文件中的数据装载到OR

SQL&Loader可把文件中的数据装载到OR  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  S

知识大全 利用SQL*Loader将 Excel 数据导出到 Oracle 数据库中

利用SQL*Loader将Excel数据导出到Oracle数据库中  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一

知识大全 命令行参数

SQL*Loader详细使用教程:命令行参数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  输入

知识大全 简述数据库导入OracleSQL*Loader指南

简述数据库导入OracleSQL*Loader指南  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 oracle 使用杂记二

  下面的是关于sql*loader的使用的一点总结有些是来自itpub上的一些网友的总结    大部分是oracle专家高级编程上的实例只是我实践以后写的结果    sqlldruserid=lgo

知识大全 os loader引导多系统实战

  ○预备知识  osloader引导基本原理把来自其他操作系统的启动扇区信息变成一个文件大小一般是字节在启动osloader的时候它读入该文件并启动选择的操作系统根据上述原理要引导多系统关键是获得相

知识大全 SQL Server 管理常用的SQL和T-SQL

SQLServer管理常用的SQL和T-SQL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  S