
理解您对Oracle 19C数据库中 V$STANDBY_LOG 动态性能视图的深入探索需求。由于该视图在DataGuard物理备库环境中至关重要,且搜索结果中相关信息较为零散,接下来我将结合自己的知识,为您提供一份详细的说明,并严格注意表格的清晰度。
V$STANDBY_LOG 视图主要用于监控和管理物理备库(Physical Standby)上的备用重做日志(Standby Redo Log, SRL)文件。SRL是物理备库特有的日志文件,其结构与在线重做日志(Online Redo Log, ORL)相同,但作用是专门接收并存储从主库传输过来的重做数据。
以下是该视图的详细说明:
📊 字段含义详解
| 字段名称 | 数据类型 | 含义与说明 |
|---|---|---|
GROUP# | NUMBER | 备用重做日志组编号。 |
THREAD# | NUMBER | 日志线程编号。在单实例环境中通常为1,在RAC环境中对应不同的实例线程。 |
SEQUENCE# | NUMBER | 日志序列号。表示当前正在被写入或最后一次被写入的SRL组的序列号。 |
BYTES | NUMBER | 备用重做日志组的大小(单位:字节)。重要:此值应大于或等于主库中最大的在线重做日志组的大小。 |
USED | NUMBER | 当前日志组中已使用的字节数。 |
ARCHIVED | VARCHAR2(3) | 该备用重做日志组是否已被归档。• YES - 已归档• NO - 未归档 |
STATUS | VARCHAR2(16) | 备用重做日志组的当前状态。常见状态包括: • UNASSIGNED - 日志组未被分配使用(空闲状态)。• ACTIVE - 日志组正在被使用(正在接收重做数据或等待归档)。• CLEARING - 日志组正在被清除(例如执行了ALTER DATABASE CLEAR LOGFILE命令)。• CLEARING_CURRENT - 当前正在使用的日志组被请求清除。 |
FIRST_CHANGE# | NUMBER | 该日志组中记录的第一个系统变更号(SCN)。 |
FIRST_TIME | DATE | FIRST_CHANGE#对应的SCN的时间戳。 |
NEXT_CHANGE# | NUMBER | 该日志组中记录的最后一个SCN的下一个SCN。通常用于标识日志的结束范围。 |
NEXT_TIME | DATE | NEXT_CHANGE#对应的SCN的时间戳。 |
LAST_CHANGE# | NUMBER | 数据文件最新更新SCN号。如果Datafile正在被更改,值为NULL。 |
LAST_TIME | DATE | LAST_CHANGE#对应的时间戳。 |
BLOCKSIZE | NUMBER | 日志文件块大小(单位:字节)。由操作系统平台决定(如512或4096)。 |
DBID | NUMBER | 派发此SRL的主库数据库标识符(DBID)。如果SRL未被分配,则值为UNASSIGNED。 |
CON_ID | NUMBER | 容器ID。在多租户环境(CDB)中,标识此日志所属的容器。对于非CDB环境,此值通常为0。 |
🔍 主要作用与使用场景
- 作用:
- 监控SRL状态:实时查看各SRL组的使用情况、归档状态及序列号,确保备库正常接收主库重做数据。
- 诊断日志传输与应用:结合
STATUS和ARCHIVED等字段,判断重做数据接收和应用过程中是否存在延迟或问题(如日志组未及时归档)。 - 容量与配置管理:验证SRL组的大小和数量是否满足要求(应至少比主库ORL组多一组,且大小不小于主库最大ORL)。
- 场景:
- DataGuard物理备库日常监控。
- 配置或调整备用重做日志后,验证其是否创建成功且状态正常。
- 主库进行大量数据变更后,观察备库SRL的切换和归档状态,确保同步正常。
- 备库出现
RFS、MRP进程相关等待事件或归档慢时,用于诊断。
🔗 相关视图与基表
- 相关视图:
V$LOG:查看在线重做日志(ORL) 的信息。V$LOGFILE:查看所有重做日志文件(包括在线和备用)的物理文件信息(如状态、路径)。TYPE字段可区分ONLINE和STANDBY。V$MANAGED_STANDBY:监控备库核心进程(如RFS、MRP)的状态,与V$STANDBY_LOG中的序列号关联可分析进程处理进度。V$ARCHIVED_LOG:查看归档日志信息,其中的APPLIED字段可指示归档日志是否已在备库应用。
- 基表:动态性能视图通常基于
X$系列的内存结构表。V$STANDBY_LOG很可能源自诸如X$KCCSL之类的内部表。注意:X$表是 Oracle 内部使用的,强烈不建议用户直接查询。
⚙️ 底层原理与工作机制
-
SRL 的创建与作用:
- SRL 必须在物理备库上创建,其结构与在线重做日志相同。
- 主库的重做数据通过 RFS(Remote File Server)进程****直接传输到备库的 SRL 中,而不是先在主库归档再传输。这为实时应用(Real-Time Apply) 提供了基础,允许 MRP 进程直接从 SRL 读取和应用重做数据,极大减少了数据延迟。
-
工作流程:
- 主库的 LNS(Log Writer Network Server)进程(或在某些模式下是 ARCn 进程)将重做数据通过网络发送到备库。
- 备库的 RFS 进程接收这些重做数据,并将其写入当前活动的 SRL 组中。
- 当发生日志切换时(主库切换 ORL 会触发备库切换 SRL),当前 SRL 组会被归档,RFS 进程开始写入下一个可用的 SRL 组。
- 备库的 MRP(Media Recovery Process)进程负责读取 SRL(或已归档的 SRL 归档日志)中的重做数据,并将其应用到备库的数据文件中,保持与主库的数据同步。
-
数据来源:
V$STANDBY_LOG视图中的信息主要来源于控制文件。控制文件记录了所有日志文件(包括 SRL)的元数据信息和当前状态。
📝 常用查询 SQL 示例
1. 查看所有备用重做日志组的基本信息
SELECT GROUP#,
THREAD#,
SEQUENCE#,
BYTES/1024/1024 "SIZE_MB",
USED/1024/1024 "USED_MB",
ARCHIVED,
STATUS,
FIRST_CHANGE#,
NEXT_CHANGE#
FROM V$STANDBY_LOG
ORDER BY GROUP#;
2. 检查备用重做日志的状态和归档情况(关键监控)
SELECT GROUP#,
SEQUENCE#,
STATUS,
ARCHIVED,
CASE WHEN ARCHIVED = 'NO' AND STATUS = 'ACTIVE'
THEN 'Not Archived - Needs Attention'
ELSE 'Normal'
END AS "REMARK"
FROM V$STANDBY_LOG;
3. 验证备用重做日志配置是否足够(数量)
SELECT THREAD#, COUNT(*) "STANDBY_LOG_COUNT"
FROM V$STANDBY_LOG
GROUP BY THREAD#;
建议:每个线程的 SRL 组数应至少比对应主库线程的 ORL 组数多一个。
4. 结合 V$LOGFILE 查看备用重做日志的物理文件信息
SELECT SL.GROUP#,
SL.STATUS,
SL.ARCHIVED,
LF.MEMBER,
LF.STATUS AS "FILE_STATUS",
LF.IS_RECOVERY_DEST_FILE
FROM V$STANDBY_LOG SL
JOIN V$LOGFILE LF ON (SL.GROUP# = LF.GROUP#)
WHERE LF.TYPE = 'STANDBY'
ORDER BY SL.GROUP#, LF.MEMBER;
⚠️ 重要注意事项
- 权限要求:查询
V$STANDBY_LOG通常需要具有SELECT权限。可能需要管理员授予SELECT ON V_$STANDBY_LOG给相应用户。 - 仅限备库:此视图仅在物理备库数据库上有有效信息。在主库或逻辑备库上查询此视图可能返回空值或无效数据。
- 配置建议:
- SRL 文件的大小必须大于或等于主库中最大的在线重做日志文件的大小。
- SRL 组的数量应至少比主库的在线重做日志组多一个(针对每个线程),以确保不会因为所有SRL组都处于活动或未归档状态而等待可用的SRL组,从而避免重做传输中断。
- 状态解读:密切关注
STATUS和ARCHIVED列。长时间处于ACTIVE且ARCHIVED为NO可能意味着归档进程或应用进程出现问题。 - 多租户环境:在 CDB 环境中,此视图显示整个 CDB 级别的信息。
CON_ID列有助于区分不同容器的日志(虽然通常SRL在CDB级别管理)。
希望以上信息能帮助您全面了解 V$STANDBY_LOG 视图。如果您在实践中遇到其他问题,欢迎随时提出!
欢迎关注我的公众号《IT小Chen》
1363

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



