随着数据库中数据量的不断增加、业务的复杂性提高、各种政策颁布的系统容灾等级要求,数据库备份的工作及备份文件的有效性及备份文件的管理变得愈发重要。在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. 手写promise之分步解析

    promise是es6推出适用于异步请求的构造函数,帮助解决回调地狱的问题,以下内容将自定义实现promise,只包括基本使用,所以一些边界情况考虑没有在内. 如果对promise用法还不熟悉的朋友可 ...

  2. [nginx]lua读取请求体

    前言 nginx默认不读取请求体的数据,但可以通过$request_body内置变量来获取.$request_body存在内存中,如果它的字节大小超过nginx配置的client_body_buffe ...

  3. [git]基于GitLab搭建本地Git服务

    0.准备 (如果选择docker安装)Docker 系统:CentOS 7 1.安装部署GitLab 1.1.使用docker安装中文社区版GitLab 在docker上发现一个中文版的gitlab, ...

  4. 从0开始,Cloudreve开源云盘在centos7上部署,并可在外网访问(资料整合)

    全程我在网络上收集这些资料,太零碎了,每一个一看就会,一动手就废,而且很多都不能实现我白嫖的梦想 我一个人折腾了快一周,现在可以正常访问手机电脑多端访问 给个赞再走吧 此处为没有公网IP(回去折腾你家 ...

  5. 如何通过拼多多订单API接口获取订单详情

    要获取拼多多订单详情,可以使用以下接口: 1. API名称:pdd.order.detail.get 接口说明:此接口用于查询某个订单的详情信息. API文档地址:前往注册 调用该接口需要提供以下参数 ...

  6. Spring中事务的传播行为有哪些?

    Spring中事务的传播行为有哪些? 现在我们来谈一个场景,再来引出事务传播行为这个概念.现在有methodA( ) 和 methodB( ),而且两个方法都显示的开启了事务,那么methodB( ) ...

  7. LeetCode279:完全平方数,动态规划解法超过46%,作弊解法却超过97%

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇概览 这是道高频面试题,值得一看 首先, ...

  8. ATtiny88初体验(七):TWI

    ATtiny88初体验(七):TWI TWI模块介绍 ATtiny88的TWI模块兼容Phillips I2C以及SMBus,支持主从模式,支持7bit地址,最大允许128个不同的从机地址.在多主机模 ...

  9. java正则表达式过滤工具类

    正则表达式过滤工具类 import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @Description : * @D ...

  10. redisson分布式锁的应用——秒杀、超卖 简单例子(分布式锁相关)

    1.常见的分布式事务锁 1.数据库级别的锁 乐观锁,给予加入版本号实现 悲观锁,基于数据库的for update实现 2.Redis,基于SETNX.EXPIRE实现 3.Zookeeper,基于In ...