
好的,我们来深入解析 Oracle 19C 数据库中一个相对特殊且高级的动态性能视图:V$RESTORE_RANGE。
这个视图与 Oracle 的 逻辑备库(Logical Standby) 和 SQL Apply 技术紧密相关,在日常的普通数据库运维中较少接触,但在特定的数据保护和高可用性架构中至关重要。
📖 概述与作用
V$RESTORE_RANGE 视图显示了在逻辑备库(Logical Standby Database)上定义的“恢复范围”(Restore Range)的信息。
- 核心概念:恢复范围是一个由开始SCN和结束SCN定义的区间。它用于限制或过滤逻辑备库的 SQL Apply 进程所应用的重做数据。
- 核心目的:在逻辑备库上,您可能只希望对特定的表、或在特定的时间段内进行数据同步。恢复范围提供了一种机制,告诉 SQL Apply:“只应用从SCN A 到 SCN B 之间的、针对某些表的更改”,而忽略此范围之外的更改或其他表的更改。
简单来说,它回答了这个问题:“我的逻辑备库当前被配置为只应用哪一段重做数据?”
🎯 使用场景
- 数据子集化(Data Subsetting):从一个庞大的生产数据库(主库)中,创建一个只包含特定业务单元、部门或项目数据的逻辑备库。例如,只同步销售相关的表,而不同步HR表。
- 数据共享与分发:将主库的数据更改有选择地分发给不同的下游系统。每个下游逻辑备库可以只接收与其相关的数据子集。
- 临时性数据隔离:在进行数据修复、审计或测试时,临时限制逻辑备库应用重做的范围,完成后即可移除该限制。
- 监控与验证:DBA 使用此视图来确认当前在逻辑备库上设置的恢复范围是否符合预期,包括其SCN范围、状态和关联的过程。
📊 字段含义详解
V$RESTORE_RANGE 视图的字段结构相对固定。下表提供了每个字段的详细解释。
| 字段名 | 数据类型 | 含义与说明 |
|---|---|---|
| PROCESS_ID | NUMBER | 与恢复范围相关联的内部进程的标识符。这是一个指向后台进程的引用,通常与逻辑备库的 SQL Apply 协调进程相关。 |
| START_SCN | NUMBER | 恢复范围的起始系统改变号(SCN)。SQL Apply 将从这个 SCN 开始应用重做数据。 |
| END_SCN | NUMBER | 恢复范围的结束系统改变号(SCN)。SQL Apply 应用重做数据到这个 SCN 为止(不包括此SCN)。 |
| STATUS | VARCHAR2(16) | 恢复范围的当前状态。表示该范围是活跃的还是历史的。主要状态包括: • ACTIVE:该恢复范围当前正在被 SQL Apply 使用。• EXPIRED:该恢复范围已不再使用,可以被清除。 |
| CREATE_TIME | DATE | 恢复范围的创建时间。记录该范围是何时被定义和启用的。 |
| SPARE1 | NUMBER | 备用字段1。Oracle 内部保留字段,用于未来扩展或特殊用途。通常为 NULL,对用户无意义。 |
| SPARE2 | NUMBER | 备用字段2。Oracle 内部保留字段,用于未来扩展或特殊用途。通常为 NULL,对用户无意义。 |
| SPARE3 | VARCHAR2(1000) | 备用字段3。Oracle 内部保留字段,用于未来扩展或特殊用途。通常为 NULL,对用户无意义。 |
| CON_ID | NUMBER | 容器ID。在多租户环境(CDB)中,标识该行数据所属的容器。 • 0:表示数据属于整个 CDB。• n (n>1):表示数据属于特定可插拔数据库(PDB)的 ID。 |
🔗 相关视图与基表
-
核心相关视图:
DBA_LOGSTDBY_RESTORE_RANGE:这是一个更常用、更直观的数据字典视图。它提供了与V$RESTORE_RANGE类似但通常更友好的信息,是管理恢复范围的主要接口。V$LOGSTDBY/V$LOGSTDBY_STATS:显示逻辑备库 SQL Apply 进程的状态和统计信息。V$LOGSTDBY_PROCESS:显示逻辑备库上所有协调进程和应用进程的信息。DBA_LOGSTDBY_SKIP:显示使用DBMS_LOGSTDBY.SKIP过程设置的跳过规则,这是另一种控制应用哪些数据的方法,常与恢复范围结合使用。GV$RESTORE_RANGE:在 RAC 环境中,显示所有实例的恢复范围信息。
-
关于基表:
V$RESTORE_RANGE是一个 **动态性能视图(V视图)∗∗。其底层数据来源于逻辑备库实例运行时的∗∗内存结构∗∗,这些结构由∗∗LogMiner∗∗和∗∗SQLApply∗∗组件维护。恢复范围的配置信息可能也持久化在逻辑备库的控制文件或某些内部表中,但主要操作是在内存中进行的。其底层基表可能是像‘X视图)**。其底层数据来源于逻辑备库实例运行时的**内存结构**,这些结构由 **LogMiner** 和 **SQL Apply** 组件维护。 恢复范围的配置信息可能也持久化在逻辑备库的控制文件或某些内部表中,但主要操作是在内存中进行的。其底层基表可能是像 `X视图)∗∗。其底层数据来源于逻辑备库实例运行时的∗∗内存结构∗∗,这些结构由∗∗LogMiner∗∗和∗∗SQLApply∗∗组件维护。恢复范围的配置信息可能也持久化在逻辑备库的控制文件或某些内部表中,但主要操作是在内存中进行的。其底层基表可能是像‘XKCRRSTRNG这样的内部X‘表,但这些对用户是不可见且不稳定的。‘V` 表,但这些对用户是不可见且不稳定的。`V‘表,但这些对用户是不可见且不稳定的。‘VRESTORE_RANGE和DBA_LOGSTDBY_RESTORE_RANGE` 提供了对这些内部数据的标准化访问。
⚙️ 底层原理与知识点
1. 逻辑备库与 SQL Apply:
逻辑备库通过 SQL Apply 技术保持与主库的同步。它不像物理备库那样直接应用数据块更改,而是:
- 从主库接收重做数据(Redo Data)。
- 使用 LogMiner 技术从重做数据中挖掘出原始的 SQL 语句(INSERT, UPDATE, DELETE, DDL)。
- 在备库上执行这些 SQL 语句,从而重现主库的数据变化。
2. 恢复范围的作用机制:
恢复范围正是在上述第二步(LogMiner)中发挥作用。当配置了恢复范围后,LogMiner 会被指示:只挖掘(mine)和返回 START_SCN 到 END_SCN 这个区间内的重做数据所对应的SQL语句。SQL Apply 进程随后也只应用这些过滤后的SQL。
- 这是一种基于SCN的过滤,非常精确。
- 它通常与
DBMS_LOGSTDBY.SKIP过程创建的跳过规则结合使用。跳过规则是基于对象(表、模式)的过滤,而恢复范围是基于时间的过滤。
3. 工作流程:
- DBA 使用
DBMS_LOGSTDBY.ASSIGN_RESTORE_RANGE过程在逻辑备库上定义一个恢复范围(指定START_SCN和END_SCN)。 - 这个配置被记录到内存结构中,并反映在
V$RESTORE_RANGE视图中,状态为ACTIVE。 - SQL Apply 协调进程指示 LogMiner 仅处理指定 SCN 范围内的日志。
- LogMiner 将挖掘出的SQL传递给 SQL Apply 应用进程。
- 应用进程在备库上执行这些SQL。
- 当处理到
END_SCN时,该范围的状态可能变为EXPIRED,或者由新的范围定义所取代。
4. 与物理备库的区别:
物理备库(Physical Standby)没有也不需要使用 V$RESTORE_RANGE。物理备库使用 Redo Apply,它应用的是整个数据块的更改,是全部应用或不应用,无法进行这种细粒度的、基于SQL的过滤。这是逻辑备库独有的功能。
🛠️ 常用查询 SQL
- 查看当前所有恢复范围
SELECT PROCESS_ID,
START_SCN,
END_SCN,
STATUS,
CREATE_TIME,
CON_ID
FROM V$RESTORE_RANGE
ORDER BY CREATE_TIME;
- 使用 DBA_LOGSTDBY_RESTORE_RANGE 视图(更推荐)
SELECT * FROM DBA_LOGSTDBY_RESTORE_RANGE;
- 检查当前活跃的恢复范围
SELECT PROCESS_ID, START_SCN, END_SCN, CREATE_TIME
FROM V$RESTORE_RANGE
WHERE STATUS = 'ACTIVE';
- 定义一个新的恢复范围
这是通过DBMS_LOGSTDBY包完成的,而不是 SQL 查询。
-- 定义一个从 SCN 1234567 开始,到 SCN 2345678 结束的恢复范围
BEGIN
DBMS_LOGSTDBY.ASSIGN_RESTORE_RANGE(
start_scn => 1234567,
end_scn => 2345678);
END;
/
- 清除过期的恢复范围
BEGIN
DBMS_LOGSTDBY.PURGE_RESTORE_RANGE;
END;
/
💎 总结
V$RESTORE_RANGE 是 Oracle Data Guard 逻辑备库(Logical Standby)架构中的一个高级管理视图。它的核心价值在于:
- 精细控制:提供了基于 SCN 范围的、极其精确的重做数据应用控制能力。
- 数据子集化:是实现“从一个大型生产库中提取一个特定数据子集”这一复杂需求的关键技术组件。
- 状态监控:允许 DBA 监控和验证逻辑备库上设置的过滤规则是否按预期工作。
重要提示:使用此功能需要对 Oracle Data Guard 和逻辑备库有深入的理解。错误的恢复范围设置可能导致数据不一致。通常,DBA_LOGSTDBY_RESTORE_RANGE 视图对于日常管理来说更加直观和友好。这个功能主要用于特定的数据分发和子集化场景,并非标准逻辑备库配置的一部分。
欢迎关注我的公众号《IT小Chen
6736

被折叠的 条评论
为什么被折叠?



