首页 > 数据库 > Oracle > Oracle的service功能简介
Service 是连接oracle的一种方式。而且可以通过service 将不同的连接区分开来。例如,为不同的部门、业务创建不同的service,从而可以将连接映射到不同的服务器上(集群环境)以进行区分。从而也能看出service具有高可用性和负载均衡性。而且通过DRM(资源管理器)可以为不同的service分配不同的资源。
实验环境:
11.2.0.4 双节点RAC,系统为redhat 6.4NODE1的VIP:192.168.17.177
NODE2的VIP: 192.168.17.166
SCANIP:192.168.17.100
一、一 service的创建:
创建一个为名为 mgrser 的service ,优先连接racdb2 ,racdb2 不可用时连接racdb1,管理策略为automatic,Failover方式为basic,Failover type 为session
[oracle@NODE2 ~]$ srvctl add service -d racdb -s mgrser -r racdb2 -a racdb1 -y automatic -m basic -e session -z 3 -w 10
![]()
查看资源状态:
[grid@NODE2 ~]$ crsctl status res -t
发现创建完mgrser后,会有对应的资源ora.racdb.mgrser.svc,只是现在为离线状态。

查看service的状态:为not running
二、启动service:
[oracle@NODE2 ~]$ srvctl start service -d racdb -s mgrser
查看service的状态:发现在racdb2上running。因为我们指定的优先实例为racdb2。
查看资源状态:
[grid@NODE2 ~]$ crsctl status res -t
发现资源ora.racdb.mgrser.svc现在为online状态,且在node2上。
三、二 使用service
在tnsnames.ora 中配置连接串,指定service_name = mgrser
manager1=
(description =
(address = (protocol = tcp)(host = 192.168.17.100)(port = 1521))
(connect_data =
(server = dedicated)
(service_name = mgrser)
))
manager2=
(description =
(address = (protocol = tcp)(host = 192.168.17.177)(port = 1521))
(address = (protocol = tcp)(host = 192.168.17.166)(port = 1521))
(failover= on)
(connect_data =
(service_name = mgrser)
))
两个节点均配置。tnsping保证ping通。
使用连接串manager1连接数据库:sqlplus lpfei/lpf@manager1
NODE1上:
NODE2上:
发现均优先连接racdb2,使用连接串manager2连接数据库也是优先连接到racdb2.
四、三 将racdb2实例关闭
查看mgrser 的status,自动切换到racdb1
检查资源状态,ora.racdb.mgrser.svc也自动切换到racdb1
使用连接串manager1连接数据库:sqlplus lpfei/lpf@manager1
连接到racdb1。
五、四 Open 实例racdb2
racdb2开启后mgrser依然在racdb1上运行,不会自动切换为racdb2,尽管racdb2为优先实例,但是racdb2宕掉后,服务会自动切换到racdb1(如四的实验)。
若要恢复mgrser在racdb2上需执行reload:
[oracle@NODE2 ~]$ srvctl relocate service -d racdb -s mgrser -i racdb1 -t racdb2

六、注意:创建的mgrse 会被注册到监听器上,但是只注册到正在running的实例监听上。
这一点很重要因为在优先实例(如racdb2)宕掉以后,所有的原先连接在racdb2上的连接全都会连接到racdb1上,这是应该的,也是必须的。
但是当racdb2回复后,所有通过服务名为mgrser的连接不会自动切换到racdb2,这有可能会造成racdb1的负载过高。当不知道因为创建service造成时这种现象时,
很可能会以为问题出现在监听器上,有可能会手动添加服务(如:alter system set service_names='mgrser' scope=spfile;)切记这样操作不可行。必须执行reload才行,
或将所有实例都指定为优先组(这样做似乎没有意义了)。
节点二的监听状况:
节点一的监听状况:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31450222/viewspace-2148895/ ,如需转载,请注明出处,否则将追究法律责任。