将Oracle数据库数据每天备份恢复一次数据到另一台服务器上两份数据
1、创建用户,授权,创建测试数据
创建用户
CREATE USER test identified by 123;
授权
grant dba to test;
创建测试数据
create table a(id int);
insert into a select 1 from dual connect by level<=50;
2、创建备份目录
create directory UserName_dir as '/home/oracle/oradb';
grant read,write on directory UserName_dir to test;
3、导出数据并获取当日时间并推送到另一台服务器上
排除需要导出的表:exclude=table:"in('SZSY','JBXX_H','MENT')",表名必须大写
[oracle@server80 script]$ cat ora_exp_backup.sh
#!/bin/bash datadir=/home/oracle/oradb
mydmp=/home/oracle/oradb/exp_test_$(date +%Y%m%d).dmp if [ -f "$mydmp" ];then
rm -rf $mydmp
fi cat << EOF > /home/oracle/script/exp_test.par
dumpfile=exp_test_$(date +%Y%m%d).dmp
logfile=exp_test_$(date +%Y%m%d).log
directory=UserName_dir
SCHEMAS=TEST
EOF expdp \' / as sysdba \' parfile=/home/oracle/script/exp_test.par
#获取备份日志关键字“sucessfully”
ora_backup_info=$(cat /home/oracle/oradb/exp_test_$(date +%Y%m%d).log|tail -n 1|awk '{print $3}') if [ $ora_backup_info = 'successfully' ];then
cd $datadir && tar -zcf exp_test_$(date +%Y%m%d).tar.gz exp_test_$(date +%Y%m%d).dmp
rsync -avz $datadir/exp_test_$(date +%Y%m%d).tar.gz root@localhost:/home/oracle/
if [ $? = '0' ];then
echo "1" > /tmp/ora_backup_status.log
rsync -avz /tmp/ora_backup_status.log root@localhost:/home/oracle/oradb
if [ $? = '0' ];then
cd $datadir && rm -rf exp_test_$(date +%Y%m%d)*
fi
else
echo "数据备份成功,发送失败" > /tmp/ora_backup_status.log
fi
else
echo "数据备份失败" > /tmp/ora_backup_status.log
fi
4、校验数据并导入到新服务器数据库里上
[oracle@server80 script]$ cat ora_imp_backup.sh
#!/bin/bash cat << EOF > /home/oracle/script/imp_text.par
dumpfile=exp_test_$(date +%Y%m%d).dmp
logfile=imp_test_$(date +%Y%m%d).log
directory=UserName_dir
remap_schema=test:test2
EOF date=$(date +%Y-%m-%d)
#获取该文件的最新修改时间
ora_backup_date=$(stat /home/oracle/oradb/ora_backup_status.log|tail -n 1|awk '{print $2}')
#获取备份成功返回的状态码
ora_rsync_status=$(cat /home/oracle/oradb/ora_backup_status.log)
mytgz=/home/oracle/exp_test_$(date +%Y%m%d).tar.gz if [ $ora_backup_date = $date ];then
if [ $ora_rsync_status = '1' ];then
sh /home/oracle/script/dropuser2.sh
impdp \' / as sysdba \' parfile=/home/oracle/script/imp_text.par
if [ $? = '0' ];then
#数据导入成功
echo "1" >/tmp/ora_imp2_status.log
cd /home/oracle/oradb/ && rm -rf exp_test_$(date +%Y%m%d)*
else
echo "是最新数据,数据导入失败" >/tmp/ora_imp2_status.log
fi
else
echo "不是最新数据,失败" >/tmp/ora_imp_status2.log
fi
else
sleep 30
if [ $ora_rsync_status = '1' ] && [ $ora_backup_date = $date ];then
sh /home/oracle/script/dropuser2.sh
impdp \' / as sysdba \' parfile=/home/oracle/script/imp_text.par
if [ $? = '0' ];then
#数据导入成功
echo "1" >/tmp/ora_imp_status2.log
cd /home/oracle/oradb/ && rm -rf exp_test_$(date +%Y%m%d)*
else
echo "是最新数据,数据导入失败" >/tmp/ora_imp2_status.log
fi
else
echo "两次检查,数据不是最新的,结束数据导入" >/tmp/ora_imp2_status.log
fi
fi
5、创建删除用户脚本
目的:在导入数据的时候由于数据已经存在,且覆盖出错,清理用户数据重新导入即可,删除session,否则删除报错。
vim dropuser.sh
#!/bin/bash
${ORACLE_HOME}/bin/sqlplus /nolog <<EOF
connect / as sysdba
SELECT 'alter system kill session '''||sid||','||serial#||''' immediate;' FROM V\$SESSION WHERE USERNAME='TEST1';
drop user test1 cascade;
exit
EOF
6、修改一份适合第二份数据存储的数据
修改ora_imp.backup.sh,dropuser.sh 修改创建两份文件即可。第一份脚本执行完不删备份的数据,第二份脚本执行完后删除备份的数据。
7、总执行脚本如下
[oracle@server81 script]$ cat ora_imp.sh
#!/bin/bash #判断压缩包是否存在
mytgz=/home/oracle/exp_test_$(date +%Y%m%d).tar.gz if [ ! -f "$mytgz" ];then
exit
else
cd /home/oracle/ && tar xf exp_test_$(date +%Y%m%d).tar.gz -C /home/oracle/oradb/ && rm -rf exp_test_$(date +%Y%m%d).tar.gz
fi ora_imp1=/home/oracle/script/ora_imp_backup.sh
ora_imp2=/home/oracle/script/ora_imp2_backup.sh
#循环执行导入两份数据
for i in $ora_imp1 $ora_imp2;
do
sh $i
done
温馨提示:本文由自己记录,仅作参考,出了问题概不负责。。。。。
将Oracle数据库数据每天备份恢复一次数据到另一台服务器上两份数据的更多相关文章
- Oracle数据库坏块的恢复
模拟数据块坏块: 对于发生数据块不一致的数据块,如果当前数据库有备份且处于归档模式,那么就可以利用rman工具数据块恢复功能 对数据块进行恢复,这种方法最简单有效,而且可以在数据文件在线时进行,不会发 ...
- 使用不同用户对Oracle数据库进行异机恢复,失败,错误:Backup file not found in NetBackup catalog
最近做某数据库恢复演练,数据库版本是10.2.0.4,恢复控制文件一直报错,报错如下,经过反复折腾,原来恢复机上oracle用户不是oracle导致(我的是oraclev4),查看源库oracle用户 ...
- 中小型数据库 RMAN CATALOG 备份恢复方案(二)
中小型数据库呈现的是数据库并发少,数据库容量小,版本功能受限以及N多单实例等特点.尽管如此,数据库的损失程度也会存在零丢失的情形.企业不愿意花太多的钱又要保证数据库的可靠稳定,可是苦煞了我这些搞DB的 ...
- 阿里RDS数据库 全量备份恢复到本地MYSQL
阿里RDS数据库 全量备份恢复到本地MYSQL 1.首先下载RDS的全量备份 下载完成后上传到服务器备用 2.安装MySQL 5.6 首先删除机上其他的MySQL版本 检查系统是否安装其他版本 ...
- Windows环境下Oracle数据库的自动备份脚本
批处理文件(.bat) @echo off echo ================================================ echo Windows环境下Oracle数据 ...
- Oracle数据库的自动备份脚本
@echo off echo ================================================ echo Windows环境下Oracle数据库的自动备份脚本 echo ...
- Windows环境下Oracle数据库的自动备份脚本自动删除30天前的备份
@echo off echo ================================================ echo Windows环境下Oracle数据库的自动备份脚本 echo ...
- SqlServer数据库同时备份到两台服务器上(并自动删除过期文件)
数据库同时备份到两台服务器上(并自动删除过期文件) 举例 :(本地)服务器A: IP :192.168.1.1 (远程)服务器B: IP :192.168.1.2 数据库版本:SqlServer200 ...
- 用rsync备份一台linux服务器上的数据
rsync是安装完linux后都会自带的,在机器上运行rsync命令看是否有安装即可 备份到远程服务器 这里介绍的rsync的用途是备份一台linux服务器上的数据到另外一台机器 环境 将需要备份机器 ...
随机推荐
- 超详细教程2021新版oracle官网下载Windows JAVA-jdk11并安装配置(其他版本流程相同)
异想之旅:本人博客完全手敲,绝对非搬运,全网不可能有重复:本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告.本人所有文章发布平台为CSDN.博客园.简书和开源中国,后期可能会有个人博客,除此之外 ...
- Redis(三):新数据类型
配置文件redis.conf详解 bind=127.0.0.1 # 表示只能在本机中访问redis,将该行注释掉,即可接收任何IP地址的访问 protected-mode # 设置为no,表示关闭保护 ...
- VS C++ C# 混合编程
创建C++ DLL 注意,32bit和64bit之间不兼容 创建普通dll工程 设置Properties -> Configuration Properties -> General -& ...
- Docker 学习目录
docker 概述 docker是什么 使用最广泛的肉开源容器引擎 其他如rocket,containerd,pouch等容器引擎 一种系统级虚拟化技术 传统的kvm xen,exsi,vmware ...
- Vuex的同步异步存值取值
1. vue中各个组件之间传值 1.父子组件 父组件-->子组件,通过子组件的自定义属性:props 子组件-->父组件,通过自定义事件:this.$emit('事件名',参数1,参数2, ...
- vue-cli坑比系列
Error loading saved preferences: ~/.vuerc may be corrupted or have syntax errors. Please fix/delete ...
- Python常见问题 - python3 使用requests发送HTTPS请求报certificate verify failed 错误
当你使用 requests 发送HTTPS请求时 requests.get(url, parmas=parmas, headers=header, cookies=cookie) 出现了以下错误 HT ...
- Linux常用命令 - rm命令详解
21篇测试必备的Linux常用命令,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1672457.html 删除/ ...
- 第06课:GDB 常用命令详解(中)
本课的核心内容: info 和 thread 命令 next.step.util.finish.return 和 jump 命令 info 和 thread 命令 在前面使用 info break 命 ...
- Reader字符输入流和InputStreamReader和FileReader
1.FileReader extends InputStreamReader extends Reader 其中,Reader字符输入流和InputStreamReader和FileReader为字 ...