将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服务器上的数据到另外一台机器 环境 将需要备份机器 ...
随机推荐
- Flink中的算子操作
一.Connect DataStream,DataStream -> ConnectedStream,连接两个保持他们类型的数据流,两个数据流被Connect之后,只是被放在了同一个流中,内部 ...
- Git修改历史commit的author信息
前言 "嘀嗒嘀嗒",抬头看向墙上的钟表,此时已是凌晨1点.小明终于把Go语言圣经第二章的笔记写完,保存commit,提交,然后睡觉. 额,等等,不对,小明发现他用的是公司的git账 ...
- 前端性能优化之http缓存
前不久,公司前端开会,领导抽问了4个问题,前3个简单大家都答起来了,第4个问题关于缓存的这方面我只是了解,结果刚好问到我了(会的不问,专门挑我不熟悉的问,我这运气真是没话说),20多个前端看着我,答得 ...
- 高德地图——骑行路线&骑行指定
&plugin=AMap.Riding 也是[]中放json, 包含keyword和city,不能有途经1.骑行路线(关键字) <!DOCTYPE html> <html&g ...
- 使用spring向service里面注入dao不成功。
因为原来的程序没有使用spring.后来加spring的时候action有个地方的new没有改!!! new了个新的实现层 不是spring管理的对象.
- 机器学习基本概念:batch_size、epoch、 iteration
batch_size 单次训练用的样本数,通常为2^N,如32.64.128... 相对于正常数据集,如果过小,训练数据就收敛困难:过大,虽然相对处理速度加快,但所需内存容量增加. 使用中需要根据计算 ...
- 多个mysql同时运行
一.准备 mysql下载地址 https://dev.mysql.com/downloads/mysql/ 1.下载 2.解压缩 3.创建my.ini [Client] port = 3307 [my ...
- 20210719 noip20
考场 后两题是原题,教练说不用写了(ycx 不讲武德) T1 先手模了 \(n\le5\) 的情况,尝试找规律失败.那就只能 DP 了,最终没搞出来. 记忆化搜索打了 \(n\le20\) 的表,交了 ...
- Appium问题解决方案(4)- Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException
背景 操作步骤 运行 uiautomatorviewer.bat 点击左上角的 Device ScreensShot 报错 截图 解决方法 网上还是有很多方法的,可能造成的原因不同,我是第六种方法解决 ...
- c# 递归树形菜单
首先创建模型类Menus public class Menus { //菜单Id public int Id { get; set; } //菜单名 public string MenuName { ...