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))
)
)
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. 最佳实践
- 服务化:所有应用
- Preferred/Available:故障切换
- TAF/AC:连续
- 资源隔离:不同负载
- 角色服务:Data Guard
- 监控:状态
- 测试:故障
- 文档:配置
- 命名:规范
- 演练:切换
15. 参考资料
[1] Oracle Database Administrator’s Guide 19c, “Managing Services” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/