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

在这里插入图片描述

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

核心作用

V$ACTIVE_SERVICES 是 Oracle RAC 和多租户环境中关键的动态性能视图,主要用于:

  1. 实时监控活动的数据库服务
  2. 展示服务的配置属性和运行状态
  3. 管理服务在RAC实例间的分布
  4. 诊断服务相关的连接问题
  5. 验证服务高可用性配置

关键特性

  • 实时性:反映当前活动服务的状态
  • RAC感知:显示服务在集群中的分布
  • 多租户支持:包含PDB级别的服务信息
  • 配置可见性:展示服务的所有关键属性
  • 动态更新:服务状态变化时自动刷新

字段详解(Oracle 19c)

字段名数据类型描述
NAMEVARCHAR2(64)服务名称(唯一标识)
SERVICE_IDNUMBER服务的唯一数字ID
NETWORK_NAMEVARCHAR2(256)监听器注册的网络服务名
GOALVARCHAR2(10)服务目标:
- NONE:无目标
- SERVICE_TIME:基于响应时间均衡
- THROUGHPUT:基于吞吐量均衡
CLB_GOALVARCHAR2(7)连接负载均衡目标:
- LONG:长连接(默认)
- SHORT:短连接
AQ_HA_NOTIFICATIONSVARCHAR2(3)高级队列高可用通知是否启用(YES/NO)
DTPVARCHAR2(3)分布式事务处理是否启用(YES/NO)
FAILOVER_METHODVARCHAR2(30)故障转移方法:
- NONE
- BASIC
- PRECONNECT
- SELECT
FAILOVER_TYPEVARCHAR2(30)故障转移类型:
- NONE
- SESSION
- SELECT
FAILOVER_RETRIESNUMBER故障转移重试次数
FAILOVER_DELAYNUMBER故障转移延迟时间(秒)
EDITIONVARCHAR2(64)服务关联的数据库版本
PDBVARCHAR2(64)服务所属的PDB名称(多租户环境)
ENABLEDVARCHAR2(3)服务是否启用(YES/NO)
ROLEVARCHAR2(16)服务角色:
- PRIMARY
- PHYSICAL_STANDBY
- LOGICAL_STANDBY
BLOCKEDVARCHAR2(3)服务是否被阻止(YES/NO)
INST_IDNUMBER服务运行的实例ID(0表示所有实例)
PLUGGABLEVARCHAR2(3)是否属于可插拔数据库(YES/NO)
CONNECTION_LOAD_BALANCEVARCHAR2(3)连接负载均衡是否启用(YES/NO)
RETAIN_CONSOLIDATIONVARCHAR2(3)是否保留服务整合(YES/NO)
HA_NOTIFICATIONSVARCHAR2(3)高可用通知是否启用(YES/NO)

基表与底层原理

底层结构X$KSLSERVICE(Kernel Service Layer Service 表)

数据来源

  1. 服务注册信息(DBMS_SERVICEsrvctl 创建)
  2. 监听器动态注册
  3. Oracle Clusterware(RAC环境)
  4. 多租户容器数据库(CDB)元数据

工作原理

  1. 服务创建时注册到数据字典
  2. PMON进程将服务信息注册到监听器
  3. 在RAC环境中,服务信息同步到所有节点
  4. 服务状态实时更新到内存结构X$KSLSERVICE
  5. V$ACTIVE_SERVICES提供该结构的可读视图

数据生命周期

  • 服务启动时添加记录
  • 配置变更时更新记录
  • 服务停止时移除记录

核心使用场景

1. 服务状态监控
SELECT name, network_name, pdb, enabled, blocked, role
FROM v$active_services;
2. RAC服务分布检查
SELECT name, inst_id, 
       CASE inst_id WHEN 0 THEN 'All Instances' ELSE 'Instance '||inst_id END location
FROM v$active_services
WHERE name = 'OLTP_SVC';
3. 故障转移配置验证
SELECT name, failover_method, failover_type, failover_retries, failover_delay
FROM v$active_services
WHERE failover_method != 'NONE';
4. PDB服务管理(多租户)
SELECT name, pdb, edition, enabled
FROM v$active_services
WHERE pdb = 'SALES_PDB';
5. 负载均衡配置检查
SELECT name, goal, clb_goal, connection_load_balance
FROM v$active_services
WHERE goal != 'NONE' OR clb_goal != 'LONG';

常用查询SQL示例

1. 基础服务信息查询
SELECT name AS service_name,
       network_name,
       pdb,
       enabled,
       blocked,
       role,
       failover_method,
       failover_type
FROM v$active_services
ORDER BY pdb, name;
2. RAC服务分布详情
SELECT s.name, 
       a.inst_number,
       a.inst_name,
       a.host_name
FROM v$active_services s
JOIN v$active_instances a 
  ON (s.inst_id = a.inst_number OR s.inst_id = 0)
WHERE s.inst_id > 0;
3. 高可用配置检查
SELECT name,
       failover_method,
       failover_type,
       failover_retries,
       failover_delay,
       aq_ha_notifications
FROM v$active_services
WHERE role = 'PRIMARY';
4. PDB服务状态概览
SELECT pdb, 
       COUNT(*) total_services,
       SUM(CASE WHEN enabled='YES' THEN 1 ELSE 0 END) active_services,
       SUM(CASE WHEN blocked='YES' THEN 1 ELSE 0 END) blocked_services
FROM v$active_services
WHERE pdb IS NOT NULL
GROUP BY pdb;
5. 服务连接统计(结合GV$SESSION)
SELECT s.name service,
       COUNT(*) sessions,
       ROUND(AVG(sql_exec_time),2) avg_exec_time
FROM gv$session sess
JOIN v$active_services s ON sess.service_name = s.name
WHERE sess.type = 'USER'
GROUP BY s.name;
6. 查找未运行的服务
SELECT d.name AS defined_service
FROM dba_services d
WHERE NOT EXISTS (
  SELECT 1 
  FROM v$active_services a 
  WHERE a.name = d.name
);

服务管理操作示例

创建服务
BEGIN
  DBMS_SERVICE.CREATE_SERVICE(
    service_name => 'REPORT_SVC',
    network_name => 'report',
    aq_ha_notifications => TRUE,
    failover_method => 'BASIC',
    failover_type => 'SELECT',
    failover_retries => 5,
    failover_delay => 10);
END;
启动服务
ALTER SYSTEM SET SERVICE_NAMES = 'REPORT_SVC' SCOPE=MEMORY;
停止服务
ALTER SYSTEM SET SERVICE_NAMES = '' SCOPE=MEMORY;

重要注意事项

  1. 权限要求:需要SELECT_CATALOG_ROLESELECT ON V_$ACTIVE_SERVICES权限
  2. RAC环境:使用GV$ACTIVE_SERVICES查看所有实例
  3. 与服务注册关系:服务必须在监听器注册才能被客户端访问
  4. 与DBA_SERVICES区别
    • DBA_SERVICES:所有定义的服务(包括非活动)
    • V$ACTIVE_SERVICES:当前活动的服务
  5. 多租户限制:CDB级别查询显示所有PDB服务,PDB级别只显示本容器服务

性能影响

  • 查询该视图开销较低
  • 在高并发RAC环境中,建议使用GV$ACTIVE_SERVICES替代多次单实例查询
  • 避免在频繁执行的监控脚本中直接查询,可通过AWR报告间接获取数据

通过V$ACTIVE_SERVICES,DBA可以全面掌握数据库服务的运行状态,有效管理RAC服务分布,确保服务高可用性和负载均衡配置正确实施。

欢迎关注我的公众号《IT小Chen

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值