shell,ant脚本实现自动数据泵(exp.expdp)导出导入数据

转自:http://blog.itpub.net/28588485/viewspace-755405/

做这么一些只为实现通过数据泵复制克隆另外一个相同数据库实例

1:在A服务器的oracle用户创建crontab指令
00 2 * * * cd /home/oracle/autoexp;sh do_auto_exp.sh

A服务器上do_auto_exp.sh文件内容:
##################################################
cd
. ~/.profile
set -x
cd /home/oracle/autoexp
sh do_autoexp_oracle.sh|tee do_autoexp_oracle.log
##################################################

A服务器上do_autoexp_oracle.sh文件内容:
##################################################
#! /usr/bin/ksh
#=====================================#
#             环境变量设置            #
#=====================================#
#导出导入方式  y:exp  n:expdp
export type_exp_imp=y
#文件主目录
export base_dir=/home/oracle/autoexp
#dmp文件目录
export dmpfile_dir=/home/oracle/autoexp/dmpfile
#设置NLS_LANG
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
#设置是否自动导出 y:是 n:否
export is_auto_exp=y
#设置是否自动导入 y:是 n:否
export is_auto_imp=y
#设置是否自动传递包y:是 n:否
export is_auto_send=y
#设置时间格式
export DF=`date +%Y%m%d_%H%M`
#待导入dmp的IP地址(用于FTP上传)
export remote_server=10.132.66.241
#设置B服务器ftp用户名
export ftp_user=oracle
#设置B服务器ftp密码
export ftp_password=241orawsx
#远程机器的命令提示符
export remote_prompt=">"
#B服务器ftp访问的目录
export mydomain_dir=/home/oracle/autoimp
#备份shell脚本
export backup_sh_name=do_backup.sh
#执行自动导入脚本
export imp_sh_name=do_imp.sh
#设置导出数据库实例名
export ORACLE_SID=devEp
#设置system密码
export pwdsystem=system
#数据库用户schemas
export sch_user01=ccare
export sch_user02=isap
export sch_user03=crmpub
export sch_user04=inventory

#=====================================#
#             备份数据                #
#=====================================#
#备份dmp,log文件
cd ${base_dir}/../
tar -zcvf backup.${DF}.tar.gz autoexp
if [ -d ${base_dir}/backup ]
then
  mv *.tar.gz ${base_dir}/backup
else
  mkdir -p ${base_dir}/backup
  mv *.tar.gz ${base_dir}/backup
fi
cd ${dmpfile_dir}
rm -rf *.dml *.log

#=====================================#
#             导出数据                #
#=====================================#
cd ${base_dir}
chmod -R 775 *.sh *.sql
if [ ${is_auto_exp} = 'y' ]
then 
  if [ -d ${dmpfile_dir} ]
  then
    echo "go on!!!"
  else
    mkdir -p ${dmpfile_dir}
  fi
  
  if [ ${type_exp_imp} = 'y' ]
  then
    exp system/${pwdsystem}@${ORACLE_SID} wner=${sch_user01} file=${dmpfile_dir}/${sch_user01}_exp.dmp log=${dmpfile_dir}/${sch_user01}_exp.log
    exp system/${pwdsystem}@${ORACLE_SID} wner=${sch_user02} file=${dmpfile_dir}/${sch_user02}_exp.dmp log=${dmpfile_dir}/${sch_user02}_exp.log
    exp system/${pwdsystem}@${ORACLE_SID} wner=${sch_user03} file=${dmpfile_dir}/${sch_user03}_exp.dmp log=${dmpfile_dir}/${sch_user03}_exp.log
    exp system/${pwdsystem}@${ORACLE_SID} wner=${sch_user04} file=${dmpfile_dir}/${sch_user04}_exp.dmp log=${dmpfile_dir}/${sch_user04}_exp.log
  else
    sqlplus system/${pwdsystem}@${ORACLE_SID} @creatDIRECTORY.sql
    expdp system/${pwdsystem}@${ORACLE_SID} DIRECTORY=dir_dp SCHEMAS=${sch_user01} DUMPFILE=${sch_user01}_expdp.dmp LOGFILE=${sch_user01}_expdp.log
    expdp system/${pwdsystem}@${ORACLE_SID} DIRECTORY=dir_dp SCHEMAS=${sch_user02} DUMPFILE=${sch_user02}_expdp.dmp LOGFILE=${sch_user02}_expdp.log
    expdp system/${pwdsystem}@${ORACLE_SID} DIRECTORY=dir_dp SCHEMAS=${sch_user03} DUMPFILE=${sch_user03}_expdp.dmp LOGFILE=${sch_user03}_expdp.log 
    expdp system/${pwdsystem}@${ORACLE_SID} DIRECTORY=dir_dp SCHEMAS=${sch_user04} DUMPFILE=${sch_user04}_expdp.dmp LOGFILE=${sch_user04}_expdp.log
  fi
fi

if [ $? != 0 ]
then
   echo "导出dmp文件失败"
   return 1
fi

tar -zcvf autoexp.${DF}.tar.gz dmpfile

if [ -d ${base_dir}/package ]
then
  mv autoexp.${DF}.tar.gz ${base_dir}/package
else
  mkdir -p ${base_dir}/package
  mv autoexp.${DF}.tar.gz ${base_dir}/package
fi

#DMP文件包名
export package_name=autoexp.${DF}.tar.gz

echo ${package_name}

#=====================================#
#             传递dmp文件             #
#=====================================#
if [ ${is_auto_send} = 'y' ]
then 
  ant -f build_auto_exp.xml auto.exp.imp
  
  if [ $? != 0 ]
  then
     echo "传递失败"
     return 1
  fi
fi

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

A服务器上creatDIRECTORY.sql文件内容:
##################################################
drop directory dir_dp;
create directory dir_dp as '/home/oracle/autoexp/dmpfile';
exit;
##################################################

A服务器上build_auto_exp.xml 文件内容:
##################################################
<?xml version="1.0" encoding="GBK"?>
<project name="ccbs deploy" default="all" basedir=".">
<property environment="env"/> 
<property name="ftp.user"        value="${env.ftp_user}"/>
<property name="ftp.password"    value="${env.ftp_password}"/>
<property name="remote.server"       value="${env.remote_server}"/>
<property name="remote.prompt"       value="${env.remote_prompt}"/>
<property name="mydomain.dir"        value="${env.mydomain_dir}"/>
<property name="package.dir"        value="${env.base_dir}/package"/>
<property name="package.name"        value="${env.package_name}"/>
<property name="backup.sh.name"        value="${env.backup_sh_name}"/>
<property name="imp.sh.name"        value="${env.imp_sh_name}"/>
    <target name="auto.exp.imp" >
        <antcall target="backup"/>
        <antcall target="senddmp"/>
        <antcall target="runimp"/>
    </target>  
    <!--备份,删除多余文件-->
    <target name="backup">   
      <echo message="${remote.server}"/>  
        <telnet userid="${ftp.user}" 
                password="${ftp.password}" 
                server="${remote.server}" 
                initialCR="no">
            <read string="${remote.prompt}"/>
            <write string="cd ${mydomain.dir}"/>
            <read string="${remote.prompt}"/>
            <write string="./${backup.sh.name}"/>
            <read string="${remote.prompt}"/>
        </telnet>
    </target>   
    <!--dmp文件的传递-->
    <target name="senddmp">
        <echo message="${remote.server}"/>
        <echo message="${ftp.user}"/>
        <echo message="${ftp.password}"/>      
        <ftp server="${remote.server}"           
             userid="${ftp.user}"
             password="${ftp.password}"
             remotedir="${mydomain.dir}"  
             action="mkdir"/>
        <ftp server="${remote.server}"           
            userid="${ftp.user}"
            password="${ftp.password}"
            remotedir="${mydomain.dir}"  
            depends="yes"
            binary="yes">
            <fileset dir="${package.dir}">             
              <include name="${package.name}"/>
            </fileset>
        </ftp>             
    </target>  
    <!--执行imp指令-->
    <target name="runimp">
        <telnet userid="${ftp.user}" 
            password="${ftp.password}" 
            server="${remote.server}">
            <read string="${remote.prompt}"/>
            <write string="cd ${mydomain.dir}"/>
            <read string="${remote.prompt}"/>
            <write string="./${imp.sh.name}"/>
            <read string="${remote.prompt}"/>
        </telnet>        
    </target>    
</project>
##################################################

B服务器上do_backup.sh文件内容:
##################################################
export base_dir=/home/oracle/autoimp

if [ -d ${base_dir}/backup ]
then
  rm -rf creatDIRECTORY.sql  dmpfile  do_autoexp_oracle.sh  do_auto_exp.sh
  mv *.tar.gz ${base_dir}/backup
else
  mkdir -p ${base_dir}/backup
  rm -rf creatDIRECTORY.sql  dmpfile  do_autoexp_oracle.sh  do_auto_exp.sh
  mv *.tar.gz ${base_dir}/backup
fi

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

B服务器上do_imp.sh文件内容:
##################################################

export base_dir=/home/oracle/autoimp
#设置导出数据库实例名
export ORACLE_SID=devEp
#设置system密码
export pwdsystem=system
#数据库用户导出schemas
export exp_user01=ccare
export exp_user02=crmpub
export exp_user03=inventory
export exp_user04=isap
#数据库用户导入schemas
export imp_user01=ccare
export imp_user02=crmpub
export imp_user03=inventory
export imp_user04=isap

cd ${base_dir}
tar -zxvf  *.tar.gz

cd ${base_dir}/dmpfile
if [ -e *_exp.dmp ]
then
  export type_exp_imp=y
else
  export type_exp_imp=n
fi

if [ ${type_exp_imp} = 'y' ]
then 
  imp system/${pwdsystem}@${ORACLE_SID} fromuser=${exp_user04} touser=${imp_user04} file=${base_dir}/dmpfile/${exp_user04}_exp.dmp log=${base_dir}/dmpfile/${exp_user04}_exp.log ignore=y commit=y buffer=262142
  imp system/${pwdsystem}@${ORACLE_SID} fromuser=${exp_user03} touser=${imp_user03} file=${base_dir}/dmpfile/${exp_user03}_exp.dmp log=${base_dir}/dmpfile/${exp_user03}_exp.log ignore=y commit=y buffer=262142
  imp system/${pwdsystem}@${ORACLE_SID} fromuser=${exp_user02} touser=${imp_user02} file=${base_dir}/dmpfile/${exp_user02}_exp.dmp log=${base_dir}/dmpfile/${exp_user02}_exp.log ignore=y commit=y buffer=262142
  imp system/${pwdsystem}@${ORACLE_SID} fromuser=${exp_user01} touser=${imp_user01} file=${base_dir}/dmpfile/${exp_user01}_exp.dmp log=${base_dir}/dmpfile/${exp_user01}_exp.log ignore=y commit=y buffer=262142
else
  export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
  sqlplus system/${pwdsystem}@${ORACLE_SID} @creatDIRECTORY.sql
  impdp system/${pwdsystem}@${ORACLE_SID} DIRECTORY=dir_dp DUMPFILE=${exp_user04}_exp.dmp SCHEMAS=${exp_user04} LOGFILE=${exp_user04}_exp.log TABLE_EXISTS_ACTION=TRUNCATE
  impdp system/${pwdsystem}@${ORACLE_SID} DIRECTORY=dir_dp DUMPFILE=${exp_user03}_exp.dmp SCHEMAS=${exp_user03} LOGFILE=${exp_user03}_exp.log TABLE_EXISTS_ACTION=TRUNCATE
  impdp system/${pwdsystem}@${ORACLE_SID} DIRECTORY=dir_dp DUMPFILE=${exp_user02}_exp.dmp SCHEMAS=${exp_user02} LOGFILE=${exp_user02}_exp.log TABLE_EXISTS_ACTION=TRUNCATE
  impdp system/${pwdsystem}@${ORACLE_SID} DIRECTORY=dir_dp DUMPFILE=${exp_user01}_exp.dmp SCHEMAS=${exp_user01} LOGFILE=${exp_user01}_exp.log TABLE_EXISTS_ACTION=TRUNCATE
fi

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

B服务器上creatDIRECTORY.sql文件内容:
##################################################
drop directory dir_dp;
create directory dir_dp as '/home/oracle/autoimp/dmpfile';
exit;
##################################################

再次修改,把所以的内容都写完了!

posted @ 2014-11-27 10:49  milkty  阅读(1173)  评论(0)    收藏  举报