Oracle 服务管理详解

Oracle 服务管理详解

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

服务(Service)是 Oracle 连接和工作负载管理核心[1]:

详细见:Oracle 服务名与 SID 区别Oracle 应用连续性详解


2. 概念

2.1 服务

- 连接入口
- 工作负载隔离
- 故障切换

2.2 vs SID

- SID:实例
- Service:服务
- 多实例共享

2.3 优势

- 透明
- 负载均衡
- 故障切换

3. 创建

3.1 DBCA

- 创建数据库时
- 配置服务

3.2 srvctl

srvctl add service -d prod -s oltp_svc \
  -preferred prod1,prod2 \
  -available prod3

3.3 DBMS_SERVICE

BEGIN
  DBMS_SERVICE.CREATE_SERVICE(
    service_name => 'oltp_svc',
    network_name => 'oltp_svc'
  );
END;
/

4. 管理

4.1 启动/停止

srvctl start service -d prod -s oltp_svc
srvctl stop service -d prod -s oltp_svc
srvctl status service -d prod -s oltp_svc

4.2 配置

srvctl config service -d prod -s oltp_svc
srvctl modify service -d prod -s oltp_svc \
  -preferred prod1,prod2,prod3

4.3 删除

srvctl remove service -d prod -s oltp_svc

5. Preferred/Available

5.1 Preferred

- 首选实例
- 正常运行
- 优先

5.2 Available

- 备选实例
- Preferred 故障时
- 切换

5.3 故障切换

- Preferred 故障
- 服务切到 Available
- 透明

6. TAF

6.1 配置

srvctl add service -d prod -s taf_svc \
  -preferred prod1,prod2 \
  -tafpolicy BASIC

6.2 TNS

# tnsnames.ora
prod = 
  (DESCRIPTION = 
    (FAILOVER = ON)
    (ADDRESS = ...)
    (CONNECT_DATA = 
      (SERVICE_NAME = prod)
      (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC))
    )
  )

详细见:Oracle TAF 与 TAC 配置详解


7. AC/TAC

7.1 AC

srvctl add service -d prod -s ac_svc \
  -commit_outcome TRUE \
  -retention 86400 \
  -replay_init_time 300 \
  -session_state DYNAMIC

7.2 TAC

srvctl add service -d prod -s tac_svc \
  -commit_outcome TRUE \
  -retention 86400 \
  -replay_init_time 300 \
  -session_state DYNAMIC

详细见:Oracle 应用连续性详解


8. 负载均衡

8.1 Client-side

# tnsnames.ora
LOAD_BALANCE = ON

8.2 Server-side

- Listener 负载
- 基于负载
- 智能选择

8.3 优势

- 均衡
- 性能
- 透明

9. 资源管理

9.1 Resource Manager

-- 服务绑定资源组
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
  plan => 'day_plan',
  group_or_subplan => 'OLTP_GROUP',
  comment => 'OLTP service'
);

9.2 隔离

- 不同服务不同资源
- 隔离
- 性能

9.3 优先级

- OLTP 高
- 报表 低
- 隔离

10. Data Guard 角色

10.1 角色服务

srvctl add service -d prod -s prod_svc \
  -role primary
srvctl add service -d prod -s stby_svc \
  -role physical_standby

10.2 自动切换

- Switchover/Failover
- 服务自动切换
- 透明

10.3 读写分离

- 主:写服务
- 备:读服务
- 隔离

11. 监控

11.1 状态

srvctl status service -d prod

11.2 视图

SELECT name, network_name, enabled FROM dba_services;
SELECT service_id, name FROM v$services;
SELECT service_name, inst_id FROM gv$session;

11.3 性能

SELECT service_name, elapsed_time, cpu_time
FROM dba_hist_sqlstat
WHERE snap_id BETWEEN 100 AND 110;

12. 应用场景

12.1 工作负载隔离

- OLTP 服务
- 报表 服务
- 隔离

12.2 多租户

- 租户服务
- 隔离
- 管理

12.3 故障切换

- Preferred/Available
- 透明
- 高可用

13. 常见问题

13.1 服务不存在

- 检查
- 创建
- 启动

13.2 连接失败

- Listener
- 服务状态
- 检查

13.3 负载不均

- 配置
- LOAD_BALANCE
- 优化

14. 最佳实践

  1. 服务化:所有应用
  2. Preferred/Available:故障切换
  3. TAF/AC:连续
  4. 资源隔离:不同负载
  5. 角色服务:Data Guard
  6. 监控:状态
  7. 测试:故障
  8. 文档:配置
  9. 命名:规范
  10. 演练:切换

15. 参考资料

[1] Oracle Database Administrator’s Guide 19c, “Managing Services” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/