
Oracle 19c V$ACTIVE_INSTANCES 动态性能视图详解
核心作用
V$ACTIVE_INSTANCES 是 RAC(Real Application Clusters)环境专用的动态性能视图,主要作用是:
- 实时显示集群中所有活动实例的状态
- 提供实例连接信息(主机名、实例名、实例号)
- 作为客户端连接和负载均衡的元数据源
- 集群健康监控的基础视图
关键特性
- RAC环境专属:单实例数据库中此视图为空
- 实时性:反映查询时刻集群状态
- 只读性:数据来自内存结构
- 全局视角:在任一节点查询都显示整个集群信息
字段详解
| 字段名 | 数据类型 | 描述 |
|---|---|---|
INST_NUMBER | NUMBER | 实例编号:集群中分配给实例的唯一数字标识 (1~255) |
INST_NAME | VARCHAR2(80) | 实例名称:由INSTANCE_NAME参数定义的唯一名称 (如orcl1, orcl2) |
HOST_NAME | VARCHAR2(80) | 主机名:运行实例的服务器网络名称 (如dbhost01, dbhost02) |
📌 注意:字段名可能显示为
INST_NUMBER或INSTANCE_NUMBER(取决于Oracle版本),但含义相同
基表与底层原理
底层结构:X$KJIA(Cluster Group Management Instance Activity 表)
数据来源:
- 集群注册服务(Cluster Registration Service, CRS)
- LMON进程(Global Enqueue Service Monitor)
- 实时集群心跳机制
工作原理:
- 实例启动时向集群注册信息
- LMON进程定期发送心跳信号
- 集群同步服务更新
X$KJIA内存结构 V$ACTIVE_INSTANCES提供该结构的可读视图
数据生命周期:
- 实例启动时添加记录
- 实例正常关闭时移除记录
- 实例故障时超时移除(默认60秒)
核心使用场景
-
集群健康检查
SELECT * FROM V$ACTIVE_INSTANCES;预期输出(3节点RAC示例):
INST_NUMBER INST_NAME HOST_NAME ----------- --------- ----------- 1 orcl1 dbhost01 2 orcl2 dbhost02 3 orcl3 dbhost03 -
客户端连接配置
用于配置TNS连接串的负载均衡:ORCL_RAC = (DESCRIPTION = (LOAD_BALANCE=ON) (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=dbhost01)(PORT=1521)) (ADDRESS=(PROTOCOL=TCP)(HOST=dbhost02)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=orcl)) -
自动化脚本基础
#!/bin/bash # 获取所有活动实例的主机名 sqlplus -s / as sysdba <<EOF SET PAGES 0 FEEDBACK OFF SELECT HOST_NAME FROM V\$ACTIVE_INSTANCES; EOF -
故障转移验证
检查故障后剩余活动节点:SELECT COUNT(*) active_nodes FROM V$ACTIVE_INSTANCES; -
与全局视图(GV$)联动
SELECT gi.inst_id, ai.host_name, COUNT(*) sessions FROM gv$session gi JOIN v$active_instances ai ON gi.inst_id = ai.inst_number GROUP BY gi.inst_id, ai.host_name;
常用查询SQL
-
基础集群信息查询
SELECT inst_number "ID", inst_name "Instance", host_name "Host" FROM v$active_instances ORDER BY inst_number; -
实例状态监控
SELECT inst_number, CASE WHEN EXISTS ( SELECT 1 FROM gv$instance i WHERE i.inst_id = a.inst_number AND status = 'OPEN' ) THEN 'OPEN' ELSE 'DOWN' END status FROM v$active_instances a; -
服务到主机的映射
SELECT i.inst_name, s.name service, i.host_name FROM v$active_services s JOIN v$active_instances i ON s.inst_id = i.inst_number; -
连接负载分布
SELECT ai.host_name, ai.inst_name, COUNT(s.sid) current_connections FROM v$session s JOIN v$active_instances ai ON s.inst_id = ai.inst_number WHERE s.type != 'BACKGROUND' GROUP BY ai.host_name, ai.inst_name; -
CRS集成检查
SELECT ai.inst_number, crs.state FROM v$active_instances ai LEFT JOIN ( SELECT target_name, state FROM dba_services WHERE name = 'CRS' ) crs ON ai.inst_name = crs.target_name;
重要注意事项
- 权限要求:需要
SELECT ANY DICTIONARY或显式授予SELECT ON V_$ACTIVE_INSTANCES - 与V$INSTANCE的区别:
V$INSTANCE:当前连接实例的信息V$ACTIVE_INSTANCES:集群所有活动实例信息
- 数据延迟:实例状态变化后可能有<30秒延迟
- 单实例行为:在非RAC环境中始终返回空集
- 与OCR的关系:信息独立于OCR(Oracle Cluster Registry),反映运行时状态
典型输出示例
SQL> SELECT * FROM V$ACTIVE_INSTANCES;
INST_NUMBER INST_NAME HOST_NAME
----------- --------- ---------------
1 orcl1 db-server-01
2 orcl2 db-server-02
通过V$ACTIVE_INSTANCES,DBA可以快速掌握RAC集群的运行状态,为负载均衡、故障转移和集群监控提供基础数据支持。
欢迎关注我的公众号《IT小Chen》
2499

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



