ORACLE RMAN自动备份还原脚本设计

ORACLE RMAN自动备份还原脚本设计很多时候,我们DBA需要定时对生产环境进行整体备份,并恢复到测试环境,供开发人员调试或测试,如果数据量比较大的情况下,RMAN方式比较高效省时,下面策略是在生产环境部署备份任务,并在测试模拟环境进行…

ORACLE RMAN自动备份还原脚本设计

很多时候,我们DBA需要定时对生产环境进行整体备份,并恢复到测试环境,供开发人员调试或测试,如果数据量比较大的情况下,RMAN方式比较高效省时,下面策略是在生产环境部署备份任务,并在测试模拟环境进行定时还原的脚本。

生产库源端每周日全备:

#/bin/sh

source ~/.bash_profile

export BACKUP_DATE=`date +%Y%m%d`

export BACKUP_PATH=/orabak

echo `mkdir -p ${BACKUP_PATH}/${BACKUP_DATE}/backupset`

echo `mkdir -p ${BACKUP_PATH}/${BACKUP_DATE}/archivelog`

echo `mkdir -p ${BACKUP_PATH}/${BACKUP_DATE}/controlfile`

rman target / nocatalog msglog=$BACKUP_PATH/${BACKUP_DATE}/bak_0_$BACKUP_DATE.log << EOF

set encryption on identified by "*******" only;

run{

allocate channel c1 type disk;

allocate channel c2 type disk;

allocate channel c3 type disk;

backup incremental level 0 database tag="level_0" format "$BACKUP_PATH/${BACKUP_DATE}/backupset/level_0_%d_%T_%s_%U";

sql "alter system archive log current";

backup archivelog from time "to_date(to_char(sysdate,"yyyy-mm-dd")||" 00:50:00","yyyy-mm-dd hh24:mi:ss")" until time "sysdate" format "$BACKUP_PATH/${BACKUP_DATE}/archivelog/arch_level_0_%d_%T_%s_%U";

release channel c1;

release channel c2;

release channel c3;

}

backup current controlfile tag="bak_ctlfile" format "$BACKUP_PATH/${BACKUP_DATE}/controlfile/ctl_file_%U_%T";

crosscheck backup;

delete noprompt expired backup;

crosscheck archivelog all;

report obsolete;

delete noprompt obsolete;

exit

EOF

cd /orabak

#备份后并通过rsync方式传输至源端的测试环境:

rsync -av $BACKUP_DATE --password-file=/etc/.rsync.pass oracle@10.0.32.15::orabak

代码100分

生产库源端每日增量备份:

代码100分#/bin/sh

source ~/.bash_profile

export BACKUP_DATE=`date +%Y%m%d`

export BACKUP_PATH=/orabak

echo `mkdir -p ${BACKUP_PATH}/${BACKUP_DATE}/backupset`

echo `mkdir -p ${BACKUP_PATH}/${BACKUP_DATE}/archivelog`

echo `mkdir -p ${BACKUP_PATH}/${BACKUP_DATE}/controlfile`

rman target / nocatalog msglog=$BACKUP_PATH/${BACKUP_DATE}/bak_1_$BACKUP_DATE.log << EOF

set encryption on identified by "*******" only;

run{

allocate channel c1 type disk;

allocate channel c2 type disk;

allocate channel c3 type disk;

backup incremental level 1 database tag="level_1" format "$BACKUP_PATH/${BACKUP_DATE}/backupset/level_1_%d_%T_%s_%U";

sql "alter system archive log current";

backup archivelog from time "to_date(to_char(sysdate,"yyyy-mm-dd")||" 00:50:00","yyyy-mm-dd hh24:mi:ss")" until time "sysdate" format "$BACKUP_PATH/${BACKUP_DATE}/archivelog/arch_level_0_%d_%T_%s_%U";

backup current controlfile tag="bak_ctlfile" format "$BACKUP_PATH/${BACKUP_DATE}/controlfile/ctl_file_%U_%T";

release channel c1;

release channel c2;

release channel c3;

}

crosscheck backup;

delete noprompt expired backup;

crosscheck archivelog all;

report obsolete;

delete noprompt obsolete;

exit

EOF

cd /orabak

#备份后并通过rsync方式传输至源端的测试环境:

rsync -av $BACKUP_DATE --password-file=/etc/.rsync.pass oracle@10.0.32.15::orabak

linux定时调用备份任务:

[oracle@oracle03 rman_script]$ crontab -l

30 05 * * 1,2,3,4,5,6 /orabak/rman_script/lev_1_bak.sh

30 05 * * 0 /orabak/rman_script/full_bak.sh

目标端部署定时还原脚本:

代码100分[oracle@test rman_script]$ crontab -l

30 07 * * * /orabak/rman_script/recover_db.sh

测试环境还原脚本设计:

[oracle@gzrmzdata2006 rman_script]$ more recover_db.sh


#/bin/sh

source ~/.bash_profile

export BACKUP_DATE=`date +%Y%m%d`

export OLD_BACKUP_DATE=`date +%Y%m%d -d "-8days"`

/opt/app/oracle/product/11.2.0/db_1/bin/sqlplus "/as sysdba" << EOF

spool /orabak/${BACKUP_DATE}/reboot_db.log

shutdown immediate

startup nomount

spool off

exit

--rman离线高级复制恢复

rman auxiliary / msglog=/orabak/${BACKUP_DATE}/recover_$BACKUP_DATE.log << EOF

set decryption identified by "oraba_K0415";

run{

allocate auxiliary channel c1 type disk;

allocate auxiliary channel c2 type disk;

allocate auxiliary channel c3 type disk;

DUPLICATE DATABASE TO erprac BACKUP LOCATION "/orabak/";

}

至此,测试环境定时RMAN恢复任务还原成功!

©版权声明:本文为天凯DBS的原创文章,转载请附上原文出处链接及本声明,否则将追究法律责任。

更多DBA案例请关注访问天凯DBS

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10742.html

(0)
上一篇 2022-12-22
下一篇 2022-12-22

相关推荐

  • ed2k是什么_navicat导出数据库

    ed2k是什么_navicat导出数据库一直都有个想法,把驴子的ed2k导出数据库,驴子经常丢失搜索词历史。非常头疼。于是今天终于对驴子下手了。 分析代码,先找到ui dlg,对应的类。CSearchXXX ,大概浏览了下,就是搜索记录的…

    2023-02-26
    150
  • python爬虫请求头设置代码(爬虫请求头怎么写)

    python爬虫请求头设置代码(爬虫请求头怎么写) HTTP “请求头信息” Request Header 是向服务端提供客户端的信息,“响应头信息” Response Header 是服务端向客户端提供请求文档信息或服务器的状态信息,服务端判断服务端的身份,就是通过 Header 来判断的,所以爬虫通过设置 Header 来隐藏自己相当重要。

    2023-11-25
    134
  • Python中如何处理年龄数据

    Python中如何处理年龄数据年龄数据是数据科学中非常重要的数据类型之一。在机器学习的模型中,年龄数据也经常被作为一个特征来使用。但是,年龄数据并不像其他数据类型那样直接可用,需要进行一些处理和转换。本文将从多个方面详细介绍Python中如何处理年龄数据。

    2024-03-19
    88
  • Python Regex $字符的应用

    Python Regex $字符的应用
    在正则表达式中,$字符是匹配字符串的末尾位置。 在一行文本中,末尾位置是指行尾字符(如果有的话)的右侧位置。$字符可以用于在匹配文本时定位结尾,并且有几种方式可以使用它来实现定位。

    2024-03-16
    76
  • MySQL 清空表所有数据,主键自增恢复从1开始

    MySQL 清空表所有数据,主键自增恢复从1开始truncate table 表名;

    2023-03-10
    158
  • impala使用教程_impala优化

    impala使用教程_impala优化###什么是Impala 用来处理存储在Hadoop集群中大量数据的大规模并行处理的sql查询引擎,它是由C++和Java编写的开源软件,它提供了访问Hadoop中分布式文件系统中的数据的最快的方法。

    2023-05-09
    136
  • 求最大值:Python数组的max()方法使用

    求最大值:Python数组的max()方法使用在Python中,数组是一组相同类型的元素集合,并可以通过索引值进行访问。Python中使用列表来表示数组,列表中的元素可以是任意类型,而且不需要声明数组大小。

    2023-12-07
    134
  • Python正常终止!

    Python正常终止!Python是一门广泛使用的高级编程语言,因为其简单易学、易读易写、可扩展的特点而受到越来越多的欢迎。

    2024-09-10
    23

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注