oracle自带备份数据库,利用Oracle自带的impdp和expdp进行简单备份

目前有个这样的需求,每天晚上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 <

@/oracle/admin/ORCL/dpdump/impdp.sql;

EOF

export BAKUPTIME=`date -d "a day ago" +%Y%m%d23`;

chown oracle:oinstall /oracle/admin/ORCL/dpdump/HJXD_$BAKUPTIME.dmp;

echo "Starting impdp...";

echo "impdp file path /oracle/admin/ORCL/dpdump/HJXD_$BAKUPTIME.dmp";

impdp hjxdsas/123456 directory=DATA_PUMP_DIR dumpfile=HJXD_$BAKUPTIME.dmp logfile=fullexp.log remap_schema=HJXD:hjxdsas table_exists_action=replace

impdp.sql文件

drop user hjxdsas cascade;

create user hjxdsas identified by 123456

default tablespace hjxd

temporary tablespace temp;

grant dba, create any trigger, drop any table, SELECT ANY table, SELECT ANY sequence, create user to hjxdsas identified by 123456;

grant connect, resource to hjxdsas;

grant exp_full_database,imp_full_database to hjxdsas;

第4步最开始的时候设置了oracle环境变量,原因是文件拷贝过来是通过root用户拷贝的(nfs要求两边操作的用户有相同的uid,20,140机器的oracle用户uid不一定一致,root用户缺少一致);包括在使用oracle用户进行cron任务执行也会发生一些错误,所以直接将oracle环境变量也设置给root,这样直接使用root进行数据导入。

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值