Oracle12c多租户如何连接到CDB或PDB、CDB与PDB容器切换

Oracle 数据库 12 c 多租户选项允许单个容器数据库 (CDB) 来承载多个单独的可插拔数据库 (PDB)。
那么我们如何连接到容器数据库 (CDB) 和可插拔数据库 (PDB)。

1. V$SERVICES视图可以显示数据库中的可用服务。
SQL> col pdb for a40
SQL> col name for a30;
SELECT name, pdb FROM v$services ORDER BY name;SQL> 
NAME       PDB
------------------------------ ----------------------------------------
SYS$BACKGROUND       CDB$ROOT
SYS$USERS       CDB$ROOT
andycdb       CDB$ROOT
andycdbXDB       CDB$ROOT
pdb01       PDB01

-- lsnrctl实用程序显示可用的服务。
[oracle@12c01 ~]$ lsnrctl status
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=12c01)(PORT=1521)))
Services Summary...
Service "4ecf8621e3da38eee0531019640aa598" has 1 instance(s).
  Instance "andycdb", status READY, has 1 handler(s) for this service...
Service "andycdb" has 1 instance(s).
  Instance "andycdb", status READY, has 1 handler(s) for this service...
Service "andycdbXDB" has 1 instance(s).
  Instance "andycdb", status READY, has 1 handler(s) for this service...
Service "pdb01" has 1 instance(s).
  Instance "andycdb", status READY, has 1 handler(s) for this service...
The command completed successfully

2.直接连接到一个容器数据库 (CDB)
连接到数据库的根容器和连接以前版本的单个数据库实例相同。在数据库服务器上,您可以使用操作系统身份验证。

方法一:

[oracle@12c01 ~]$ sqlplus / as sysdba   

方法二:

或者 tnsnames.ora 文件配置

ANDYCDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 12c01)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = andycdb)
    )
  )

C:\Users\andy>sqlplus sys/oracle@10.100.25.16:1521/andycdb as sysdba

 

3.直接连接到一个可插拔的数据库 (PDB)

 tnsnames.ora 文件配置:

PDB01 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.100.25.16)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb01)
    )
  )

C:\Users\andy>sqlplus sys/oracle@10.100.25.16:1521/pdb01 as sysdba
SQL> show con_name
CON_NAME
------------------------------
PDB01
说明:PDB 具有 SYSDBA、 SYSOPER、 SYSBACKUP 或 SYSDG 特权的用户可以连接到已关闭的 PDB。
PDB 的所有其他用户(CONNECT SESSION权限的用户)仅可以连接已经打开的PDB。

4. 容器之间切换

SQL> ALTER SESSION SET container=pdb01;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
PDB01
SQL> alter session set container=cdb$root;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT

相关推荐:

如何实现Django项目的分表分库方案_利用Python中间件动态切换库

分库分表前须确认三件事:Django版本≥4.2、主键含路由信息(如user_id)、已弃用syncdb类命令;中间件动态切库需安全重绑connections;using()优先级最高,路由器次之,中间件仅预热连接;分表逻辑应收口至Manager层,但需防范并发表名错乱。 分库分表前必须确认的三件事...

如何在 Shell 脚本中正确调用 Singularity 容器执行命令

本文详解如何在Shell脚本中非交互式地运行Singularity容器内的命令(如Python脚本),避免误用singularityshell导致的执行失败、段错误或挂起问题。 本文详解如何在shell脚本中非交互式地运行singularity容器内的命令(如python脚本),避免误用`singu...

如何正确实现支持重复元素的整数容器增删查操作

本文详解为何使用Pythonset会导致REMOVE操作行为异常,并提供基于list的可靠替代方案,确保ADD、REMOVE、EXISTS三类操作在含重复元素场景下结果完全符合预期。 本文详解为何使用python`set`会导致remove操作行为异常,并提供基于`list`的可靠替代方案,确保ad...

Docker容器挂掉后Python如何自动报警与拉起重启

Python无法可靠获取容器崩溃的退出信号,应通过外部监控(如dockerevents)报警,并用tini或os.execv确保信号传递,避免在容器内使用supervisor等进程管理器。 容器崩溃时Python怎么拿到确切的退出信号 Docker容器挂掉,本质是主进程(ENTRYPOINT或CMD...

SimPy 容器资源 level 属性的更新时机与事件驱动调度机制解析

SimPy中Container.level的值并非实时反映“逻辑上当前时刻”的容量状态,而是严格遵循离散事件仿真中事件触发与协程挂起/恢复的时序逻辑;其看似异常的跳变源于yield导致的进程切换与属性读取时机错位,需通过监听事件回调或封装访问逻辑来获取准确的状态快照。 simpy中`containe...