Oracle RMAN备份元数据管理

Oracle RMAN备份元数据管理

一、概述

在Oracle数据库中,rman备份信息的记录(即称为rman备份元数据),可以有两种记录方式

1、默认方式,备份信息记录在控制文件中,默认记录最近7天的备份元数据(存放在控制文件的循环使用空间部分)

2、创建并配置专用的rman catalog数据库(即称为rman备份catalog库),用于存放其它数据库的备份元数据

二、控制文件存储

不管是否创建并使用专用的rman catalog数据库,控制文件中都会保存rman备份元数据信息,这是刚性行为,不可更改!

复制代码
-- 默认保存7天,如下
show parameter control_file_record_keep_time
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7

如果生产环境中不创建并使用专用的rman catalog数据库,仅使用控制文件来保存备份信息,建议将保存时间调整为31天以上,如下

复制代码
--仅使用控制文件来保存备份信息,建议将保存时间调整为31天以上
--该参数为静态参数,需要重启生效
alter system set control_file_record_keep_time=31 scope=spfile;

三、RMAN CATALOG数据库存储

RMAN CATALOG 配置与管理

1、创建RMAN CATALOG数据库

备注:一个常规的ORACLE数据库,专用于保存其它数据库的rman备份信息

2、创建表空间与用户

在 CATALOG 数据库中准备存储环境,即创建专用的用户和专属存储表空间

复制代码
-- 创建表空间,用于存储 catalog 元数据,自动扩展最大 30G
create tablespace tbs_catalog datafile '/oradata/orcl/tbs_catalog_001.dbf' size 100m autoextend on maxsize 30g;

-- 创建用户 rc_admin,默认表空间为 tbs_catalog,配额无限
create user rc_admin identified by oracle default tablespace tbs_catalog quota unlimited on tbs_catalog;

-- 授予连接、资源及恢复目录所有者权限
grant connect,resource ,recovery_catalog_owner to rc_admin;

3、生产库配置 TNS 指向 CATALOG

配置本地 tnsnames.ora,使数据库能连接到存储 RMAN 元数据的 CATALOG 数据库。

bash 复制代码
cat >>$ORACLE_HOME/network/admin/tnsnames.ora <<'EOF'
rmancatalog = 
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.52)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
EOF

--验证
tail -10 $ORACLE_HOME/network/admin/tnsnames.ora

4. 创建与升级 CATALOG

bash 复制代码
## 需要保存备份信息的库(生产库),通过rman catalog连接至 CATALOG 库创建目录结构
rman catalog=rc_admin/oracle@rmancatalog
create catalog;

# 同时连接目标库 和 CATALOG 库,升级目录(如果是旧版本升级上来)
rman target=sys/oracle@orcl catalog=rc_admin/oracle@rmancatalog
#第一次执行,会让你继续再次执行,以确认to confirm catalog upgrade
upgrade catalog; 
#enter UPGRADE CATALOG command again to confirm catalog upgrade
#需要再次执行
upgrade catalog;

#再次执行后的输出
#recovery catalog upgraded to version 11.02.00.04
#DBMS_RCVMAN package upgraded to version 11.02.00.04
#DBMS_RCVCAT package upgraded to version 11.02.00.04

5. 注册目标数据库

bash 复制代码
# 将目标数据库注册到 CATALOG 中
register database;
# 输出信息
#database registered in recovery catalog
#starting full resync of recovery catalog
#full resync complete

# 同步 CATALOG 信息
rman target=sys/oracle@orcl catalog=rc_admin/oracle@rmancatalog
resync catalog;
# 输出信息
#starting full resync of recovery catalog
#full resync complete

6. CDB 与 PDB 注册差异

在多租户环境(CDB/PDB)中,若要单独注册 PDB,需在 CATALOG 库中启用 VPD(虚拟私有数据库)支持。

  • 报错现象 :直接注册 PDB 报错 RMAN-07543: recovery catalog does not have VPD support enabled

    复制代码
    # pdb连接catalog数据库
    [oracle@host01 admin]$ rman target=sys/oracle@pdb1 catalog=rc_admin/oracle@rmancatalog
    Recovery Manager: Release 19.0.0.0.0 - Production on Mon Dec 18 17:25:41 2023
    Version 19.3.0.0.0
    Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
    connected to target database: PRODCDB:PDBPROD1 (DBID=2269085771, not open)
    connected to recovery catalog database
    
    # 报错信息
    RMAN> show all;
    RMAN configuration parameters for database with db_unique_name PRODCDB are:
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of show command at 12/18/2023 17:25:56
    RMAN-07552: VPC support required when target database is pluggable database
    RMAN-07543: recovery catalog does not have VPD support enabled
    
    # 报错说明
    [oracle@host01 admin]$ oerr rman 07543
    7543, 1, "recovery catalog does not have VPD support enabled"
    // *Cause:  An attempt was made to use virtual recovery catalog features
    //          without a proper VPD setup for the base catalog.
    // *Action: 1. Execute '?/rdbms/admin/dbmsrmanvpc.sql -vpd <owner>' after
    //          connecting to a catalog database as SYS to grant VPD-required
    //          privileges to the base catalog owner.
    //          2. Reconnect to RMAN base catalog and perform UPGRADE CATALOG.
    //          3. Retry the failed operation
  • 解决方法:

    bash 复制代码
    # 在 CATALOG 库中以 SYS 身份运行脚本启用 VPD
    $ sqlplus sys/oracle@rmancatalog as sysdba
    @$ORACLE_HOME/rdbms/admin/dbmsrmanvpc.sql -vpd RMAN
    #该脚本用于在多租户环境中为 RMAN CATALOG 启用虚拟私有目录支持,允许将 PDB 注册为独立的目标。
    #输出类似如下
    #Checking the operating user... Passed
    #Granting VPD privileges to the owner of the base catalog schema RMAN
    #========================================
    #No eligible RMAN catalogs have been found!
    #Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    #Version 19.3.0.0.0
    
    # 重新连接并升级 CATALOG
    rman catalog RMAN/RMAN@rmancatalog
    upgrade
    upgrade
    #至此就可以了

四、RMAN CATALOG的常用维护命令

创建、升级、注册的维护命令

命令 作用说明
UPGRADE CATALOG; 升级 CATALOG :在升级了 RMAN 可执行文件后,首次连接时会提示 CATALOG 需要升级。需连续执行两次该命令以确认。
DROP CATALOG; 删除 CATALOG危险操作。会删除 CATALOG 用户下的所有 RMAN 元数据表。仅在重建 CATALOG 时使用。
CREATE CATALOG; 创建 CATALOG:在 CATALOG 数据库中,为指定的 RMAN 用户创建元数据存储表。
REGISTER DATABASE; 注册数据库:将一个新的目标数据库注册到 CATALOG 中。
UNREGISTER DATABASE; 注销数据库 :从 CATALOG 中移除一个数据库的记录(不会删除物理备份文件)。

备份元数据同步与维护命令

命令 作用说明
RESYNC CATALOG; 手动同步:将目标数据库控制文件中的备份信息同步到 CATALOG 数据库。通常在执行了非 RMAN 的文件操作(如手动删除归档日志)后使用。
RESYNC CATALOG FROM DB_UNIQUE_NAME ALL; 在 DG 环境中,一个恢复目录通常会同时管理主库(Primary)和备库(Standby)。由于备库的备份操作可能直接在备库上执行,其控制文件中的元数据与恢复目录中的记录可能会不一致 加上 FROM DB_UNIQUE_NAME ALL:无论你现在连接的是主库还是备库,RMAN 都会去同步恢复目录里记录的所有**数据库(包括主库和所有备库)的元数据,确保整个 DG 环境的备份信息在恢复目录中是完整和最新的
REPORT OBSOLETE; 报告过期 :根据配置的保留策略(如 CONFIGURE RETENTION POLICY),列出所有已"过期"的备份集和归档日志。这些备份不再需要用于恢复。
DELETE OBSOLETE; 删除过期核心维护命令 。物理删除由 REPORT OBSOLETE 列出的备份片,并从 CATALOG 中清除其元数据记录,释放磁盘空间。
CROSSCHECK BACKUP; 交叉检查 :核对 CATALOG 中记录的备份片是否真实存在于磁盘或磁带上。如果文件已丢失,会将状态更新为 EXPIRED
DELETE EXPIRED BACKUP; 清理失效记录 :删除那些在 CROSSCHECK 后被标记为 EXPIRED 的备份记录。
CHANGE BACKUPSET <id> UNAVAILABLE; 标记不可用 :当某个备份片所在的磁盘临时不可访问时,可将其标记为 UNAVAILABLE,RMAN 在恢复时将忽略它。
CHANGE BACKUPSET <id> AVAILABLE; 标记可用 :当磁盘恢复访问后,将其状态改回 AVAILABLE

清理与删除命令(手动清理特定的备份记录)

复制代码
# 1. 删除指定天数的过期备份
DELETE OBSOLETE RECOVERY WINDOW OF 7 DAYS;

# 2. 删除冗余度超过 N 份的备份
DELETE OBSOLETE REDUNDANCY = 2;

# 3. 手动删除指定的备份集
DELETE BACKUPSET 101;

# 4. 手动删除指定数据文件的镜像副本
DELETE DATAFILECOPY '/path/to/datafile_copy.dbf';

# 5. 删除所有归档日志(慎用!)
DELETE ARCHIVELOG ALL;

# 6. 删除7天前的所有归档日志
DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-7';
相关推荐
程序猿乐锅1 小时前
从 dsh 源码看「一切皆插件」与 Spring IoC
java·网络·数据库·人工智能·后端·spring
这就是佬们吗1 小时前
AI Agent 的四根支柱:LLM、工具、记忆与规划是如何协同的
大数据·数据库·人工智能
lq_bog1 小时前
spring事务失效
java·数据库·spring
词却1 小时前
数据库基础:MySQL 安装与基础操作
数据库·mysql
xieliyu.1 小时前
MySQL 进阶笔记:用户 / 会话 / 全局 / 局部变量 + CASE 分支语法
开发语言·数据库·笔记·mysql
xcLeigh2 小时前
把CPU、内存、网络流量同时丢给TimechoAI,做交叉分析
数据库·内存·时序数据库·cpu·网络流量·timechoai·交叉分析
不好听6132 小时前
外键的 ON DELETE 与 ON UPDATE:父子表如何联动
数据库
ZGG0032 小时前
底座 01:Agent 的 token 成本怎么砍——Redis 缓存实战
数据库·redis·缓存
小小龙学IT2 小时前
Qt Graphics View Framework(图形视图框架)深度解析:从 Scene/View/Item 到工业级 2D 场景
开发语言·数据库·qt