随着数据库中数据量的不断增加、业务的复杂性提高、各种政策颁布的系统容灾等级要求,数据库备份的工作及备份文件的有效性及备份文件的管理变得愈发重要。在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备份中,可以使用不同的保留策略来管理备份集的保留期限。其中,基于恢复窗口和冗余是两种常见的保留策略。

  1. 基于恢复窗口的保留策略:

    • 描述: 恢复窗口是指在特定时间范围内可以使用的备份集。基于恢复窗口的保留策略允许您设置备份在一定的时间窗口内有效,而超出该时间窗口的备份将被自动删除。
    • 配置方法: 在RMAN脚本或命令中,您可以使用CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF <n> DAYS;来设置基于恢复窗口的保留策略,其中<n>是您希望的恢复窗口的天数。
    • 影响: RMAN将自动删除超出指定恢复窗口的备份,以确保备份集的大小在可控范围内,同时提供了较短的恢复时间窗口。
  2. 基于冗余的保留策略:
    • 描述: 基于冗余的保留策略是指设置备份集的冗余副本数量。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

那是否没有办法实现备库环境自定义备份文件的保留策略了呢?其实可以通过如下的两个版本:

  1. 修改主库控制文件的方法

    在主库修改备份文件的保留策略,然后将备份控制文件,在还原到备库环境,此时备库环境就继承了主库环境的备份文件的保留策略。

  2. 通过Rman命令制定备份集保留策略

    比如在Rman的delete命令中,手动制定备份集的保留策略,同样支持恢复窗口和冗余两种方式,如下

    • 恢复窗口模式
    DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 2 DAYS;
    • 冗余模式
    DELETE NOPROMPT OBSOLETE REDUNDANCY 2;

3,ADG环境的备份元数据同步

上面内容实现了备份文件集的保留策略的管理,下面就是备份文件集的元数据在主库和备库之前的同步。首先我们聊聊什么是备份元数据?

备份的元数据指的是备份操作相关的信息和描述。这些元数据包括备份集的结构、备份的类型、备份的位置、备份集内的文件信息等。以下是一些常见的Oracle RMAN备份元数据:

  1. 备份集信息: RMAN备份创建一个或多个备份集,其中包含了备份的数据。备份集的元数据包括备份集的唯一标识符、创建时间、备份集的状态等。
  2. 备份集内的文件信息: RMAN备份集内包含了一个或多个数据库文件的备份。每个文件备份都有相关的元数据,包括文件名、大小、类型(全备份、增量备份等)、创建时间等。
  3. 备份集的位置信息: 元数据还包括备份集的存储位置,这可能是磁盘、磁带或其他媒体。这对于后续的恢复操作非常重要。
  4. 备份的类型和级别: RMAN支持全备份、增量备份等不同类型的备份,元数据中包含了备份的类型信息。此外,还包括备份的级别,例如完整备份、差异备份等。
  5. 恢复目标信息: 元数据中可能包含指示备份的恢复目标信息,例如完全恢复数据库、部分恢复等。

通过这些元数据,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备份的一些实践经验的更多相关文章

  1. .Net core2.0+Mysql5.7部署到CentOS7.5完整实践经验

    本文为本人最近学习将.Net Core部署到Linux的一些经验总结,也提供点也和我一样对Linux接触不多的.Net Core开发者. 一.部署用到的环境和工具 1.Linux采用最新的CentOS ...

  2. 三分钟读懂Oracle数据库容灾架之DataGuard

    Oracle数据库目前依然处于商用数据库的霸主地位. 运行在Oracle数据库上的核心业务及核心数据的安全性尤为重要. 目前市场上针对Oracle数据库常见的容灾产品大致可以分为两大类. Oracle ...

  3. 转://三分钟读懂Oracle数据库容灾架之DataGuard

    目前市场上针对Oracle数据库常见的容灾产品大致可以分为两大类. Oracle 公司自己的容灾产品 非Oracle公司的容灾产品 Oracle公司目前的容灾产品有我们常见的DataGuard和属于中 ...

  4. 传统业务上云:跨AZ容灾架构解析

    本文由  网易云发布. 数字化转型浪潮之下,采用云计算服务提升业务敏捷性.降低运维成本,成为了传统企业的优选方案.网易云资深解决方案架构师张亮通过某物流企业客户的实际案例,分享了传统业务系统在云上的架 ...

  5. Oracle ADG环境下的RMAN备份策略

    作为IT运维人员,尤其是数据库岗位,数据的备份重于一切. 现在很多用户会有一个普遍误区,认为现在类似ADG这类灾备已经很完善,且实时性也更佳,往往就忽略了传统的备份效用. 但实际上,我们千万不能因为有 ...

  6. 13.在项目中部署redis企业级数据备份方案以及各种踩坑的数据恢复容灾演练

    到这里为止,其实还是停留在简单学习知识的程度,学会了redis的持久化的原理和操作,但是在企业中,持久化到底是怎么去用得呢? 企业级的数据备份和各种灾难下的数据恢复,是怎么做得呢? 1.企业级的持久化 ...

  7. oracle使用rman备份集恢复方式创建ADG

    一.背景 系统: 主库:rhel 6.4 64bit 备库:rhel 6.4 64bit   内存:2G [oracle@dgdb1 ~]$ free -m total used free share ...

  8. Oracle数据库容灾备份技术探讨

    Oracle数据库容灾备份技术探讨 三种Oracle灾备技术 对于Oracle数据库的灾备技术,我们可以从Data Guard,GoldenGate和CDP角度去考虑. Oracle Data Gua ...

  9. 删库到跑路?还得看这篇Redis数据库持久化与企业容灾备份恢复实战指南

    本章目录 0x00 数据持久化 1.RDB 方式 2.AOF 方式 如何抉择 RDB OR AOF? 0x01 备份容灾 一.备份 1.手动备份redis数据库 2.迁移Redis指定db-数据库 3 ...

  10. 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备份策略 版 ...

随机推荐

  1. DDD项目落地之充血模型实践

    背景: 充血模型是DDD分层架构中实体设计的一种方案,可以使关注点聚焦于业务实现,可有效提升开发效率.提升可维护性: 1.DDD项目落地整体调用关系 调用关系图中的Entity为实体,从进入领域服务( ...

  2. SAP 传输请求释放及传输过程 SE10 STMS

    T-CODE:SE10 STMS 1.传输请求释放 首先通过SE10打开传输组织器. 点击[显示],可以看到待释放的请求. 此时将可修改请求中的请求,点击进行展开,可以看到子请求号和请求属性. 选中请 ...

  3. 【译】Silverlight 不会消亡 XAML for Blazor 到来

    Userware 正在使用早已消失的.令人怀念的微软 Silverlight Web 开发平台的遗留来支持其新的"XAML for Blazor"产品,该产品允许 .NET 开发人 ...

  4. 如何在.NET电子表格应用程序中创建流程图

    前言 流程图是一种常用的图形化工具,用于展示过程中事件.决策和操作的顺序和关系.它通过使用不同形状的图标和箭头线条,将任务和步骤按照特定的顺序连接起来,以便清晰地表示一个过程的执行流程. 在企业环境中 ...

  5. 基于Python的HTTP代理爬虫开发初探

    前言 HTTP代理爬虫在爬取网页数据时,使用Python程序模拟客户端请求,同时使用HTTP代理服务器来隐藏客户端的真实IP地址.这样可以有效防止在爬取大量网页数据时被目标网站封禁IP地址. 以下是基 ...

  6. 基于TRE文章的非线性模型化线性方法

    之前写过一篇有关TRE优化模型详解的博文: https://www.cnblogs.com/zoubilin/p/17270435.html 这篇文章里面的附录给出了非线性模型化线性的方式,具体内容如 ...

  7. 使用 TensorFlow 进行机器学习

    使用 TensorFlow 进行机器学习 这是使用 TensorFlow 进行机器学习的官方代码存储库. 使用 TensorFlow(Google 最新.最好的机器学习库)开始进行机器学习. 概括 第 ...

  8. Installing Gradle

    Chapter 4. Installing Gradle 4.1. Prerequisites Gradle requires a Java JDK or JRE to be installed, v ...

  9. CF1368B

    题目简化和分析: 因为要求长度最小,所以我们每个字符就应该发挥最大的价值,不会有没有作用的字符. 设有 \(x_1\) 个 \(c\) ,\(x_2\) 个 \(o\) ,\(x_3\) 个 \(d\ ...

  10. 小提琴图的绘制方法:Python matplotlib实现

      本文介绍基于Python中matplotlib模块与seaborn模块,利用多个列表中的数据,绘制小提琴图(Violin Plot)的方法.   小提琴图作为一种将箱型图与核密度图分别所能表达的信 ...