Oracle ADG容灾端部署Rman备份的一些实践经验
随着数据库中数据量的不断增加、业务的复杂性提高、各种政策颁布的系统容灾等级要求,数据库备份的工作及备份文件的有效性及备份文件的管理变得愈发重要。在Oracle数据库中提供了强大的备份和恢复工具,其中RMAN(Recovery Manager)是一个常用的备份工具。为了有效地管理备份存储空间和资源,Rman支持多种灵活的方式对备份文件的存储生命周期进行管理,如Rman自带备份文件保留周期管理策略,支持基于天数和冗余的两种方式模式;支持第三方介质管理对备份文件保留周期的管理策略。同时在Oracle 11G中,引入了ADG(active standby database)功能,使得备库可以启动到只读模式,此时可以在备份上运行业务,分担主库的压力,其中也包括在备份上执行对数据库进行Rman的备份,但是官方文档中要求在ADG环境中部署Rman备份,必须配置catalog数据库,并且需要将主库和备份的信息都注册到catalog数据库中,否则无法在主备库之间进行备份集元数据的同步和备份集的管理。其实在很多客户现场中,备份集元数据的管理基本上都是通过控制文件来管理的,并未采用catalog数据库,那是否意味着无法再ADG备库对进行Rman备份了呢?答案是否定,下面我们就简单的讲解一下,在ADG备库端,无Catalog数据库的情况下,怎么对数据库进行备份和备份文件的自动管理。关于ADG中通过在catalog环境中怎么部署ADG备库段的Rman备份,请直接参考官方文档即可。
下面就从简单的备份文件保留策略说起。
1,备份文件保留策略
备份文件的保留策略是通过设置 Rman中的RETENTION POLICY 参数来控制的,这个策略定义了备份文件在存储介质上保留的策略。在RMAN备份中,可以使用不同的保留策略来管理备份集的保留期限。其中,基于恢复窗口和冗余是两种常见的保留策略。
- 基于恢复窗口的保留策略:
- 描述: 恢复窗口是指在特定时间范围内可以使用的备份集。基于恢复窗口的保留策略允许您设置备份在一定的时间窗口内有效,而超出该时间窗口的备份将被自动删除。
- 配置方法: 在RMAN脚本或命令中,您可以使用
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF <n> DAYS;来设置基于恢复窗口的保留策略,其中<n>是您希望的恢复窗口的天数。 - 影响: RMAN将自动删除超出指定恢复窗口的备份,以确保备份集的大小在可控范围内,同时提供了较短的恢复时间窗口。
- 基于冗余的保留策略:
- 描述: 基于冗余的保留策略是指设置备份集的冗余副本数量。RMAN会保留足够数量的备份,以满足指定的冗余级别,而超出冗余级别的备份将被自动删除。
- 配置方法: 使用
CONFIGURE RETENTION POLICY TO REDUNDANCY <n>;来设置基于冗余的保留策略,其中<n>是您希望的冗余级别,即备份副本的数量。 - 影响: 通过设置冗余级别,您可以确保在备份集中始终有足够数量的备份,以防止单点故障,并提供高可用性。RMAN会自动删除超出冗余级别的旧备份。
1. 查看当前的保留策略
在 RMAN 命令行或脚本中,您可以使用以下命令查看当前数据库的备份文件保留策略:
SHOW RETENTION POLICY;
2. 配置恢复窗口保留策略
可以通过 CONFIGURE RETENTION POLICY 命令来设置备份文件的恢复窗口的保留时间。以下是一个设置保留时间为7天的示例:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
3. 配置冗余保留策略
也是通过 CONFIGURE RETENTION POLICY 命令来设置备份文件的冗余度,以下是一个设置冗余为天的示例:
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
2,ADG备库中配置保留策略
备份环境为只读环境,不支持手动修改备份文件的保留策略,默认继承备库在搭建时,主库控制文件中配置的备份文件报错策略,如果后期主库修改了备份文件保留策略,是不会自动同步到备库环境的。
下面是在备库环境主动修改备份文件的保留策略,会触发如下的报错:
RMAN> show all;
using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name ORCLSTD are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_orcl.f'; # default
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of configure command at 11/30/2023 20:59:47
RMAN-05021: this configuration cannot be changed for a BACKUP or STANDBY control file
那是否没有办法实现备库环境自定义备份文件的保留策略了呢?其实可以通过如下的两个版本:
修改主库控制文件的方法
在主库修改备份文件的保留策略,然后将备份控制文件,在还原到备库环境,此时备库环境就继承了主库环境的备份文件的保留策略。
通过Rman命令制定备份集保留策略
比如在Rman的delete命令中,手动制定备份集的保留策略,同样支持恢复窗口和冗余两种方式,如下
- 恢复窗口模式
DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 2 DAYS;
- 冗余模式
DELETE NOPROMPT OBSOLETE REDUNDANCY 2;
3,ADG环境的备份元数据同步
上面内容实现了备份文件集的保留策略的管理,下面就是备份文件集的元数据在主库和备库之前的同步。首先我们聊聊什么是备份元数据?
备份的元数据指的是备份操作相关的信息和描述。这些元数据包括备份集的结构、备份的类型、备份的位置、备份集内的文件信息等。以下是一些常见的Oracle RMAN备份元数据:
- 备份集信息: RMAN备份创建一个或多个备份集,其中包含了备份的数据。备份集的元数据包括备份集的唯一标识符、创建时间、备份集的状态等。
- 备份集内的文件信息: RMAN备份集内包含了一个或多个数据库文件的备份。每个文件备份都有相关的元数据,包括文件名、大小、类型(全备份、增量备份等)、创建时间等。
- 备份集的位置信息: 元数据还包括备份集的存储位置,这可能是磁盘、磁带或其他媒体。这对于后续的恢复操作非常重要。
- 备份的类型和级别: RMAN支持全备份、增量备份等不同类型的备份,元数据中包含了备份的类型信息。此外,还包括备份的级别,例如完整备份、差异备份等。
- 恢复目标信息: 元数据中可能包含指示备份的恢复目标信息,例如完全恢复数据库、部分恢复等。
通过这些元数据,RMAN能够有效地管理备份和还原操作。它可以追踪备份的历史,了解每个备份的详细信息,以及确保备份集的一致性和完整性。这对于dba来说是非常重要的,特别是在需要执行数据库恢复操作时。
其实简单一点元数据库就是用于了解备份集的信息,用于后期数据库的还原和备份集本身的管理。
在ADG备库中备份集本身的管理通过上面配置的方法已经可以实现了,后续的目的就是数据库的还原了。其实生产环境中,如果有Adg的场景中,生产环境数据库不可用的情况,并且需要在生产数据库上直接执行还原的场景真心不多,可以说,从自己过去的工作经验中,还从来没有遇到过。有ADG场景中,主库不可用时,基本上都是通过容灾切换的方式来快速的恢复数据库服务的可用。
所以个人认为在ADG这些的场景中,无需去将备份集的元数据同步到主库中。如果真的要同步,可以采用catalog的方式,将文件系统中或者磁盘中的备份片注册到控制文件或者catalog数据库中,完成备份元数据库的同步。
4,ADG场景中有必要做Rman备份吗?
那是否有Adg的环境中,无法对数据库做Rman备份呢?当然是否定的,下面的一些场景中还是需要Rman备份集的。
历史数据的还原。
备份数据的归档存放。
逻辑损坏、特殊的物理损坏场景(加密等)。
最后的救命稻草。
........
5,备份脚本分享
下面为自己的常用的一个Rman备份的脚本,每周日对数据库做全部,其它的时间对数据库做增量,此脚本是在原来NBU调用的脚本的基础之上改的。
脚本见最后附录。
6,Oracle MAA架构
前面聊到一个文件,就是有Adg环境中是否有必要再做Rman的备份,也提到了一些场景中会用到Rman的备份集。其实在我自己原来的工作履历中,给客户设计数据库备份的解决方案中,真的有很多客户没有给他们规划Rman的备份,为什么呢?Rman为Oracle MAA架构中的一部分,结合MAA中的技术、客户的需求和硬件的环境,无需Rman的技术仍然可以满足客户的需求。Oracle MAA的架构图如下:

图片引用Oracle在B站上公开分享的内容。
附录
#!/bin/sh
export LANG=en_US.UTF-8
SHELL_HOME=/home/oracle
RMAN_DATA=`date '+%Y%m%d%H'`
if [ ! -d "$SHELL_HOME/log" ]
then
mkdir -p $SHELL_HOME/log
fi
RMAN_LOG_FILE=${SHELL_HOME}/log/`echo ${0}|awk -F '/' '{print $NF}'`_${RMAN_DATA}.out
if [ -f "$RMAN_LOG_FILE" ]
then
rm -f "$RMAN_LOG_FILE"
fi
RMAN_IMAGE_DIR=/oracle/backup/orcl
echo "rman image output directory:${RMAN_IMAGE_DIR}">>$RMAN_LOG_FILE
echo Script $0 >> $RMAN_LOG_FILE
echo ==== started on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
ORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1
export ORACLE_HOME
ORACLE_SID=orcl
export ORACLE_SID
COMPRESSED=1
echo "compressed type: $COMPRESSED" >> $RMAN_LOG_FILE
TARGET_CONNECT_STR=sys/manager
RMAN=$ORACLE_HOME/bin/rman
echo >> $RMAN_LOG_FILE
echo "RMAN: $RMAN" >> $RMAN_LOG_FILE
echo "ORACLE_SID: $ORACLE_SID" >> $RMAN_LOG_FILE
echo "ORACLE_USER: $ORACLE_USER" >> $RMAN_LOG_FILE
echo "ORACLE_HOME: $ORACLE_HOME" >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
INCR_DATA=`date '+%A'`
if [ "$INCR_DATA" = "Sunday" ]
then
echo "Full backup requested" >> $RMAN_LOG_FILE
BACKUP_TYPE="INCREMENTAL LEVEL=0"
TAG_NAME="HOT_DB_BK_LEVEL_0_"$RMAN_DATA
else
echo "Differential incremental backup requested" >> $RMAN_LOG_FILE
BACKUP_TYPE="INCREMENTAL LEVEL=1"
TAG_NAME="HOT_DB_BK_LEVEL_1_"$RMAN_DATA
fi
if [ "$COMPRESSED"="1" ]
then
COMPRESS_TYPE="as compressed backupset"
echo "enable compressed backupset" >> $RMAN_LOG_FILE
else
COMPRESS_TYPE='';
echo "disable compressed backupset" >> $RMAN_LOG_FILE
fi
echo "BACKUP_TYPE">> $RMAN_LOG_FILE
echo ${BACKUP_TYPE} >> $RMAN_LOG_FILE
ORACLE_HOME=$ORACLE_HOME
export ORACLE_HOME
ORACLE_SID=$ORACLE_SID
export ORACLE_SID
$RMAN target $TARGET_CONNECT_STR nocatalog msglog $RMAN_LOG_FILE append << EOF
RUN {
ALLOCATE CHANNEL ch00 TYPE DISK;
ALLOCATE CHANNEL ch01 TYPE DISK;
# crosscheck archivelog
CROSSCHECK ARCHIVELOG ALL;
# crosscheck backup image
CROSSCHECK BACKUP;
#DELETE OBSOLETE BACKUP IMAGE
DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 13 DAYS;
#DELETE EXPIRED BACKUP IMAGE
DELETE NOPROMPT EXPIRED BACKUP;
BACKUP
$COMPRESS_TYPE
$BACKUP_TYPE
SKIP INACCESSIBLE
TAG $TAG_NAME
FILESPERSET 2
# recommended format
FORMAT '${RMAN_IMAGE_DIR}/bk_%s_%p_%t'
DATABASE;
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
# backup all archive logs
ALLOCATE CHANNEL ch00 TYPE DISK;
ALLOCATE CHANNEL ch01 TYPE DISK;
BACKUP
$COMPRESS_TYPE
filesperset 20
TAG $TAG_NAME
FORMAT '${RMAN_IMAGE_DIR}/al_%s_%p_%t'
ARCHIVELOG ALL DELETE INPUT;
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
#
# Note: During the process of backing up the database, RMAN also backs up the
# control file. This version of the control file does not contain the
# information about the current backup because "nocatalog" has been specified.
# To include the information about the current backup, the control file should
# be backed up as the last step of the RMAN section. This step would not be
# necessary if we were using a recovery catalog or auto control file backups.
#
ALLOCATE CHANNEL ch00 TYPE DISK;
BACKUP
# recommended format
TAG $TAG_NAME
FORMAT '${RMAN_IMAGE_DIR}/cntrl_%s_%p_%t'
CURRENT CONTROLFILE;
RELEASE CHANNEL ch00;
}
EOF
exit
echo Script $0 >> $RMAN_LOG_FILE
echo ==== end on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
Oracle ADG容灾端部署Rman备份的一些实践经验的更多相关文章
- .Net core2.0+Mysql5.7部署到CentOS7.5完整实践经验
本文为本人最近学习将.Net Core部署到Linux的一些经验总结,也提供点也和我一样对Linux接触不多的.Net Core开发者. 一.部署用到的环境和工具 1.Linux采用最新的CentOS ...
- 三分钟读懂Oracle数据库容灾架之DataGuard
Oracle数据库目前依然处于商用数据库的霸主地位. 运行在Oracle数据库上的核心业务及核心数据的安全性尤为重要. 目前市场上针对Oracle数据库常见的容灾产品大致可以分为两大类. Oracle ...
- 转://三分钟读懂Oracle数据库容灾架之DataGuard
目前市场上针对Oracle数据库常见的容灾产品大致可以分为两大类. Oracle 公司自己的容灾产品 非Oracle公司的容灾产品 Oracle公司目前的容灾产品有我们常见的DataGuard和属于中 ...
- 传统业务上云:跨AZ容灾架构解析
本文由 网易云发布. 数字化转型浪潮之下,采用云计算服务提升业务敏捷性.降低运维成本,成为了传统企业的优选方案.网易云资深解决方案架构师张亮通过某物流企业客户的实际案例,分享了传统业务系统在云上的架 ...
- Oracle ADG环境下的RMAN备份策略
作为IT运维人员,尤其是数据库岗位,数据的备份重于一切. 现在很多用户会有一个普遍误区,认为现在类似ADG这类灾备已经很完善,且实时性也更佳,往往就忽略了传统的备份效用. 但实际上,我们千万不能因为有 ...
- 13.在项目中部署redis企业级数据备份方案以及各种踩坑的数据恢复容灾演练
到这里为止,其实还是停留在简单学习知识的程度,学会了redis的持久化的原理和操作,但是在企业中,持久化到底是怎么去用得呢? 企业级的数据备份和各种灾难下的数据恢复,是怎么做得呢? 1.企业级的持久化 ...
- oracle使用rman备份集恢复方式创建ADG
一.背景 系统: 主库:rhel 6.4 64bit 备库:rhel 6.4 64bit 内存:2G [oracle@dgdb1 ~]$ free -m total used free share ...
- Oracle数据库容灾备份技术探讨
Oracle数据库容灾备份技术探讨 三种Oracle灾备技术 对于Oracle数据库的灾备技术,我们可以从Data Guard,GoldenGate和CDP角度去考虑. Oracle Data Gua ...
- 删库到跑路?还得看这篇Redis数据库持久化与企业容灾备份恢复实战指南
本章目录 0x00 数据持久化 1.RDB 方式 2.AOF 方式 如何抉择 RDB OR AOF? 0x01 备份容灾 一.备份 1.手动备份redis数据库 2.迁移Redis指定db-数据库 3 ...
- Oracle RAC 实验环境RMAN备份v1.01
Oracle RAC 实验环境RMAN备份v1.01 环境:RHEL 6.5 + Oracle GI 11.2.0.4 + RAC 11.2.0.4 (2 nodes) 需求:制定RAMN备份策略 版 ...
随机推荐
- 从浏览器架构认识BOM和DOM
浏览器架构 JavaScript运行在浏览器,BOM就是连接JavaScript代码和浏览器的桥梁,而DOM就是用来操作各种标签元素的. BOM包括 window.history.location.d ...
- Protobuf vs JSON
Protobuf(Protocol Buffers)和 JSON 都是数据序列化格式,但它们在许多方面有着显著的不同.以下是对两者的一些主要比较: 数据大小和速度: Protobuf:由于 Proto ...
- OpenSSH版本升级漏洞修复问题
Hi, I'm @Merbelue 大家好,这篇为大家介绍二进制方式对OpenSSH版本升级,在生产环境中可用于解决版本升级.漏洞修复等. @ 目录 1.环境 2.安装telnet 2.1.检查是否安 ...
- Code Llama:Llama 2 学会写代码了!
引言 Code Llama 是为代码类任务而生的一组最先进的.开放的 Llama 2 模型,我们很高兴能将其集成入 Hugging Face 生态系统!Code Llama 使用与 Llama 2 相 ...
- 每日一练:无感刷新页面(附可运行的前后端源码,前端vue,后端node)
1.前言 想象下,你正常在网页上浏览页面.突然弹出一个窗口,告诉你登录失效,跳回了登录页面,让你重新登录.你是不是很恼火.这时候无感刷新的作用就体现出来了. 2.方案 2.1 redis设置过期时间 ...
- Record - Nov. 20th, 2020 - Exam. SOL
LOC 2020.11.20 - Prob. 1 Desc. & Link. \(C=2^{k}\bmod(a+b+c)\) #include <cstdio> typedef l ...
- 报错AttributeError: Attempted to set WANDB to False, but CfgNode is immutable
问题 今天在跑代码的时候,使用到了wandb记录训练数据. 我在23服务器上跑的好好的,但将环境迁移到80服务器上重新开始跑时,却遇到了如下报错 看这个报错信息是由于wandb没有apis这个属 ...
- LSP 链路状态协议
转载请注明出处: 链路状态协议(Link State Protocol)是一种在计算机网络中用于动态计算路由的协议.它的主要作用是收集网络拓扑信息,为每个节点构建一个准确的网络图,并基于这些信息计算出 ...
- 有关library导入的个人总结和反思
本来帮助朋友找寻一下android的一些特效的demo,结果找到了一个,朋友试验可以,自己却是在导入项目需要的library的时候总是出问题,真的很是丢人,反省反省. 也许专业人士看来这是非常可笑的问 ...
- gitlab ci 用 cypress/playwright 做测试并展示结果至 mr
前言 看了一下官方的教程好像都没有讲怎么将测试结果展示出来,只是给出测试的 ci 脚本,但根据 gitlab 官方的文档是有测试报告的展示的,所以这里给出一个基于 junit 测试报告的展示. 前期准 ...