代码改变世界

Oracle如何查看当前PDB容器信息

  潇湘隐者  阅读(2788)  评论(0编辑  收藏  举报

Oracle多租用户环境中,我们如何查看当前会话的容器信息呢? 一般情况下,如果当前会话位于CDB$ROOT容器下,那么使用命令show pdbs可以查看所有的pdb数据库信息,如果当前会话信息位于某一个具体的PDB容器时,那么此时只能查看当前PDB的容器信息,具体如下所示:

sys@ctest> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
         4 PDB2                           READ WRITE NO
         5 PTESTUAT                       READ WRITE NO
         7 PDB3                           MOUNTED
sys@ctest> alter session set container=PDB1;

Session altered.

sys@ctest> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 PDB1                           READ WRITE NO
sys@ctest> alter session set container=CDB$ROOT;

Session altered.

sys@ctest> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
         4 PDB2                           READ WRITE NO
         5 PTESTUAT                       READ WRITE NO
         7 PDB3                           MOUNTED
sys@ctest>

有时候,我们使用的账号不是sysdba角色,此时使用show pdbs命令时,会由于权限不够而报错(SP2-0382: The SHOW PDBS command is not available)。 另外,有些工具,例如PL/SQL Developer中没法使用show pdbs这些命令,此时我们也可以使用下面SQL来查看当前PDB容器库信息以及会话信息。

sys@ctest> alter session set container=PDB2;

Session altered.

sys@ctest> set line 232
sys@ctest> col os_pid for a7
sys@ctest> col tracefile for a80 
sys@ctest> col username for a15
sys@ctest> col con_name for a10
sys@ctest> col schemaname for a10
sys@ctest> SELECT distinct s.con_id
  2       , c.con_name
  3       , s.username
  4       , s.user#
  5       , s.sid
  6       , s.serial#
  7       , s.prev_hash_value
  8       , schemaname
  9       , p.spid os_pid
 10  FROM V$SESSION S, v$process p, v$active_services c,
 11  (SELECT sid FROM v$mystat WHERE rownum=1) sid
 12   WHERE audsid = SYS_CONTEXT('userenv','sessionid')
 13   and p.addr = s.paddr
 14   and sid.sid = s.sid
 15   and s.username is not null
 16  and s.con_id=c.con_id
 17  and s.con_id=p.con_id
 18  /

    CON_ID CON_NAME   USERNAME             USER#        SID    SERIAL# PREV_HASH_VALUE SCHEMANAME OS_PID
---------- ---------- --------------- ---------- ---------- ---------- --------------- ---------- -------
         4 PDB2       SYS                      0        147      48906      1610794605 SYS        21336

1 row selected.

sys@ctest>
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 易语言 —— 开山篇
历史上的今天:
2019-01-10 ORA-12520 TroubleShooting
2016-01-10 小心SQL SERVER 2014新特性——基数评估引起一些性能问题
2016-01-10 SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值
2015-01-10 专用服务器模式&共享服务器模式
点击右上角即可分享
微信分享提示