当前位置:首页 > 数据库 > 正文

Oracle DBA必备,一键速查所有数据库实例的秘籍

在Oracle中,通常一个实例仅关联一个数据库,直接查询 v$database(显示当前连接的数据库)或 dba_databases(需权限,通常也仅返回一个),若要查看多租户容器数据库(CDB)中的可插拔数据库(PDB),使用 show pdbs命令或查询 dba_pdbscdb_pdbs视图。

Oracle中查看数据库信息的方法详解

在Oracle数据库管理中,“查看有哪些数据库”是一个常见需求,需特别说明:Oracle的架构与MySQL等数据库不同,传统意义上,一个Oracle实例通常关联一个数据库(由数据文件、控制文件等组成),但在12c版本后引入的多租户架构中,一个容器数据库(CDB)可包含多个可插拔数据库(PDB)。“有哪些数据库”实际可能指两类信息:

  1. 当前实例关联的数据库名称
  2. CDB环境中的PDB列表

以下是具体操作方法和命令:


一、查看当前数据库基本信息

这些命令适用于所有Oracle环境,显示当前连接的数据库信息。

  1. 查看数据库名称(DB_NAME)和唯一标识(DBID)

    SELECT name AS DB_NAME, dbid AS DBID 
    FROM v$database;

    输出示例

    DB_NAME     DBID
    ---------- ----------
    ORCL        123456789
  2. 查看实例名称和状态

    Oracle DBA必备,一键速查所有数据库实例的秘籍  第1张

    SELECT instance_name, status, database_status 
    FROM v$instance;

    输出示例

    INSTANCE_NAME STATUS       DATABASE_STATUS
    ------------- ------------ ---------------
    orcl          OPEN         ACTIVE

二、查看可插拔数据库(PDB)列表(仅限CDB环境)

若使用Oracle 12c及以上版本且启用了多租户架构,可通过以下方式查看PDB:

  1. 查看所有PDB及其状态

    SELECT name, open_mode, con_id 
    FROM v$pdbs;

    关键字段解释

    • NAME:PDB名称
    • OPEN_MODE:打开状态(MOUNTED/READ WRITE等)
    • CON_ID:容器ID
  2. 通过容器视图查询

    SELECT pdb_name, status 
    FROM cdb_pdbs;

三、查看用户/模式(Schema)信息

当用户需要“查看有哪些数据库”时,实际可能想了解当前数据库中的用户(模式),每个模式可理解为逻辑上的独立数据空间。

SELECT username AS schema_name, created, account_status 
FROM dba_users 
ORDER BY created DESC;

输出示例

SCHEMA_NAME  CREATED    ACCOUNT_STATUS
------------ --------- --------------
HR           2025-01-01 OPEN
SCOTT        2022-12-01 OPEN
SYS          2022-01-01 OPEN

四、其他相关查询方式

  1. 查看数据库全局名称(包含域名)

    SELECT * FROM global_name;
  2. 检查是否处于CDB环境

    SELECT name, cdb 
    FROM v$database;

    若输出 CDB=YES 则为多租户架构。

  3. *通过SQLPlus命令快速查看**

    SHOW PARAMETER db_name;      -- 显示数据库名
    SHOW PARAMETER instance_name; -- 显示实例名

️ 注意事项

  1. 权限要求
    • 查询 v$databasev$instanceSELECT_CATALOG_ROLE 权限
    • 访问 dba_usersDBA 角色
  2. 架构区别
    • 单租户(非CDB):只有一个数据库
    • 多租户(CDB):一个CDB + 多个PDB
  3. 误操作风险
    • 对PDB的操作(如开启/关闭)需在CDB$ROOT下执行
    • 修改核心参数(如db_name)需重启实例

需求场景 推荐命令
查看数据库名称和实例 SELECT name FROM v$database; + SELECT instance_name FROM v$instance;
查看CDB中的PDB列表 SELECT name FROM v$pdbs;
查看所有用户(模式) SELECT username FROM dba_users;
快速检查数据库信息(命令行) SHOW PARAMETER db_name;

关键理解:Oracle中一个实例通常关联一个物理数据库(包含多个逻辑模式),而多租户架构通过PDB实现“一实例多数据库”,日常管理中,需明确区分物理数据库PDB用户模式的概念差异。


引用说明: 基于Oracle官方文档《Database Reference》中关于数据字典视图(V$DATABASE, V$PDBS)和用户权限管理的章节,结合Oracle 12c/19c多租户架构实践整理而成,具体权限要求以实际环境版本为准。

0