
Oracle 19c V$ACTIVE_SERVICES 动态性能视图详解
核心作用
V$ACTIVE_SERVICES 是 Oracle RAC 和多租户环境中关键的动态性能视图,主要用于:
- 实时监控活动的数据库服务
- 展示服务的配置属性和运行状态
- 管理服务在RAC实例间的分布
- 诊断服务相关的连接问题
- 验证服务高可用性配置
关键特性
- 实时性:反映当前活动服务的状态
- RAC感知:显示服务在集群中的分布
- 多租户支持:包含PDB级别的服务信息
- 配置可见性:展示服务的所有关键属性
- 动态更新:服务状态变化时自动刷新
字段详解(Oracle 19c)
| 字段名 | 数据类型 | 描述 |
|---|---|---|
NAME | VARCHAR2(64) | 服务名称(唯一标识) |
SERVICE_ID | NUMBER | 服务的唯一数字ID |
NETWORK_NAME | VARCHAR2(256) | 监听器注册的网络服务名 |
GOAL | VARCHAR2(10) | 服务目标: - NONE:无目标- SERVICE_TIME:基于响应时间均衡- THROUGHPUT:基于吞吐量均衡 |
CLB_GOAL | VARCHAR2(7) | 连接负载均衡目标: - LONG:长连接(默认)- SHORT:短连接 |
AQ_HA_NOTIFICATIONS | VARCHAR2(3) | 高级队列高可用通知是否启用(YES/NO) |
DTP | VARCHAR2(3) | 分布式事务处理是否启用(YES/NO) |
FAILOVER_METHOD | VARCHAR2(30) | 故障转移方法: - NONE- BASIC- PRECONNECT- SELECT |
FAILOVER_TYPE | VARCHAR2(30) | 故障转移类型: - NONE- SESSION- SELECT |
FAILOVER_RETRIES | NUMBER | 故障转移重试次数 |
FAILOVER_DELAY | NUMBER | 故障转移延迟时间(秒) |
EDITION | VARCHAR2(64) | 服务关联的数据库版本 |
PDB | VARCHAR2(64) | 服务所属的PDB名称(多租户环境) |
ENABLED | VARCHAR2(3) | 服务是否启用(YES/NO) |
ROLE | VARCHAR2(16) | 服务角色: - PRIMARY- PHYSICAL_STANDBY- LOGICAL_STANDBY |
BLOCKED | VARCHAR2(3) | 服务是否被阻止(YES/NO) |
INST_ID | NUMBER | 服务运行的实例ID(0表示所有实例) |
PLUGGABLE | VARCHAR2(3) | 是否属于可插拔数据库(YES/NO) |
CONNECTION_LOAD_BALANCE | VARCHAR2(3) | 连接负载均衡是否启用(YES/NO) |
RETAIN_CONSOLIDATION | VARCHAR2(3) | 是否保留服务整合(YES/NO) |
HA_NOTIFICATIONS | VARCHAR2(3) | 高可用通知是否启用(YES/NO) |
基表与底层原理
底层结构:X$KSLSERVICE(Kernel Service Layer Service 表)
数据来源:
- 服务注册信息(
DBMS_SERVICE或srvctl创建) - 监听器动态注册
- Oracle Clusterware(RAC环境)
- 多租户容器数据库(CDB)元数据
工作原理:
- 服务创建时注册到数据字典
- PMON进程将服务信息注册到监听器
- 在RAC环境中,服务信息同步到所有节点
- 服务状态实时更新到内存结构
X$KSLSERVICE 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;
重要注意事项
- 权限要求:需要
SELECT_CATALOG_ROLE或SELECT ON V_$ACTIVE_SERVICES权限 - RAC环境:使用
GV$ACTIVE_SERVICES查看所有实例 - 与服务注册关系:服务必须在监听器注册才能被客户端访问
- 与DBA_SERVICES区别:
DBA_SERVICES:所有定义的服务(包括非活动)V$ACTIVE_SERVICES:当前活动的服务
- 多租户限制:CDB级别查询显示所有PDB服务,PDB级别只显示本容器服务
性能影响
- 查询该视图开销较低
- 在高并发RAC环境中,建议使用
GV$ACTIVE_SERVICES替代多次单实例查询 - 避免在频繁执行的监控脚本中直接查询,可通过AWR报告间接获取数据
通过V$ACTIVE_SERVICES,DBA可以全面掌握数据库服务的运行状态,有效管理RAC服务分布,确保服务高可用性和负载均衡配置正确实施。
欢迎关注我的公众号《IT小Chen》
5851

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



