面试宝典:介绍下Oracle数据库动态性能视图V$ACTIVE_INSTANCES

在这里插入图片描述

Oracle 19c V$ACTIVE_INSTANCES 动态性能视图详解

核心作用

V$ACTIVE_INSTANCESRAC(Real Application Clusters)环境专用的动态性能视图,主要作用是:

  1. 实时显示集群中所有活动实例的状态
  2. 提供实例连接信息(主机名、实例名、实例号)
  3. 作为客户端连接和负载均衡的元数据源
  4. 集群健康监控的基础视图

关键特性

  • RAC环境专属:单实例数据库中此视图为空
  • 实时性:反映查询时刻集群状态
  • 只读性:数据来自内存结构
  • 全局视角:在任一节点查询都显示整个集群信息

字段详解

字段名数据类型描述
INST_NUMBERNUMBER实例编号:集群中分配给实例的唯一数字标识 (1~255)
INST_NAMEVARCHAR2(80)实例名称:由INSTANCE_NAME参数定义的唯一名称 (如orcl1, orcl2)
HOST_NAMEVARCHAR2(80)主机名:运行实例的服务器网络名称 (如dbhost01, dbhost02)

📌 注意:字段名可能显示为INST_NUMBERINSTANCE_NUMBER(取决于Oracle版本),但含义相同


基表与底层原理

底层结构X$KJIA(Cluster Group Management Instance Activity 表)

数据来源

  1. 集群注册服务(Cluster Registration Service, CRS)
  2. LMON进程(Global Enqueue Service Monitor)
  3. 实时集群心跳机制

工作原理

  1. 实例启动时向集群注册信息
  2. LMON进程定期发送心跳信号
  3. 集群同步服务更新X$KJIA内存结构
  4. V$ACTIVE_INSTANCES提供该结构的可读视图

数据生命周期

  • 实例启动时添加记录
  • 实例正常关闭时移除记录
  • 实例故障时超时移除(默认60秒)

核心使用场景

  1. 集群健康检查

    SELECT * FROM V$ACTIVE_INSTANCES;
    

    预期输出(3节点RAC示例):

    INST_NUMBER INST_NAME HOST_NAME
    ----------- --------- -----------
             1 orcl1     dbhost01
             2 orcl2     dbhost02
             3 orcl3     dbhost03
    
  2. 客户端连接配置
    用于配置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))
    
  3. 自动化脚本基础

    #!/bin/bash
    # 获取所有活动实例的主机名
    sqlplus -s / as sysdba <<EOF
    SET PAGES 0 FEEDBACK OFF
    SELECT HOST_NAME FROM V\$ACTIVE_INSTANCES;
    EOF
    
  4. 故障转移验证
    检查故障后剩余活动节点:

    SELECT COUNT(*) active_nodes 
    FROM V$ACTIVE_INSTANCES;
    
  5. 与全局视图(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

  1. 基础集群信息查询

    SELECT inst_number "ID", 
           inst_name "Instance", 
           host_name "Host"
    FROM v$active_instances
    ORDER BY inst_number;
    
  2. 实例状态监控

    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;
    
  3. 服务到主机的映射

    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;
    
  4. 连接负载分布

    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;
    
  5. 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;
    

重要注意事项

  1. 权限要求:需要SELECT ANY DICTIONARY或显式授予SELECT ON V_$ACTIVE_INSTANCES
  2. 与V$INSTANCE的区别
    • V$INSTANCE:当前连接实例的信息
    • V$ACTIVE_INSTANCES:集群所有活动实例信息
  3. 数据延迟:实例状态变化后可能有<30秒延迟
  4. 单实例行为:在非RAC环境中始终返回空集
  5. 与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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值