Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Oracle ADG环境下的RMAN备份策略

Oracle ADG环境下的RMAN备份策略

作者头像
Alfred Zhao
发布于 2023-03-06 08:15:32
发布于 2023-03-06 08:15:32
78500
代码可运行
举报
运行总次数:0
代码可运行

作为IT运维人员,尤其是数据库岗位,数据的备份重于一切。

现在很多用户会有一个普遍误区,认为现在类似ADG这类灾备已经很完善,且实时性也更佳,往往就忽略了传统的备份效用。

但实际上,我们千万不能因为有了容灾建设就盲目忽略备份的作用,二者其实有着本质区别。很多场景,灾备都是无法替代传统备份的,二者是缺一不可的关系。

之前在

中搭建了一套 Single Instance Primary + RAC Standby 的初始环境。

下面我们就给这套数据库环境制定备份策略。

1.主库备份策略

需求:数据库每天全备 + 归档每6小时备份一次;

crontab定时任务设置:

每天1:30执行数据库的全备,每6小时执行数据库归档日志的备份:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[oracle@bogon orabak]$ crontab -l
30 1 * * * /hdd/scripts/backup.sh /hdd/orabak
0 */6 * * * /hdd/scripts/backuparch.sh /hdd/orabak

调用的相关脚本内容参考:

vi /hdd/scripts/backup.sh

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
#ENV
export ORACLE_SID=demo
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/db_1
export PATH=$ORACLE_HOME/bin:$PATH


#backup RMAN
if [ ! -d "$1" ]; then
        echo "You have input no dir for \$1"
        exit 1
fi

echo "=================================================================================" >>${1}/backup_full.log
echo "Begin backup at : `date`" >> ${1}/backup_full.log
rman target / <<EOF >> ${1}/backup_full.log
run {
CONFIGURE RETENTION POLICY TO REDUNDANCY = 2;
CONFIGURE DEVICE TYPE DISK PARALLELISM 6;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
backup as compressed backupset database format '${1}/FULLBAK_%d_%T_%s_%p.DBFILE';
backup current controlfile format '${1}/%d.%s.%p.%T.CTL';
backup spfile format '${1}/%d.%s.%p.%T.SPFILE';
crosscheck backup;
crosscheck copy;
sql "alter system archive log current";
backup as COMPRESSED backupset archivelog all not backed up format '${1}/%d.%s.%p.%T.ARC';
crosscheck archivelog all;
delete noprompt archivelog all completed before 'sysdate-10';
delete noprompt expired backup;
delete noprompt obsolete;
}
exit
EOF
echo "End backup at : `date`" >>${1}/backup_full.log

echo "Begin cp to NAS at : `date`" >>${1}/backup_full.log
cp ${1}/*`date +%Y%m%d`* /public/Others/orabak
echo "End cp to NAS at : `date`" >>${1}/backup_full.log
echo "=================================================================================" >>${1}/backup_full.log

exit 0

vi /hdd/scripts/backuparch.sh

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
#ENV
export ORACLE_SID=demo
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/db_1
export PATH=$ORACLE_HOME/bin:$PATH

#backup RMAN
if [ ! -d "$1" ]; then
        echo "You have input no dir for \$1"
        exit 1
fi

echo "=================================================================================" >>${1}/backup_arch.log
echo "Begin backup at : `date`" >> ${1}/backup_arch.log
rman target / <<EOF >> ${1}/backup_arch.log
run {
CONFIGURE RETENTION POLICY TO REDUNDANCY = 2;
CONFIGURE DEVICE TYPE DISK PARALLELISM 6;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
backup current controlfile format '${1}/%d.%s.%p.%T.CTL';
backup spfile format '${1}/%d.%s.%p.%T.SPFILE';
crosscheck backup;
crosscheck copy;
sql "alter system archive log current";
backup as COMPRESSED backupset archivelog all not backed up format '${1}/%d.%s.%p.%T.ARC';
crosscheck archivelog all;
delete noprompt archivelog all completed before 'sysdate-10';
delete noprompt expired backup;
delete noprompt obsolete;
}
exit
EOF
echo "End backup at : `date`" >>${1}/backup_arch.log

echo "Begin cp to NAS at : `date`" >>${1}/backup_arch.log
cp ${1}/*`date +%Y%m%d`*.{CTL,SPFILE,ARC} /public/Others/orabak
echo "End cp to NAS at : `date`" >>${1}/backup_arch.log
echo "=================================================================================" >>${1}/backup_arch.log

exit 0

2.备库备份策略

需求:每10分钟清除4h之前的归档日志;

crontab定时任务设置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[oracle@db01rac1 scripts]$ crontab -l
*/10 * * * * /u01/scripts/delarch.sh /u01/scripts

调用的相关脚本内容参考:

vi /u01/scripts/delarch.sh

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
#ENV
export ORACLE_SID=jydb1;
export ORACLE_BASE=/u01/app/oracle;
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/db_1;
export PATH=$ORACLE_HOME/bin:$PATH;

#RMAN delete archivelog
if [ ! -d "$1" ]; then
        echo "You have input no dir for \$1"
        exit 1
fi

echo "=================================================================================" >>${1}/delarch.log
echo "Begin backup at : `date`" >> ${1}/delarch.log
rman target / <<EOF >> ${1}/delarch.log
delete noprompt archivelog all completed before 'sysdate - 1/24*4';
EOF
echo "End backup at : `date`" >>${1}/delarch.log
echo "=================================================================================" >>${1}/delarch.log

exit 0

3.测试备份策略

在实际部署上面备份脚本后,验证阶段发现有报错信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
You have mail in /var/spool/mail/oracle
[oracle@bogon ~]$
[oracle@bogon ~]$ tail -200f /var/spool/mail/oracle
From oracle@bogon.localdomain  Mon Jan 30 18:00:25 2023
Return-Path: <oracle@bogon.localdomain>
X-Original-To: oracle
Delivered-To: oracle@bogon.localdomain
Received: by bogon.localdomain (Postfix, from userid 10001)
	id 8738341B51FA; Mon, 30 Jan 2023 18:00:25 +0800 (CST)
From: "(Cron Daemon)" <oracle@bogon.localdomain>
To: oracle@bogon.localdomain
Subject: Cron <oracle@bogon> /hdd/scripts/backuparch.sh /hdd/orabak
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env: <XDG_SESSION_ID=4131>
X-Cron-Env: <XDG_RUNTIME_DIR=/run/user/10001>
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/oracle>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=oracle>
X-Cron-Env: <USER=oracle>
Message-Id: <20230130100025.8738341B51FA@bogon.localdomain>
Date: Mon, 30 Jan 2023 18:00:18 +0800 (CST)

cp: cannot stat ‘/hdd/orabak/*20230130*.CTL’: No such file or directory
cp: cannot stat ‘/hdd/orabak/*20230130*.SPFILE’: No such file or directory

查看备份日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
516 Deleting the following obsolete backups and copies:
517 Type                 Key    Completion Time    Filename/Handle
518 -------------------- ------ ------------------ --------------------
519 Backup Set           20     30-JAN-23
520   Backup Piece       20     30-JAN-23          /flash/fast_recovery_area/DEMO/autobackup/2023_01_30/o1_mf_s_1127488370_kxgvhm1c_.bkp
521 Backup Set           30     30-JAN-23
522   Backup Piece       30     30-JAN-23          /flash/fast_recovery_area/DEMO/autobackup/2023_01_30/o1_mf_s_1127488380_kxgvhwj0_.bkp
523 Backup Set           31     30-JAN-23
524   Backup Piece       31     30-JAN-23          /hdd/orabak/DEMO.56.1.20230130.CTL
525 Backup Set           32     30-JAN-23
526   Backup Piece       32     30-JAN-23          /hdd/orabak/DEMO.57.1.20230130.SPFILE
527 deleted backup piece
528 backup piece handle=/flash/fast_recovery_area/DEMO/autobackup/2023_01_30/o1_mf_s_1127488370_kxgvhm1c_.bkp RECID=20 STAMP=1127488371
529 Deleted 1 objects
530
531 deleted backup piece
532 backup piece handle=/flash/fast_recovery_area/DEMO/autobackup/2023_01_30/o1_mf_s_1127488380_kxgvhwj0_.bkp RECID=30 STAMP=1127488380
533 Deleted 1 objects
534
535 deleted backup piece
536 backup piece handle=/hdd/orabak/DEMO.57.1.20230130.SPFILE RECID=32 STAMP=1127498407
537 Deleted 1 objects
538
539 deleted backup piece
540 backup piece handle=/hdd/orabak/DEMO.56.1.20230130.CTL RECID=31 STAMP=1127498406
541 Deleted 1 objects
542
543
544 RMAN>
545

发现针对控制文件和参数文件,在最后居然被删掉了。。

梳理脚本逻辑,确认是这条命令触发的删除:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
delete noprompt obsolete;

何为obsolete?目前策略中的 REDUNDANCY 设置为2,但是因为开启了自动的控制文件备份(其中也会同时包含参数文件),所以反而手工备份的都没有被传输到备份端。

另外,需要注意的是,这不是一个小问题,因为这会给正常恢复带来很大的麻烦;

试想,没有这两个文件,尤其是控制文件的备份存档到NAS,一旦主机crash,通过NAS上的备份就成为无稽之谈。

那么解决方案呢?也很简单,修改默认值,默认值为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default

因此对应了两种修改方式:

方式一:关闭RMAN中控制文件的自动备份;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CONFIGURE CONTROLFILE AUTOBACKUP OFF; 

方式二:设置RMAN中控制文件自动备份的路径为我们备份的路径:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/hdd/orabak/AUTO_%F.CTL'; 

4.ADG环境下的特殊配置

为了应对主备角色切换期间等场景,在主备库都配置上归档删除策略,确保未传到备库的归档不会被删除:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO ALL STANDBY;

new RMAN configuration parameters:
CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO ALL STANDBY;
new RMAN configuration parameters are successfully stored
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
RMAN备份策略与异机恢复一例
实验环境: A机器(生产用途):RHEL 6.5 + Oracle 11.2.0.4 + IP Address 192.168.1.11 B机器(备机用途):RHEL 6.5 + Oracle 11.2.0.4 + IP Address 192.168.1.61
Alfred Zhao
2019/05/24
7510
Oracle 10gR2 Dataguard搭建(非duplicate方式)
我的实验环境: 源生产库(主库): IP地址:192.168.1.30 Oracle 10.2.0.5 单实例
Alfred Zhao
2019/05/24
7390
rman数据备份恢复学习笔记(49天)
昨天对rman数据备份恢复进行了总结, 分享一下。 常用的一些命令 list backup; list expired backup; report schema; report need backup days 3; report need backup; report obsolete; configure channel device type -压缩备份 CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO COMPRESSED BACKU
jeanron100
2018/03/13
9180
Oracle RAC 实验环境RMAN备份v1.01
环境:RHEL 6.5 + Oracle GI 11.2.0.4 + RAC 11.2.0.4 (2 nodes) 需求:制定RAMN备份策略 版本:v1.01 说明:之前说过本系列的实验环境宗旨就是完全模拟生产环境,所有的操作记录在案,每次版本变更都需要详细记录。
Alfred Zhao
2019/05/24
8010
RMAN备份策略与异机恢复一例(续篇)
之前异机恢复的需求已经演练成功,现在需要保持之前恢复的库orcl不动,全新恢复一个用于临时测试指定时间点的小库,实例名称规划为testdb。 注意:风险点在于一定要注意所有步骤操作仔细,不能影响到现有环境orcl。 知识点:
Alfred Zhao
2019/05/24
8790
Oracle RMAN各类压缩算法对比测试
1.背景概述 2.本次测试环境基本信息 3.测试步骤 3.1. 使用BCO进行压缩备份 3.2. 不使用压缩备份 3.3. 使用ACO中LOW级别进行压缩备份 3.4. 使用ACO中MEDIUM级别进行压缩备份 3.5. 使用ACO中HIGH级别进行压缩备份 4.各类备份方式对比分析 4.1. 生成备份文件大小差异 4.2. 备份时长差异 4.3. 备份CPU资源差异 4.4. 备份Memory资源差异 4.5. 备份IO资源差异 5.总结
Alfred Zhao
2020/06/08
1.5K0
DG环境数据库RMAN备份策略制定 全库备份 归档备份 删除历史文件夹 删除归档
DG环境数据库RMAN备份策略制定: 主库(Primary) 全库备份 归档备份 删除历史文件夹 备库(Standby) 删除归档 引用说明 主库(Primary) $ crontab -l 0 1 * * * /bin/bash /usr2/backupsh/full_backup.rman 0 */2 * * * /bin/bash /usr2/backupsh/arch_backup.rman 0 3 * * * /bin/bash /usr2/backupsh/del_old.sh 全库备份
Alfred Zhao
2019/05/24
1.4K0
RMAN相关基础操作
Recovery Manager: Release 11.2.0.3.0 - Production on Tue Jan 9 07:33:58 2018
SQLplusDB
2020/03/26
5620
Oracle RMAN 备份一例
备份策略:周日0级备份,周一~周六1级备份,每6小时备份归档日志,每天清理历史文件夹.
Alfred Zhao
2019/05/24
7660
RMAN 脚本定时备份数据库
Oracle RMAN 在生产环境使用一般都是热备的方式,冷备需要关掉数据库才可以进行,生产环境一般是没有停机时间给你做备份的,所以冷备不太适合生产备份。热备的方式需要打开归档模式!
用户8006012
2022/06/28
1.2K0
RMAN 配置、监控与管理
一个通道代表一个到设备(磁盘或磁带)的数据流并且在目标数据库或辅助数据库实例上产生一个相应的服务器会话(server session)
Leshami
2018/08/07
1K0
Oracle RMAN 基础配置和常用命令
1、备份保留策略rman连接到 RMAN 管理工具, rman 默认配置[oracle@orcl:/home/oracle]$ rman target /Recovery Manager: Release 11.2.0.4.0 - Production on Wed Jun 15 13:11:22 2022Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.connected to target datab
用户8006012
2022/06/17
1.2K0
RMAN 备份详解
RMAN使用服务器会话来完成备份操作,从RMAN客户端连接到服务器将产生一个服务器会话
Leshami
2018/08/07
2.7K0
【Oracle数据库】RMAN备份恢复脚本分享,附SQL实时查看进度
作者简介 作者:LuciferLiu,中国DBA联盟(ACDU)成员。 目前主要从事Oracle DBA工作,曾从事 Oracle 数据库开发工作,主要服务于生产制造,汽车金融等行业。 现拥有Oracle OCP,OceanBase OBCA认证,擅长Oracle数据库运维开发,备份恢复,安装迁移,Linux自动化运维脚本编写等。 前言 使用rman进行备份恢复时,通过客户端执行记录无法直观看出进度如何,可以通过SQL进行查询。 一、RMAN备份 以下命令,直接复制执行即可。 1 配置备份路径和计划任务
Lucifer三思而后行
2021/08/17
3.2K0
linux 下RMAN备份shell脚本
       RMAN备份对于Oracle数据库的备份与恢复简单易用,成本低廉。对于使用非catalog方式而言,将RMAN脚本嵌入到shell脚本,然后再通过crontab来实现中小型数据库数据库备份无疑是首选。本文提供了一个简单易用的基于linux shell下的RMAN备份脚本供参考。大家可根据自己的需要进行适当调整。
Leshami
2018/08/14
2K0
ADG单实例系列搭建之(RMAN备份恢复)
参考文章:Data Guard Physical Standby Setup in Oracle Database 11g Release 2
Lucifer三思而后行
2021/08/17
1.3K0
ADG单实例系列搭建之(RMAN备份恢复)
Oracle rman备份和恢复常规操作
差异增量备份(Differential Incremental Backup)模式(默认): LV0:全备。 LV1:最近一次LV0或LV1至今的变化。 LV2:最近一次LV0或LV1或LV2至今的变化。 优缺点:速度较快、因为仅存储少量变化的块、但需要更长的时间来恢复
mingjie
2022/05/12
7370
怎样对生产环境10T RAC新增Adg 不对现有主库产生任何负载,不占用网络带宽?
**导读** > 作者:杨漆 > 16年关系型数据库管理,从oracle 9i 、10g、11g、12c到Mysql5.5、5.6、5.7、8.0 到TiDB获得3个OCP、2个OCM;运维路上不平坦,跌过不少坑、熬过许多夜。把工作笔记整理出来分享给大伙儿,希望帮到大家少走弯路、少熬夜。 提问: 如果您的生产环境为3节点的Rac+ASM,10T以上数据,业务对主库有极高性能要求,不能占用主库资源、通道、带宽,且主库归档日志每4小时会定时删除一次(归档存储空间有限,且无法扩容),现有备库上的归档每小时不定
杨漆
2021/07/02
5880
怎样对生产环境10T RAC新增Adg 不对现有主库产生任何负载,不占用网络带宽?
Oracle9i新特点-SPFILE的使用
本文发表于itpub技术丛书《Oracle数据库DBA专题技术精粹》,未经许可,严禁转载本文.
数据和云01
2018/09/10
8490
【DB笔试面试783】在Oracle中,差异增量备份和累积增量备份的区别是什么?
数据库备份可以分为完全备份和增量备份。完全数据文件备份是包含文件中所有已用数据块的备份。RMAN将所有块复制到备份集或映像副本中,仅跳过从未使用的数据文件块。完全映像副本可准确地再现整个文件的内容。完全备份不能成为增量备份策略的一部分;它也不能作为后续增量备份的基础。
AiDBA宝典
2020/05/07
1.7K0
相关推荐
RMAN备份策略与异机恢复一例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档