Oracle service 的管理及应用
一、 Service介绍
本文主要介绍oracle service的基础知识及几个service使用场景。
Service 是从Oracle 8i 引入的一个新功能,它可以为客户端提供一种新的连接方式。Service 是字面翻译是服务, 在oracle数据库当中,service可以当做是一组客户端或者应用的逻辑组合。每个单独的service 可以设定其自己的属性,以满足不同的需要。
官方介绍如下:
Database services (services) are logical abstractions for managing workloads in Oracle Database. Services divide workloads into mutually disjoint groupings. 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]} [-k network_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
基本操作如下:
Oracle owner用户下执行
srvctl add service:
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 -t racdb2 -f
srvctl relocate service:
srvctl relocate service -d racdb -s service_test -i racdb1 -t racdb2 –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_SERVICES or 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的应用场景只举例了以上两点,其他一些应用场景,欢迎大家参与探讨。
--BY JWL
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30109892/viewspace-1984770/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30109892/viewspace-1984770/