2.1 基本知识

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

    1.命令格式

SQLLDR keyword=value [,keyword=value,……]

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

    2.控制文件

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

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

comment: ——注释

例:

load data infile *

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

into table emp fields terminated b y ‘|’

no             float external, name char(20),

age           integer external,

duty         char(1),salary      float external,

upd_ts     date(14) ‘YYYYMMDDHH24MISS’)

begindata

100000000003|Mulder|000020|1|000000005000|20020101000000

100000000004|Scully|000025|2|000000008000|20020101235959

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

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

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

    3.数据文件

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

例:

100000000001|Tom|000020|1|000000005000|20020101000000

100000000002|Jerry|000025|2|000000008000|20020101235959

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

固定格式:

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

load data

infile 'example.dat' "fix 11"

into table example

fields terminated b y ',' optionally enclosed by '"'

(col1 char(5), col2 char(7)) example.dat:

001, cd, 0002,fghi,

00003,lmn,

1, "pqrs",

0005,uvwx,

可变格式:

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

load data

infile 'example.dat' "var 3"

into table example

fields terminated b y ',' optionally enclosed by '"'

(col1 char(5), col2 char(7)) example.dat:

009hello,cd,010world,im,

012my,name is,

流记录格式: // Stream-recored format:load data infile 'xx.dat' "str '|\n'"

into table xx field terminated b y ',' optionally enclosed by '"'

(col1 char(5), col2 char(7))

example.dat:

hello, ccd,|

world, bb,|

    4.  坏文件

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

    5.  日志文件及日志信息

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

2.2  高级选项

1. Conventional Path Load与Direct Path Load

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

特点:commit, 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=10000 bindsize=8192000

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

2. SPOOL导出文本数据方法

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

SQL*PLUS环境设置

SET NEWPAGE NONE HEADING OFF SPACE 0

PAGESIZE 0 SET TRIMOUT ON TRIMSPOOL ON LINESIZE 2500

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

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

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

set trimspool on

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

select col1||','||col2||','||col3||','||col4||'……' from tablename;

spool off

2.3 脚本

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

#!/bin/ksh

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

##    名称: unloadtable

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

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

##    编者:

##    日期: 2006.03.18

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

if [ $# -ne 3 ]

then echo "usage:unloadtable tablename username password."

exit 0

fi

##准备工作

echo "set heading off     " >/tmp/$1.col

echo "set pagesize 0" >>/tmp/$1.col

echo "set linesize 800    " >>/tmp/$1.col

echo "set feedback off    " >>/tmp/$1.col

echo "set tab off              " >>/tmp/$1.col

echo  "select  column_name||','  from  user_tab_columns  where  lower(table_name)='$1'  order  by

column_id; " >> /tmp/$1.col

##产生 select 语句

echo "set heading off     " >/tmp/$1.sel

echo "set pagesize 0" >>/tmp/$1.sel

echo "set linesize 800    " >>/tmp/$1.sel

echo "set feedback off    " >>/tmp/$1.sel

echo "set tab off              " >>/tmp/$1.sel

echo "select " >>/tmp/$1.sel

echo  `sqlplus  -s  $2/$3  <  /tmp/$1.col`  |sed  "s/,/||'|'||/g"  |sed  "s/||$//g"|sed  "s/date/\"date\"/g"

>>/tmp/$1.sel

##生成 dat文件

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

echo "from $1;\n" >>/tmp/$1.sel

sqlplus -s $2/$3 < /tmp/$1.sel >$1_tmp.dat

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

awk '{print $0}' $1_tmp.dat >$1.dat

rm -f $1_tmp.dat

2.  将数据导入到相应表中

#!/bin/ksh

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

##    名称:loadtable

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

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

##    编者:

##    日期: 2006.03.18

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

if [ $# -ne 3 ]

then

echo "usage:loadtable tablename username    password." exit 0 fi

##准备工作

echo "set heading off     " >/tmp/$1.colsql

echo "set pagesize 0" >>/tmp/$1.colsql

echo "set linesize 800    " >>/tmp/$1.colsql

echo "set feedback off    " >>/tmp/$1.colsql

echo "set tab off              " >>/tmp/$1.colsql

echo  "select  column_name||','  from  user_tab_columns  where  lower(table_name)='$1'  order  by

column_id; " >> /tmp/$1.colsql

##产生 ctl文件

echo "load data" >/tmp/$1.ctl

echo "infile *" >>/tmp/$1.ctl

echo "into table $1" >>/tmp/$1.ctl

echo "fields terminated by '|'" >>/tmp/$1.ctl

echo `sqlplus -s $2/$3 < /tmp/$1.colsql` |sed "s/,$/)/g" |sed "s/^/(/g" >>/tmp/$1.ctl

##开始导入数据

echo "truncate table $1;" >/tmp/$1.sql

sqlplus $2/$3 < /tmp/$1.sql

sqlldr $2/$3 data=$1.dat control=/tmp/$1.ctl log=/tmp/$1.log

转载于:https://www.cnblogs.com/login2012/p/5780499.html

Oracle【IT实验室】数据库备份与恢复之二:SQL*Loader相关推荐

  1. Oracle杀事务数据库崩溃,关于pl/sql dev窗口崩溃导致锁表

    今天在用pl/sql dev写sql的时候,刚刚写到一个select XXX from table for update,打开了锁的按钮,进行了数据修改,这个时候没有commit,因为临时有事,所以先 ...

  2. Sql Server数据库事务介绍(二)---Sql语句,SqlTransaction和TransactionScope的使用方法

    本节主要介绍Sql语句,SqlTransaction和TransactionScope这三种使用事务的方法. 本节的所有例子都在sql server 2008和vs 2008环境下运行通过,如果没有s ...

  3. Oracle 11g R2 Rman备份与恢复(二)

    目录 三.使用数据泵技术实现逻辑备份 四.使用闪回技术 4.1 闪回恢复区的含义 4.2 设置闪回数据库 4.3 闪回表

  4. phpcms数据库备份与恢复_phpcms V9 sql备份文件名爆破

    payload:/api.php?op=creatimg&txt=mochazz&font=/../../../../caches/bakup/default/gv5dmx<&l ...

  5. 【ORACLE】21版本新特性之SQL宏(SQL MACROS)的分析

    前言 在21c发布后,很多文章中都提到了SQL宏,但看到的人们大多都有个疑问,这个SQL宏看上去和一般的函数没什么区别,为什么还要重点拿出来说? 我们先看看ORACLE官方是怎么说的 https:// ...

  6. SQL*Loader使用方法nbsp;(转自一沙弥的…

    一.SQL*Loader的体系结构 SQL*Loader由一个输入控制文件来控制整个装载的相关描述信息,一个或多个数据文件作为原始数据,其详细组成结构包括 Input Datafiles      - ...

  7. SQL Loader使用方法

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow --======= ...

  8. SQL*Loader之CASE8

    CASE8 1. SQL脚本 [oracle@node3 ulcase]$ cat ulcase8.sql set termout offrem host write sys$output " ...

  9. Oracle数据库备份与恢复的三种方法

    Oracle数据库备份与恢复的三种方法 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份.导出备件是一种逻辑备份,冷备份和热备份是物理备份. 一. 导出/ ...

最新文章

  1. Captaris Workflow 6.0 EventService 执行效率低下的排除。
  2. java中对JVM的深度解析、调优工具、垃圾回收
  3. 电路原理邱关源_看高手是如何学习电路原理的,有哪些捷径?
  4. java 创建日程到期提醒_日程管理工具—Things 3
  5. 产品研发过程管理专题——基于产品的测试管理(用友软件测试流程初探)
  6. 【转】一些 SQLite技巧
  7. CF573E Bear and Bowling 贪心、分块、凸包
  8. php各安装包中TS和NTS及SRC/VC6|VC9|VC11|VC14|VC15版本区别意思详解(转)
  9. 单片机与一般微型计算机相比具有哪些特点,单片机原理与接口技术习题答案
  10. adb 命令获取ip和mac地址
  11. WiFi共享大师 去广告
  12. 小程序tabBar设置
  13. t检验比较两种算法的性能
  14. opencore amr android,苹果手机amr文件用什么打开,opencore框架进行语音
  15. 大学计算机网课怎么上,大学计算机课程学习路线应该是怎么样的呢?
  16. R语言使用cph函数和rcs函数构建限制性立方样条cox回归模型、使用rms包的Predict函数计算指定连续变量和风险比HR值的关系、可视化连续变量和风险值HR的关系
  17. Office-Tool
  18. 沈阳网赛1003 HDU 5894 hannnnah_j’s Biological Test
  19. 常州和南京计算机工资水平,南京和苏州哪一个城市工资高?六张图带你看懂江苏各市平均工资情况...
  20. SWIFT是什么意思?

热门文章

  1. 51单片机auxr寄存器_MCS-51单片机有几个工作寄存器
  2. python运行原理_Python线程池及其原理和使用(超级详细)
  3. html鼠标事件没反应,鼠标有时候点击没反应怎么解决
  4. 高中python公开课怎么上好_如何上好高中英语公开课
  5. duilib获取字符串的像素长
  6. .net 服务器自动执行,自动检测服务器使用流量并执行命令脚本
  7. 【C++grammar】文件I/O流的基本用法
  8. 使用numpy.tanh()打印矢量/矩阵元素的双曲正切值 使用Python的线性代数
  9. c# 声明类的时候初始化类_使用C#初始化的列表声明
  10. 在JavaScript中以日期/月/年格式获取当前日期