建设网站要求哪里备案如何做物流网站
今天还在努力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)。
 
 
二、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高可用设计的精髓,也是分布式与云原生时代的必然选择
现代架构
- 弃用SID连接:在RAC/CDB/ADG中,SID无法支持路由、负载均衡和PDB访问
 - 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 

