当前位置: 首页 > news >正文

48-Oracle CDB下的SID-实例名-服务名

今天还在努力coding,小伙伴突然说有个业务前置机需要上传数据,给登录用户和密码,也无法连接到实例,还坚持一定要求有V$INSTANCE查询权限,结果每次拿到的SID一会是PROD一会是PROD2(RAC环境的2个节点)同时还是拿不到实例名!!!但是现场其他的业务和服务也都正常。于是就有了SID,intance_name,service_name,在单机和RAC环境还有ADG,业务侧如何稳定链接,老业务如何兼容连接。还在用SID么,早点改造吧

一、概念演进:从单实例到RAC-分布式

1. SID (System Identifier)​​ 
  • 定义​:实例级物理标识(如ORCL),唯一标识一个运行中的数据库实例​(内存+进程)。
  • 作用​:
    • - 关联OS进程(ora_pmon_ORCL);
    • - 决定参数文件命名(spfileORCL.ora);
    • - 通过ORACLE_SID环境变量管理实例。
  • 局限​:
    • 长度≤8字符,修改需重建控制文件;
    • - 仅支持静态注册(需手动配置listener.ora);
    • 无法区分RAC多节点或CDB多租户
2. Instance Name​ 
  • 本质​:与SID等价,是数据库参数文件(init.ora)中的instance_name参数。
  • 关键点​:
    • 在单实例中默认等于SID;
    • - 在RAC中可自定义(如ORCL1、ORCL2),但需与节点SID一致
3. Service Name​ 
  • 起源​:Oracle 8i(1999)引入,​逻辑服务抽象
  • 设计目标​:
    • 解耦物理实例与逻辑服务;
    • - 支持一个数据库对应多个服务名(如reporting_svc、oltp_svc);
    • 突破SID长度限制(支持255字符)。
  • 核心机制​:
    • 动态注册(PMON进程自动向监听器注册);
    • 支持负载均衡(RAC)和故障转移(TAF)。
演进关系​:
​SID(物理) → Instance Name(参数化SID) → Service Name(逻辑抽象)

二、CDB多租户架构的关键变革​

​1. CDB/PDB模型对连接方式改变

标识类型​

​CDB根容器​

​PDB容器​

​SID​

可连接(CDB$ROOT)

无法连接(监听器无法路由)

​Service Name

可连接

唯一合法访问方式

  • 技术上​:PDB作为逻辑数据库单元,​必须通过Service Name路由。SID仅标识CDB实例,无法区分PDB
  • 操作验证​:尝试用SID连接PDB将报错 ​ORA-12505: TNS:listener does not know SID
2. CDB中的Service Name实践
-- 为PDB创建专用服务(非默认服务)
EXEC DBMS_SERVICE.CREATE_SERVICE('MERPDB_HA', 'MERPDB_HA');
EXEC DBMS_SERVICE.START_SERVICE('MERPDB_HA');
  • 优势​:
    • 支持TAF(透明故障转移)、FAN(快速应用通知),RAC环境多节点服务;
    • 可为不同服务分配资源计划(Resource Manager)。

三、RAC + ADG架构下的连接路由​

​1. RAC环境的连接方式

​连接目标

​推荐方式​

​原因​

​单实例直连​

SID(旧)或Service Name

传统兼容,但Service Name更优

​RAC集群​

​Service Name​

负载均衡+故障转移

​ADG备库​

​Service Name​

与主库一致,支持快速切换

  • ADG的连接本质​:ADG作为物理备库,​完全复制主库的Service Name配置。客户端连接ADG时使用与主库相同的Service Name
  • 切换示例​:主库故障时,只需将客户端连接指向ADG的VIP(Virtual IP),无需修改Service Name
2. ADG的三种标识符使用

SID​:

  • 用于备库本地管理​(如ALTER DATABASE RECOVER);
  • 通过ORACLE_SID环境变量启动实例。

Instance Name​:

  • 与备库SID一致,存储在参数文件中。

Service Name​:

  • ​客户端连接的唯一标识,与主库服务名相同(如prod_ha);
  • 监听器通过Service Name路由到ADG实例。

四、现代架构推荐方案​

​1. 标识符使用规范​

​场景​

​推荐标识符​

​示例​

CDB中的PDB连接

Service Name

jdbc:oracle:thin:@//host:1521/salespdb_ha

RAC/ADG高可用连接

Service Name

客户端配置

scan_ip:1521/prod_ha

实例级管理命令

SID

export ORACLE_SID=ORCL1; sqlplus / as sysdba

参数文件配置

Instance Name

instance_name = ORCL1

双轨过渡​:监听器中并行支持SID和Service Name,逐步切换应用连接。 

 五、统一配置建议

​场景​

​SID/Instance Name​

​Service Name​

​单实例​

实例管理(startup命令)

客户端连接、监听器注册

​RAC集群​

节点管理(srvctl命令)

负载均衡、TAF、应用路由

​ADG容灾​

备库本地操作

主备一致、VIP透明切换

​CDB多租户

CDB根容器管理

​PDB唯一访问方式

核心原则​:

Service Name​:所有客户端连接、高可用场景的唯一选择。

SID​:仅限实例级运维(启停、备份),禁止暴露给应用。

ADG/RAC​:主备服务名严格一致,通过VIP/IP切换实现故障转移

六、演进和未来的选择

通过逻辑服务层(Service Name)屏蔽底层架构复杂性,是Oracle高可用设计的精髓,也是分布式与云原生时代的必然选择

现代架构

  1. 弃用SID连接​:在RAC/CDB/ADG中,SID无法支持路由、负载均衡和PDB访问
  2. Service Name核心价值​:
  • 解耦物理架构​:客户端无需感知实例位置或角色变更。
  • 无缝故障转移​:TAF+VIP实现会话级透明切换(RAC/ADG)
  • 多租户支持​:CDB中PDB访问的唯一合法途径

迁移步骤​:

  • 为每个数据库/PDB创建专用服务名(非默认)
  • 客户端TNS和JDBC连接串替换为Service Name格式(@//host:port/service_name)
  • 监听器启用动态注册(alter system set local_listener='')
  • Default Service           FREE
    Listener Parameter File   /opt/oracle/product/23ai/dbhomeFree/network/admin/listener.ora
    Listener Log File         /opt/oracle/diag/tnslsnr/OL97/listener/alert/log.xml
    Listening Endpoints Summary...(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=OL97)(PORT=1521)))(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
    Services Summary...
    Service "375897c9631a1373e0636100020a8b39" has 1 instance(s).Instance "FREE", status READY, has 1 handler(s) for this service...
    Service "FREE" has 1 instance(s).Instance "FREE", status READY, has 1 handler(s) for this service...
    Service "FREEXDB" has 1 instance(s).Instance "FREE", status READY, has 1 handler(s) for this service...
    Service "freepdb1" has 1 instance(s).Instance "FREE", status READY, has 1 handler(s) for this service...
    The command completed successfully
    

http://www.lryc.cn/news/571984.html

相关文章:

  • Transformer-BiGRU、Transformer、CNN-BiGRU、BiGRU、CNN五模型多变量时序预测
  • 【计算机常识】--docker入门+docker desktop的使用(一)
  • MySQL 多表查询、事务
  • 如何使用ChatGPT快速完成一篇论文初稿?
  • Controller Area Network (CAN) 通信机制简介
  • Ubuntu服务器启动jupyter notebook,本地电脑Mobaxterm访问
  • 一个电脑装了多个python哪个生效?在 Windows 系统中修改环境变量 PATH 的优先级
  • Vue.js 按键修饰符详解:提升键盘事件处理效率
  • 筑牢安全防线:电子文件元数据驱动的 AI 知识库可控管理方案
  • TradingAgents:基于多智能体的大型语言模型(LLM)金融交易框架
  • 从零学起VIM
  • 解决sql查询中in查询项过多时很慢的问题
  • django 获取 filter后的某一个属性的list
  • 【Java学习笔记】Java绘图基础
  • 【学习笔记】2.2 Encoder-Decoder
  • Neo4j 入门到精通(Cypher语言详解)
  • 湖北理元理律师事务所小微企业债务重组方案:司法与经营的共生逻辑
  • b站视频如何下载到电脑上
  • jupter 如何修改文件位置
  • 【AI Study】第四天,Pandas(8)- 最佳实践
  • 湖北理元理律师事务所债务优化模型:法律与生活的平衡之道
  • 《汇编语言:基于X86处理器》第2章 x86处理器架构
  • 《仿盒马》app开发技术分享--未完成订单列表展示逻辑优化(61)
  • 机器学习常用评估指标
  • springboot使用nacos注册中心、配置中心的例子
  • C/Fortran多核并行计算
  • (LeetCode 面试经典 150 题 ) 26. 删除有序数组中的重复项 (双指针)
  • A 股无风不起浪!金融吸血科技
  • 黑马python(八)
  • 利用 Nginx 实现灰度环境的 H5 应用发布策略