shell,ant指令碼實現自動資料泵(exp.expdp)匯出匯入資料

煙花丶易冷發表於2016-04-14

做這麼一些只為實現透過資料泵複製克隆另外一個相同資料庫例項

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章