

在最早写的几篇文章中,我写过在Oracle RAC多租户环境下如何配置Service,由于是刚刚开始写,写的不咋滴,回头看我感觉自己都有点看不明白,今天花一篇文章用实际需求(案例)来讲清楚RAC下常用的Service配置。
这里说一下基本环境:
在Oracle RAC多租户环境下配置Service,我们需要在oracle用户下使用srvctl命令来添加Service,可以通过下面方式来获取命令帮助:
srvctl add service -help

创建一个运行在racdb4实例上的测试PDB的Service
PDB名称 | Service名称 | 常驻实例 | 可用实例 |
|---|---|---|---|
pdb_test | testdb | racdb4 | - |
srvctl add service -db racdb -pdb pdb_test -s testdb -preferred racdb4
srvctl start service -db racdb -s testdb
# 可以通过下面命令来查看Service运行与配置情况
srvctl config service -db racdb -s testdb

这时候可以通过下面的连接字符串访问到对应数据库:
scan_ip:1521/testdb
创建一个常驻运行在racdb1实例上的数据库Service,在racdb1出现异常时,racdb2可以接管该Service
PDB名称 | Service名称 | 常驻实例 | 可用实例 |
|---|---|---|---|
pdb_test | db1 | racdb1 | racdb2 |
srvctl add service -db racdb -pdb pdb_test -s db1 -preferred racdb1 -available racdb2
srvctl start service -db racdb -s db1

这时候可以通过下面的连接字符串访问到对应数据库:
scan_ip:1521/db1
常驻实例出现异常时,整个会话会被转移到可用实例执行
srvctl modify service -db racdb -s db1 -failovertype session

racdb1出现异常恢复后,运行在racdb2上的Service将回到racdb1上运行
srvctl modify service -db racdb -s db1 -failback YES

常驻实例出现异常时,整个事务会被转移到可用实例执行
srvctl modify service -db racdb -s db1 -failovertype transaction -commit_outcome true

srvctl modify service -db racdb -s db1 -modifyconfig -preferred racdb1,racdb3 -available racdb2
修改完成后,服务不会在新添加的实例上运行,需要手工启动。


默认创建的Service的角色是PRIMARY。在ADG环境中,当主备角色切换后角色变更为PHYSICAL_STANDBY启动的Service
PDB名称 | Service名称 | 常驻实例 | 可用实例 |
|---|---|---|---|
pdb_test | db1_ro | racdb1 | racdb2 |
srvctl add service -db racdb -pdb pdb_test -s db1_ro -preferred racdb1 -available racdb2 -role physical_standby

当数据库以PHYSICAL_STANDBY角色启动后可以通过下面的连接字符串访问到对应数据库:
scan_ip:1521/db1_ro
本期通过实际需求与案例介绍了Oracle RAC多租户环境的Service。 老规矩知道写了些啥。