随着数据库中数据量的不断增加、业务的复杂性提高、各种政策颁布的系统容灾等级要求,数据库备份的工作及备份文件的有效性及备份文件的管理变得愈发重要。在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. Linux虚拟机报错Job for network.service failed because the control process exited with error codeLinux虚拟机报错的解决方法

    发布于 2 天前  3 次阅读 Linux虚拟机设置静态ip后,突然发现联网连不上了,ssh也无法使用,重启network后仍旧无法使用.按照网络上的方法发现没有效果后,右键如下位置将nat模式转换为 ...

  2. Unity 游戏开发、02 基础篇 | 知识补充、简单使用动画、动画状态机

    前置笔记(由浅入深) Unity 游戏开发.01 基础篇 2 场景操作 3D场景 Q 手型工具(鼠标中键):上下左右移动场景 ALT + 鼠标左键:以视图为中心旋转 鼠标右键:以观察者为中心旋转 SH ...

  3. Mac上使用Royal TSX快速连接到OCI主机

    问题: 每次使用Royal TSX连接到OCI主机都要交互式输入opc这个用户名,次数多了也蛮烦. 那如何既指定用户名,又想要通过ssh私钥登陆机器呢? 这个需求确实很初级,但也着实困扰过我,因为开始 ...

  4. git升级编译安装

    一.删除旧版本git 方法一. yum remove git -y (centos环境) apt-get remove git -y (Ubuntu环境) 方法二. which git [root@p ...

  5. 【python】python开源代理ip池

    一.前言 随着互联网的不断发展,越来越多的应用需要使用高匿代理IP才能访问目标网站,而代理IP作为一种能够隐藏本机真实IP地址的工具,在网络抓取.搜索引擎排名.广告投放.反爬虫等方面有着广泛的应用场景 ...

  6. 兴达易控Modbus转Profinet 网关连接 ACS510 变频器配置案例

    案例简介: 该案例为兴达易控Modbus转Profinet网关(XD-MDPN100)将ABB ACS510 变频器接入西门子 1200PLC.需要设备为西门子 PLC1200.ACS510 变频器. ...

  7. 常用设计模式(Java)

    目录 设计模式引入 1. 什么是设计模式 2. 学习设计模式的意义 3. 设计模式的基本要素 4. OOP七大原则 1.单例模式 1. 饿汉式单例 2. 懒汉式单例 3. 内部类实现单例 4. 反射会 ...

  8. Oracle中的having()函数

    having函数用在group by子句的后面,对分组结果集进行条件筛选. 1.having子句包含聚合函数 /*列出平均工资在1000之上,并且最低工资不低于800的工作信息*/select job ...

  9. tiptopGP5.2链接所有表或报不存在函数处理

    修改交易的表时需要特别注意,改完要关联所有有关的表r.rb.rb pja_file 当链接提示不存在的函数调用,又无法确定具体是那个关联程序时, 可以在本函数内先定义这个报错的函数,重新链接时,系统会 ...

  10. 用MMCls训练手势模型

    import os import json import mmcv import time from mmcv import Config from mmdet.apis import inferen ...