将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服务器上的数据到另外一台机器 环境 将需要备份机器 ...
随机推荐
- Mybatis映射器(一)
XML查询参数: parameterType:可以给出类别名,全名等. resultType:查询结果,可以为 int,float,map等不可以与resultMap同时使用. resultMap: ...
- 简陋的Excel到MYSQL的数据传输JAVA实现
实现从excel读取数据,使用的是jxl.jar(到处都有,请大家随意下载),其中封装好了通过excel提供的接口,对excel中的数据库进行读取的实现: 先为了熟悉其中的方法使用,做了以下的测试: ...
- 万能密码的SQL注入漏洞其PHP环境搭建及代码详解+防御手段
目录 环境搭建 session会话 环境搭建代码 创建数据库脚本 登录界面html: 查询数据库是否为正确的账号密码php代码 连接数据库php代码: 注销登录代码(即关闭session会话) 登录成 ...
- JavaWeb_MVC 设计模式
Servlet缺点:(1)用servlet进行显示(out)会很麻烦,因为servlet是一个类,托福ibt并不擅长做显示:(2)servlet直接访问数据表的话,servlet内的访问和操作数据表的 ...
- Ajax技术---核心XMLHttpRequest对象
Ajax 的全称是Asynchronous JavaScript and XML,其中,Asynchronous 是异步的意思,它有别于传统web开发中采用的同步的方式. (一)ajax技术的意义 我 ...
- golang context包
go context标准库 context包在Go1.7版本时加入到标准库中.其设计目标是给Golang提供一个标准接口来给其他任务发送取消信号和传递数据.其具体作用为: 可以通过context发送取 ...
- 洛谷P1314 聪明的质监员 题解
题目 聪明的质监员 题解 这道题和之前Sabotage G的那道题类似,都是用二分答案求解(这道题还要简单一些,不需要用数学推导二分条件,只需简单判断一下即可). 同时为了降低复杂度,肯定不能用暴力求 ...
- 一文读懂Lua元表
元表 Lua语言中的每种类型的值都有一套可预见的操作集合.例如,我们可以将数字相加,可以连接字符串,还可以在表中插入键值对等,但是我们无法将两个表相加,无法对函数作比较,也无法调用一个字符串,除非使用 ...
- Mybatis(一)——HelloWorld
本人的博客一向保持"傻瓜式"的风格. 循序渐进学Mybatis,先konw how,再konw why.先整体,再细节! 本文不讲难懂的概念,先通过一个案例,希望读者跟着本文一步一 ...
- openswan协商流程之(六):main_inI3_outR3()
主模式第六包:main_inI3_outR3 1. 序言 main_inI3_outR3()函数是ISAKMP协商过程中第六包的核心处理函数的入口,第五六包主要用来验证对方的身份信息,同时此报文也是加 ...