数据库管理-第352期 从需求看懂Oracle RAC多租户环境的Service(20250729)

数据库管理352期 2025-07-29

数据库管理-第352期 从需求看懂Oracle RAC多租户环境的Service(20250729)

text 复制代码
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE Partner

10年数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家
圈内拥有"总监"称号,非著名社恐(社交恐怖分子)

公众号:胖头鱼的鱼缸
CSDN:胖头鱼的鱼缸(尹海文)
墨天轮:胖头鱼的鱼缸
ITPUB:yhw1809
IFClub:胖头鱼的鱼缸
除授权转载并标明出处外,均为"非法"抄袭

在最早写的几篇文章中,我写过在Oracle RAC多租户环境下如何配置Service,由于是刚刚开始写,写的不咋滴,回头看我感觉自己都有点看不明白,今天花一篇文章用实际需求(案例)来讲清楚RAC下常用的Service配置。

1 环境说明

这里说一下基本环境:

  • 版本为19c
  • 4节点RAC
  • 数据库名称问racdb
  • 实例名分别为racdb1、racdb2、racdb3、racdb4
  • rac1-3用于生产,rac4用于基本测试

2 srvctl

在Oracle RAC多租户环境下配置Service,我们需要在oracle用户下使用srvctl命令来添加Service,可以通过下面方式来获取命令帮助:

bash 复制代码
srvctl add service -help

3 需求与解决

3.1 需要一个测试库Service

创建一个运行在racdb4实例上的测试PDB的Service

PDB名称 Service名称 常驻实例 可用实例
pdb_test testdb racdb4 -
bash 复制代码
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

这时候可以通过下面的连接字符串访问到对应数据库:

bash 复制代码
scan_ip:1521/testdb

3.2 创建生产数据库Service

创建一个常驻运行在racdb1实例上的数据库Service,在racdb1出现异常时,racdb2可以接管该Service

PDB名称 Service名称 常驻实例 可用实例
pdb_test db1 racdb1 racdb2
bash 复制代码
srvctl add service -db racdb -pdb pdb_test -s db1 -preferred racdb1 -available racdb2
srvctl start service -db racdb -s db1

这时候可以通过下面的连接字符串访问到对应数据库:

bash 复制代码
scan_ip:1521/db1
在此基础上增加session级别失败转移

常驻实例出现异常时,整个会话会被转移到可用实例执行

bash 复制代码
srvctl modify service -db racdb -s db1 -failovertype session
再加上失败转移恢复后回切至原实例

racdb1出现异常恢复后,运行在racdb2上的Service将回到racdb1上运行

bash 复制代码
srvctl modify service -db racdb -s db1 -failback YES
调整为TRANSACTION级别失败转移

常驻实例出现异常时,整个事务会被转移到可用实例执行

bash 复制代码
srvctl modify service -db racdb -s db1 -failovertype transaction -commit_outcome true
添加一个常驻实例
bash 复制代码
srvctl modify service -db racdb -s db1 -modifyconfig -preferred racdb1,racdb3  -available racdb2

修改完成后,服务不会在新添加的实例上运行,需要手工启动。

3.3 创建一个备库Service

默认创建的Service的角色是PRIMARY。在ADG环境中,当主备角色切换后角色变更为PHYSICAL_STANDBY启动的Service

PDB名称 Service名称 常驻实例 可用实例
pdb_test db1_ro racdb1 racdb2
bash 复制代码
srvctl add service -db racdb -pdb pdb_test -s db1_ro -preferred racdb1 -available racdb2 -role physical_standby

当数据库以PHYSICAL_STANDBY角色启动后可以通过下面的连接字符串访问到对应数据库:

bash 复制代码
scan_ip:1521/db1_ro

总结

本期通过实际需求与案例介绍了Oracle RAC多租户环境的Service。

老规矩知道写了些啥。

相关推荐
程序员卷卷狗2 小时前
MySQL 高可用方案:主从 + MHA + ProxySQL + PXC 的实战应用与架构思考
数据库·mysql·架构
千千寰宇2 小时前
[数据库/数据结构] LSM-Tree :结构化的日志合并树——NewSQL数据库的基石
数据库
韩立学长3 小时前
基于Springboot的研学旅游服务系统5u416w14(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·旅游
isNotNullX3 小时前
怎么理解ETL增量抽取?
数据库·数据仓库·etl·企业数字化
谅望者3 小时前
数据分析笔记14:Python文件操作
大数据·数据库·笔记·python·数据挖掘·数据分析
l1t4 小时前
调用python函数的不同方法效率对比测试
开发语言·数据库·python·sql·duckdb
honortech4 小时前
MySQL 8 连接报错:Public Key Retrieval is not allowed
数据库·mysql
q***82914 小时前
MySQL--》如何通过选择合适的存储引擎提高查询效率?
数据库·mysql·adb
q***96584 小时前
MySql-9.1.0安装详细教程(保姆级)
数据库·mysql
2501_941111404 小时前
使用Scrapy框架构建分布式爬虫
jvm·数据库·python