目前有个这样的需求,每天晚上23点将生产库的数据备份到备份机器上,第二天备份机器的数据库可以直接使用,数据是昨天生产库的数据。(生产数据目前不多,全部数据不超过3000w条)。
由于没有接触过高深的Oracle知识,只会简单的impdp和expdp这种自带的工具,所以打算用这种自带的命令加shell脚本进行完成。
现在假设生产库ip为192.168.1.20(简称20),备份库ip为192.168.1.140(简称140)
我的设想是这样的,20机器在晚上11点进行自动备份,然后想办法将备份文件拷贝到140机器,然后140机器进行导入操作。
实现过程:
1.在140上安装nfs文件系统,将指定目录共享到20上。
2.在20上添加备份脚本使用crontab按时执行expdp语句
#!/bin/sh
ORACLE_BASE=/oracle
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/
export ORACLE_HOME
ORACLE_SID=ORCL
export ORACLE_SID
export PATH=$PATH:$ORACLE_HOME/bin
export DATA_DIR=/oracle/admin/orcl/dpdump
export LOGS_DIR=/oracle/admin/orcl/dpdump
export BAKUPTIME=`date +%Y%m%d%H`
export NLS_LANG=american_america.AL32UTF8
echo "Starting bakup..."
echo "Bakup file path /oracle/admin/orcl/dpdump/HJXD_$BAKUPTIME.dmp"
expdp HJXD/hjxd directory=DATA_PUMP_DIR dumpfile=HJXD_$BAKUPTIME.dmp schemas=HJXD
echo "Bakup completed."
echo "start delete 10 day before ."
find /oracle/admin/orcl/dpdump/ -mtime +30 -type f -name *.dmp[ab] -exec rm -f {} ;
echo "end delete 10 day before ."
3.在20上添加cron任务将备份的文件拷贝到nfs共享的目录
##!my bash
myfilepath=/oracle/admin/ORCL/dpdump/;
filename=HJXD_`date -d "1 day ago" +%Y%m%d`23.dmp;
cp /oracle/admin/orcl/dpdump/$filename $myfilepath
4.140上使用cron任务将拷贝过来的nfs共享目录下面的数据文件导入140的数据库
fullexp.log
PATH=$PATH:$HOME/bin
export PATH
ORACLE_BASE=/oracle
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/
export ORACLE_HOME
ORACLE_SID=ORCL
export ORACLE_SID
export PATH=$PATH:$ORACLE_HOME/bin
sqlplus sys/123456 as sysdba