2024年3月10日发(作者:)

Oracle 动态视图V$,V_$,GV$,GV_$与X$之间的关系

概括:

GV$与V$是视图,X$是表。

gv$是全局视图,而v$是针对某个实例的视图,X$是所有gv$的数据来源,从gv$到

v$需要加上where inst_id = USERENV(’Instance’)。一般来说一个oracle数据库只会

有一个实例对其操作,但在RAC上可以有多台实例同时装载并打开一个数据库。

那gv_$与v_$的定义又在什么地方呢?原来在$ORACLE_HOME/rdbms/admin存放

着系统管理脚本。

因此我们常用的v$ 是v_$的同义词,v_$是基于真正的视图v$,而真正的v$视图是

在gv$的基础上限制inst_id得到;

我们常用的gv$是gv_$的同义词,gv_$基于真正的视图gv$,而真正的gv$视图基

于系统表X$。

具体的内容如下:

前言:在oracle运维的过程中,经常会使用到一些以V$开头的动态视图,比如

V$session, 有一次偶然看到有人用V_$session, 初以为别人写错了,没想到desc

v_$session以后能看到和v$session一样的结构,再以后又发现以gv$开头的视图等等。

趁这次在一台Linux系统上装oracle的机会,终于弄清楚了这些动态视图与相应表之间的

关系。

这些都是由oracle自己管理的数据结构,得从v$fixed_table入手:

[oracle@3857 admin]$ sqlplus sys/sys@archdw as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon Dec 14 11:27:20 2009

Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> desc v$fixed_table;

Name Null? Type

—————————————– ——– —————————-

NAME VARCHAR2(30)

OBJECT_ID NUMBER