将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服务器上的数据到另外一台机器 环境 将需要备份机器 ...
随机推荐
- Java String 综述(上篇)
摘要: Java 中的 String类 是我们日常开发中使用最为频繁的一个类,但要想真正掌握的这个类却不是一件容易的事情.笔者为了还原String类的真实全貌,先分为上.下两篇博文来综述Java中的S ...
- 使用GZIP压缩网页内容(一)
在JDK中提供了GZIP压缩,来压缩网页的内容,降低网络传输时候的字节数,到达浏览器端的时候,再解压,GZIP压缩之后传输耗费的流量大大降低,但是同时也不会降低用户体验. package day04; ...
- JDBC中的元数据——1.数据库元数据
package metadata; import java.sql.Connection; import java.sql.DatabaseMetaData; import javax.sql.Dat ...
- Windows系统搭建Redis集群三种模式(零坑、最新版)
目录 主从复制 修改配置文件 启动各节点 验证 哨兵模式 修改配置文件 启动实例 验证 集群模式 修改配置文件 启动实例 验证 主从复制 新建以下三个目录,用来部署一主二从 redis 的安装在另外一 ...
- T-SQL - 习题02_将数据表year|month|amount查询成year|m1|m2|m3|m4的样式
时间:2017-09-11 整理:byzqy 题目:有个年度统计表,结构如下: 怎么样把这个表,查询成这样一个结果: 这是在面试过程中遇到的一个关于数据库的题,没有一点思路,不知它考查到的知识点是什么 ...
- Git使用教程五
基于ssh协议(推荐) 该方式与前面https方式相比,只是影响github对于用户的身份鉴权方式,对于git的具体操作(如提交本地.添加注释.提交远程等操作)没有任何影响. 生成公私钥对指令(需 ...
- netty系列之:搭建HTTP上传文件服务器
目录 简介 GET方法上传数据 POST方法上传数据 POST方法上传文件 总结 简介 上一篇的文章中,我们讲到了如何从HTTP服务器中下载文件,和搭建下载文件服务器应该注意的问题,使用的GET方法. ...
- shutdown 命令
# shutdown -h #停止系统服务并关机 -r #停止系统服务后重启 shutdown -h now #立即关机 shutdown -h 10:53 #到10:53关机,如果该时间小于当前时间 ...
- 浅析Is-a,Has-a与like-a
在面向对象的设计领域里,有很多设计思路,主要有三种:is-a.has-a.like-a. 这三种在java的类.接口.抽象类中很多体现,下面简述一下其定义. 1.Is-a(继承关系) is-a,顾名思 ...
- struts2执行流程和架构图
一.struts2执行流程 二.架构图 只需要编写黄色部分的代码: