`
liss
  • 浏览: 848368 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Oracle数据库备份与恢复(2):SQL*Loader

阅读更多

  一、基本知识

  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 开始执行后,它就自动建立 日志文件。日志文件包含有加载的总 结,加载中的错误信息等。

  二、高级选项

  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

  三、脚本

  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

http://pcedu.pconline.com.cn/empolder/db/oracle/0906/1679028.html

分享到:
评论

相关推荐

    Oracle数据库备份与恢复总结

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

    Oracle备份与恢复总结

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

    oracle数据库备份与恢复总结

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

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

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

    Oracle数据库实验操作

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

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

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

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

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

    Oracle备份与恢复

    Oracle数据库的备份与恢复是数据库管理员必须掌握的关键技能,它涉及到数据的安全性和业务连续性。在Oracle中,备份主要是为了防止数据丢失,而恢复则是在系统出现故障或数据损坏时,能够快速恢复到正常状态的过程。...

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

    ### RAC环境下Oracle数据库的备份与恢复 #### 一、引言 在现代企业级应用环境中,Oracle Real Application Clusters (RAC) 提供了一种高效且可靠的解决方案,用于实现高性能、高可用性和可伸缩性的数据库服务。...

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

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

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

    3. **调用SQL*Loader**:在批处理文件中,我们通过`sqlldr`命令来启动SQL*Loader,其基本格式为: ``` sqlldr 用户名/密码@数据库实例 control=控制文件路径 data=数据文件路径 log=日志文件路径 bad=错误文件路径...

    Oracle备份与恢复总结.pdf

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

    oracle数据库管理员教程

    - 数据备份与恢复 3. **数据库管理工具**: - SQL*DBA:用于执行数据库管理任务的工具 - SQL*Loader:批量导入数据的工具 - Export & Import:数据迁移和备份的实用程序 4. **数据库操作**: - 日志开关:当...

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

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

    ORACLE数据库管理员教程

    学习Oracle数据库管理员教程,不仅需要掌握以上理论知识,还需要实践操作,如使用SQL*DBA、SQL*Loader、Export & Import等工具进行数据库的日常管理和维护工作。通过阅读俞盘祥的《Oracle数据库系统基础》、沈佩娟和...

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

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

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

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

    sqlloader数据导入详解

    SQL*Loader 是 Oracle 数据库下用于数据导入的一种重要工具,它由 Oracle 客户端提供。此工具支持多种数据格式,能够高效地将外部文件中的数据加载到 Oracle 数据库表中。SQL*Loader 的强大之处在于其灵活性和效率,...

    oracle 10g concepts

    - **11.5 SQL*LOADER:** SQL*Loader 是一个批量加载工具,可以将外部数据文件加载到Oracle数据库中。 - **11.6 外部表:** 外部表允许直接访问存储在文件系统中的数据,无需将其加载到数据库中。 - **11.7 LogMiner...

Global site tag (gtag.js) - Google Analytics