重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 370|回复: 0
打印 上一主题 下一主题

[Oracle] ORACLE_PDB_SID和ORACLE_SID的区别

[复制链接]
跳转到指定楼层
楼主
发表于 2025-12-21 18:48:28 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
一个很小的问题,很容易被忽略的一个小问题,那就是ORACLE_PDB_SID和ORACLE_SID这两个环境变量;ORACLE_SID这个大家很熟悉了,ORACLE_PDB_SID是CDB模式下的一种连接到某个PDB的方式;当然也可以使用 alter session set container=pdb的方式。来我们看看实例:
[oracle@hostname /home/oracle]$ export ORACLE_SID=CDB
[oracle@hostname /home/oracle]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Dec 4 15:11:13 2025
Version 19.11.0.0.0
Copyright (c) 1982, 2020, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- -----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0
[oracle@hostname /home/oracle]$ export ORACLE_PDB_SID=PDB1
[oracle@hostname /home/oracle]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Dec 4 15:12:58 2025
Version 19.11.0.0.0
Copyright (c) 1982, 2020, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0
SQL> show con_name;
CON_NAME
------------------------------
PDB1
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0
这一段很简单就是连接到19.11的CDB环境,CDB下有一个PDB1,设置完ORACLE_PDB_SID后可以切换至PDB下。
[oracle@hostname /home/oracle]$ export ORACLE_SID=CDB
[oracle@hostname /home/oracle]$ sqlplus / as sysdba
紧接上文,如果再执行export ORACLE_SID之后再次sqlplus 请问当前是连接到哪个库?
------分割线------

你会发现连接的还是PDB,除非你执行unset ORACLE_PDB_SID
[oracle@hostname /home/oracle]$ export ORACLE_SID=CDB
[oracle@hostname /home/oracle]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Dec 4 15:11:13 2025
Version 19.11.0.0.0
Copyright (c) 1982, 2020, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0
SQL> show con_name
CON_NAME
------------------------------
PDB1

[oracle@hostname /home/oracle]$ unset ORACLE_PDB_SID
[oracle@hostname /home/oracle]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Dec 4 15:14:11 2025
Version 19.11.0.0.0
Copyright (c) 1982, 2020, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0
SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- -----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0
为什么呢?
这个其实很容易理解在 Oracle 18c/19c/21c 的多租户环境下做本地 bequeath 连接(sqlplus / as sysdba)时:ORACLE_SID 只负责“先找到哪个 CDB 实例”,而 ORACLE_PDB_SID 负责“最终把我扔进哪个 PDB”。
只要 ORACLE_PDB_SID 存在且指向一个真实打开的 PDB,它就会完全覆盖 ORACLE_SID 的默认行为,把你直接带进那个 PDB。最终验证结果如下:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-4-17 19:47 , Processed in 0.298117 second(s), 24 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表