查看oracle是noncdb 还是cdb的方法

来源:这里教程网 时间:2026-03-03 22:04:28 作者:

一、SQL查询法(推荐)

1. 查询  v$database 视图

执行以下SQL语句:

SELECT name, cdb FROM v$database;

结果解读

CDB=YES:当前为CDB架构。

  • CDB=NO:当前为Non-CDB架构。

    2. 检查容器视图

    若数据库是CDB,可进一步查询容器信息:

    SELECT con_id, name, open_mode FROM v$containers;  -- 显示所有容器(CDB$ROOT、PDB$SEED及PDBs)SELECT name, open_mode FROM v$pdbs;               -- 仅显示PDB信息:cite[2]:cite[6]:cite[7]

    Non-CDB中:这些视图无有效数据或查询报错 3


    ???? 二、SQL*Plus命令法

    1.  SHOW 命令

    SHOW con_name   -- 若返回 CDB$ROOT 表示当前在CDB根容器SHOW pdbs       -- 若列出PDB列表(如PDB$SEED、用户PDB),则为CDB:cite[6]:cite[7]

    Non-CDB中SHOW pdbs 无输出或报错。

    2. 系统函数

    SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM dual;  -- 返回 CDB$ROOT 或 PDB名称(CDB环境) / 返回数据库名(Non-CDB):

    ⚙️ 三、其他辅助方法

      检查数据字典表

      SELECT * FROM cdb_tables;  -- CDB中存在此视图,Non-CDB中不存在
    1. 监听服务检查

      lsnrctl status

      CDB环境:输出包含多个Service(每个PDB一个服务) 10

    2. Non-CDB环境:通常仅有一个服务。


    ???? 总结对比

    方法 CDB特征 Non-CDB特征
    SELECT cdb FROM v$database CDB='YES' CDB='NO'
    SHOW pdbs 显示PDB列表 无输出或报错
    v$containers 视图 多行记录(容器列表) 无有效数据或报错
    SYS_CONTEXT 返回值 CDB$ROOT 或 PDB名称 数据库实例名

    ????  操作建议

      优先使用  SELECT name, cdb FROM v$database; 直接确认类型。

    1. 若需管理CDB中的PDB,结合  v$pdbs 和  ALTER SESSION SET CONTAINER=PDB名称 切换容器

  • 相关推荐