阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

利用Oracle自带的impdp和expdp进行简单备份

160次阅读
没有评论

共计 2391 个字符,预计需要花费 6 分钟才能阅读完成。

目前有个这样的需求,每天晚上 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 <<EOF
@/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 进行数据导入。

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-05/131497.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2391字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中