Oracle 21c中v$database视图数据归属及NAME字段值疑问
关于Oracle CDB/PDB中v$database视图的疑问解答
1. 为什么NAME字段始终为ORCL?
在Oracle的CDB(容器数据库)架构中:
- 整个CDB拥有唯一的数据库名称(即
v$database.NAME),这个名称是创建CDB时指定的,你的场景中就是ORCL。 - PDB(可插拔数据库)是CDB的组成组件,没有独立的数据库名称,它们依附于CDB存在。
v$database是CDB级别的动态性能视图,存储的是整个CDB的核心元数据。无论你连接到CDB根容器(CDB$ROOT)还是某个PDB,查询这个视图返回的都是CDB的名称,因此始终显示ORCL。
2. 连接PDB时,v$database中的数据属于当前PDB还是所属CDB?
连接PDB时,v$database返回的核心标识数据(如NAME)属于所属CDB,而部分状态类字段(如OPEN_MODE)会返回当前PDB的状态,原因如下:
v$database本质上属于CDB根容器(CDB$ROOT),并非每个PDB都有独立的视图实例。当你在PDB中查询该视图时,Oracle会隐式访问根容器的元数据,但针对状态类字段会返回当前连接容器的状态。- 如果需要查看当前PDB自身的完整信息,应该使用PDB专属的视图,例如:
-- 查询当前PDB的名称和打开模式 SELECT name, open_mode FROM v$pdbs WHERE con_id = SYS_CONTEXT('USERENV', 'CON_ID'); -- 或者查询dba_pdbs视图 SELECT pdb_name, status FROM dba_pdbs WHERE pdb_name = SYS_CONTEXT('USERENV', 'CON_NAME');
内容的提问来源于stack exchange,提问作者Ackerven
相关产品推荐
相关产品推荐

