WEB开发网
开发学院数据库Oracle ORCLE 数据库备份与恢复之二:SQL*Loader 阅读

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

 2008-08-28 12:45:14 来源:WEB开发网   
核心提示: 但是如果 LINESIZE 设置太大,会大大降低导出的速度,ORCLE 数据库备份与恢复之二:SQL*Loader(4),另外在 WINDOWS下导 出最好不要用 PLSQL导出,速度比较慢,我们使用 SPOOL方法,将数据库中的表导出为文本文件,直接用 COMMEND 下的 SQLPLU

但是如果 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

上一页  1 2 3 4 

Tags:ORCLE 数据库 备份

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接