一.Service介绍
本文主要介绍oracle service的基础知识及几个service使用场景。
Service是从Oracle 8i 引入的一个新功能,它可以为客户端提供一种新的连接方式。Service 是字面翻译是服务, 在oracle数据库当中,service可以当做是一组客户端或者应用的逻辑组合。每个单独的service 可以设定其自己的属性,以满足不同的需要。
官方介绍如下:
Database services (services) are logical abstractions for managingworkloads in Oracle Database. Services divide workloads into mutually disjointgroupings. Each service represents a workload with common attributes,service-level thresholds, and priorities.
参数:service_names,可以指定一个或多个名称用于客户端连接数据库实例。实例通过监听程序对service进行注册,客户端请求一个服务时,监听程序决定哪个实例响应,并为客户端分配相应的实例。
默认的两个service:SYS$BACKGROUND仅由后台进程使用,SYS$USERS没有分配到service的连接使用,如通过配置 SID 进行的连接。这两个服务在监听中是不注册的。
如:客户端配置
RACDB_SID =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.159.53)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(ORACLE_SID =racdb1)
)
)
SELECT USERNAME,SERVICE_NAME FROM GV$SESSION WHERE USERNAME='TEST';

二.Service创建管理
可以使用srvctl工具、OEM、dbms_service包来创建或管理service。
dbms_service主要用于单机环境管理service,基本使用如下:
DBMS_SERVICE.CREATE_SERVICE 创建 service
DBMS_SERVICE.DELETE_SERVICE 删除 service
DBMS_SERVICE.DISCONNECT_SESSION 断开 service
DBMS_SERVICE.MODIFY_SERVICE 修改 service
DBMS_SERVICE.START_SERVICE 启动 service
DBMS_SERVICE.STOP_SERVICE 停止 service
以下是srvctl管理service的演示。
添加service的参数
srvctl add service -d db_unique_name -s service_name {-r"preferred_list"
[-a "available_list"][-P {BASIC | NONE | PRECONNECT}] | -g server_pool
[-c {UNIFORM | SINGLETON]} [-knetwork_number]
[-l [PRIMARY | PHYSICAL_STANDBY| LOGICAL_STANDBY | SNAPSHOT_STANDBY]
[-y {AUTOMATIC | MANUAL}] [-q{TRUE | FALSE}] [-x {TRUE | FALSE}]
[-j {SHORT | LONG}][-B {NONE |SERVICE_TIME | THROUGHPUT}]
[-e {NONE | SESSION | SELECT}][-m {NONE | BASIC}] [-z failover_retries]
[-w failover_delay]
其他参数使用可以参照:
http://docs.oracle.com/cd/E11882_01/rac.112/e41960/srvctladmin.htm#RACAD7405
基本操作如下:
Oracleowner用户下执行
srvctl addservice

srvctl add service -d racdb -s service_test -r racdb1 -a racdb2-P NONE -j LONG -e SELECT -m BASIC -z 10 -w 180 -B SERVICE_TIME

srvctl config service
srvctl config service -d racdb -s service_test

srvctl status service
srvctl status service -d racdb -s service_test -f -v

srvctl start service
srvctl start service -d racdb -s service_test -i racdb1
srvctl stop service
srvctl stop service -d racdb -s service_test -f -i racdb1
srvctl enable service
srvctl enable service -d racdb -s service_test -i racdb1
srvctl disable service
srvctl disable service -d racdb -s service_test -i racdb1
srvctl modify service
srvctl modify service -d racdb -s service_test -i racdb1 -tracdb2 -f
srvctl relocate service
srvctl relocate service -d racdb -s service_test -i racdb1 -tracdb2 –f
srvctl remove service
srvctl remove service -d racdb -s service_test

srvctl remove service -d racdb -s service_test -f
三.Service应用
Service有哪些实用的场景呢?我们一起来探讨下。
1.业务分类
使用service可以将不同的应用进行分类,使不同的应用或者客户端连接到不同的服务,这样就可以在数据库级别按照service分析各应用模块的性能。
比如一个系统分交易类业务和结算类业务。我们可以创建2个服务: TRAN、SETTLE
相应的可以通过AWR等途径进行各个模块性能分析

一些实用的分析视图:
DBA_SERVICES
ALL_SERVICESor V$SERVICES
V$ACTIVE_SERVICES
V$SERVICE_STATS
V$SERVICE_EVENT
V$SERVICE_WAIT_CLASSES
V$SERV_MOD_ACT_STATS
V$SERVICE_METRICS
V$SERVICE_METRICS_HISTORY
V$SESSION
V$ACTIVE_SESSION_HISTORY
DBA_RSRC_GROUP_MAPPINGS
DBA_SCHEDULER_JOB_CLASSES
DBA_THRESHOLDS
AWR中报告的统计:

2.实例高可用
当前实例宕机,service failover方式切换到其他可用实例。
这里列举一种常用的读写分离ADG(Active Data Guard)架构。当读库不可用时,通过在读写库配置统一的服务名(service),实现应用的自动切换,对业务无影响。
数据库连接串配置说明:
读库的IP放在首位,优先访问读库。
关闭负载均衡,设置LOAD_BALANCE=off,避免session随机访问写库,只有当读库出现故障,session才会自动连接到写库。
这样就可以实现当读库故障时,及时切换到主库查询。
配置如下:
TEST=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 读库IP)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 写库IP)(PORT = 1521))
(LOAD_BALANCE = OFF)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TEST)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
service的应用场景只举例了以上两点,其他一些应用场景,欢迎大家参与探讨。




