`
destroyed
  • 浏览: 24421 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

Oracle数据库备份与恢复之二:SQL*Loader

阅读更多
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

分享到:
评论

相关推荐

    Oracle数据库备份与恢复总结

    以上是Oracle数据库备份与恢复的相关知识点总结, 包括了EXP/IMP、SQL*LOADER、OS备份/用户管理的备份与恢复以及RMAN的详细内容和技术要点。这些知识点对于确保数据库的安全性和高可用性至关重要, 希望对您有所帮助。

    oracle数据库备份与恢复总结

    ### Oracle数据库备份与恢复知识点详解 #### 一、EXP/IMP(导出与导入) **1. EXP/IMP概述** EXP/IMP是Oracle提供的用于数据导入导出的工具,适用于Oracle数据库之间的数据迁移和备份。 **2. 基本命令** - EXP...

    Oracle备份与恢复总结

    SQL*Loader是一种用于加载数据到Oracle数据库的工具。 - **命令格式:** `sqlldr userid=SYS/password@sid control=control_file.log` - **控制文件:** 定义如何将数据文件中的数据加载到数据库中。 - **数据文件...

    Oracle 数据库备份与恢复总结.pdf

    ### Oracle 数据库备份与恢复知识点总结 #### 一、EXP/IMP(导出与导入,装库与卸库) **1.1 基本命令** - **获取帮助**: 使用`expdp help=yes`或`impdp help=yes`来获取命令的帮助信息。 - **三种工作方式**: -...

    【精品】Oracle 数据库备份与恢复总结.doc

    Oracle数据库备份与恢复不仅涉及工具的使用,还需要理解备份类型(如完整备份、增量备份、差异备份)、恢复策略(如点-in-time恢复、介质恢复)以及RMAN(Recovery Manager)等高级技术。RMAN提供更全面的备份和恢复...

    Oracle数据库实验操作

    ### Oracle数据库实验操作知识点 #### 第一部分:SQL基础 ##### 基本查询语句 - **实验1:** 编写一个简单的SQL查询语句,用于查询表中的所有行和所有列。例如: ```sql SELECT * FROM 表名; ``` - **实验2:**...

    【RAC】rac数据库的备份和恢复rac数据库的备份和恢复.pdf

    - **《【RAC】rac环境下的数据库备份与还原》**:全面地讲解了RAC环境下数据库备份与恢复的各个方面。 - **《一步一步搭建11gR2rac+dg》系列**:提供了详细的步骤指南,帮助读者逐步构建和配置RAC环境。 通过以上...

    Oracle备份与恢复总结.pdf

    ### Oracle备份与恢复知识点概述 ...以上是关于Oracle备份与恢复的重要知识点概览,这些知识点涵盖了从基础命令到高级应用的各个方面,对于理解Oracle数据库的备份机制以及如何有效地进行数据保护具有重要的指导意义。

    Oracle第11章数据库管理操作.pptx

    【Oracle第11章数据库管理操作】主要涵盖了数据库管理中的关键环节,包括故障概述、备份类型、使用企业管理器(OEM)和PL/SQL进行数据库的备份与恢复,以及导入/导出操作。以下是详细的知识点说明: 1. **数据库...

    Oracle数据库系统工程师培训(内存结构、物理结构、备份和恢复、安全审计、性能调优)

    #### 三、Oracle数据库备份与恢复 备份与恢复是确保数据安全的关键步骤。 1. **备份类型**: - **完整备份**:备份整个数据库。 - **增量备份**:仅备份自上次备份以来发生变化的数据。 - **逻辑备份**:使用...

    海量数据环境下的Oracle数据库系统架构设计和优化思路

    - **待加载数据**:通过SQL\*Loader等工具批量导入数据。 - **数据备份**:定期进行数据备份,确保数据安全。 - **业务数据**:保护核心业务数据不受损失。 8. **分布式数据库架构设计中的扩展性**: - **容量*...

    windowns下利用bat命令+oracle的sqlldr功能导入数据

    1. **SQL*Loader简介**:SQL*Loader是Oracle数据库提供的一个实用程序,可以从文本文件或二进制文件中快速加载大量数据。它支持多种数据格式,并可以进行复杂的转换和验证,如日期转换、数字格式检查等。 2. **数据...

    Oracle Database 11g:数据库管理-课堂练习I .rar

    4. **备份与恢复模拟**:了解如何使用RMAN进行数据库备份,并模拟故障场景进行恢复操作。 5. **查询优化**:通过编写并比较不同查询语句的执行计划,学习如何写出高效的SQL。 此外,可能还会涉及PL/SQL编程,数据库...

    sqlloader数据导入详解

    - **错误处理**:当数据文件中的数据与目标表的结构不匹配时,SQL*Loader 可以捕获这些错误并将它们写入错误日志文件。 - **批处理**:通过设置批处理大小,可以控制每次导入的记录数量,从而优化性能。 - **并发...

    Oracle数据库备份方式

    Oracle 数据库备份方式 Oracle 数据库提供两种备份方式:备份恢复和向前滚动,保证意外故障恢复数据库的一致性和完整性。 1. 备份恢复方式 备份恢复方式是对数据库的某个一致状态建立副本,并储存在介质上脱机...

    oracle数据库导入数据以及创建用户

    - **SQL*Loader**:Oracle提供的一种强大的工具,能够快速地将大量数据从文本文件或CSV文件加载到数据库中。SQL*Loader读取控制文件,该文件定义了数据文件的格式和数据库表的映射。 - **Data Pump Import (expdp)...

    巧用策略实现Oracle数据库的迁移

    本文主要介绍了 Oracle 数据库迁移的基本知识和步骤,以及两种常用的数据库迁移方法:导入/导出工具和 SQL*Loader 工具。 首先,Oracle 数据库迁移可以从一个版本迁移到另一个版本,也可以从一个主版本迁移到另一...

Global site tag (gtag.js) - Google Analytics