ITPub博客

首页 > Linux操作系统 > Linux操作系统 > shell,ant脚本实现自动数据泵(exp.expdp)导出导入数据

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

Linux操作系统 作者:烟花丶易冷 时间:2016-04-14 17:01:30 0 删除 编辑

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

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 } wner=${sch_user01} file=${dmpfile_dir}/${sch_user01}_exp.dmp log=${dmpfile_dir}/${sch_user01}_exp.log
    exp } wner=${sch_user02} file=${dmpfile_dir}/${sch_user02}_exp.dmp log=${dmpfile_dir}/${sch_user02}_exp.log
    exp } wner=${sch_user03} file=${dmpfile_dir}/${sch_user03}_exp.dmp log=${dmpfile_dir}/${sch_user03}_exp.log
    exp } wner=${sch_user04} file=${dmpfile_dir}/${sch_user04}_exp.dmp log=${dmpfile_dir}/${sch_user04}_exp.log
  else
    sqlplus } @creatDIRECTORY.sql
    expdp } DIRECTORY=dir_dp SCHEMAS=${sch_user01} DUMPFILE=${sch_user01}_expdp.dmp LOGFILE=${sch_user01}_expdp.log
    expdp } DIRECTORY=dir_dp SCHEMAS=${sch_user02} DUMPFILE=${sch_user02}_expdp.dmp LOGFILE=${sch_user02}_expdp.log
    expdp } DIRECTORY=dir_dp SCHEMAS=${sch_user03} DUMPFILE=${sch_user03}_expdp.dmp LOGFILE=${sch_user03}_expdp.log
    expdp } 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=""        value="${env.ftp_user}"/>
<property name=""    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 } 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 } 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 } 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 } 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 } @creatDIRECTORY.sql
  impdp } DIRECTORY=dir_dp DUMPFILE=${exp_user04}_exp.dmp SCHEMAS=${exp_user04} LOGFILE=${exp_user04}_exp.log TABLE_EXISTS_ACTION=TRUNCATE
  impdp } DIRECTORY=dir_dp DUMPFILE=${exp_user03}_exp.dmp SCHEMAS=${exp_user03} LOGFILE=${exp_user03}_exp.log TABLE_EXISTS_ACTION=TRUNCATE
  impdp } DIRECTORY=dir_dp DUMPFILE=${exp_user02}_exp.dmp SCHEMAS=${exp_user02} LOGFILE=${exp_user02}_exp.log TABLE_EXISTS_ACTION=TRUNCATE
  impdp } 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;
##################################################

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

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

请登录后发表评论 登录
全部评论

注册时间:2014-04-20

  • 博文量
    135
  • 访问量
    231537