EXP/IMP 学习(五)

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;
 
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.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

   用户管理的备份与恢复也称 OS物理备份,是指通过数据库命令设置数据库为备份 状态,然后用操作系统命令,拷贝需要备份或恢复的文件。这种备份与恢复需要用户的 参与手工或自动完成。 
对于使用 OS拷贝备份的数据文件,可以使用 DBVERTIFY  进行检验。DBVERTIFY
是一个外部工具,主要用于校验数据文件或备份的数据文件的数据块是否正确。
例:dbv /u01/oradata/oracle/users01.dbf BLOCKSIZE=8192
参数说明:
关键字                    说明                        (默认)
FILE 要检验的文件 (NONE)
START 起始块 (文件的第一个块)
END 结束块 (文件的最后一个块)
BLOCKSIZE 逻辑块大小 (2048)
LOGFILE 输出日志 (NONE)
FEEDBACK 显示进程 (0)
Recover  还可以进行测试,检测恢复的错误,错误信息记载在  alert_SID.log  文件
中,通过测试,我们可以知道该恢复操作是否能正常完成。
SQL> RECOVER TABLESPACE sales TEST;
SQL> RECOVER DATABASE UNTIL CANCEL TEST;

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22664653/viewspace-666326/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22664653/viewspace-666326/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值