oracle动态视图v$,v_$,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
TYPE VARCHAR2(5)
TABLE_NUM NUMBER
SQL> select * from v$fixed_table
NAME OBJECT_ID TYPE TABLE_NUM
—————————— ———- —– ———-
X$KQFTA 4294950912 TABLE 0
X$KQFVI 4294950913 TABLE 1
GV$PROCESS 4294951256 VIEW 65537
V$PROCESS 4294950917 VIEW 65537
GV$BGPROCESS 4294951257 VIEW 65537
………………………………………
从上面可以看到GV$与V$是视图,X$是表。那它们之间是什么关系呢?从另一个视图v$fixed_view_definition中得到如下信息(以v$fixed_table为例):
SQL> set linesize 100
SQL> col view_name for a15
SQL> col view_definition for a80
SQL> select * from v$fixed_view_definition where view_name=’V$FIXED_TABLE’;
VIEW_NAME VIEW_DEFINITION
———————- ——————————————————————————–
V$FIXED_TABLE select NAME , OBJECT_ID , TYPE , TABLE_NUM from GV$FIXED_TABLE where inst_id =
USERENV(’Instance’)
SQL> select * from v$fixed_view_definition where view_name=’GV$FIXED_TABLE’;
VIEW_NAME VIEW_DEFINITION
————————- ——————————————————————————–
GV$FIXED_TABLE select inst_id,kqftanam, kqftaobj, ‘TABLE’, indx from x$kqfta union all select i
nst_id,kqfvinam, kqfviobj, ‘VIEW’, 65537 from x$kqfvi union all select inst_id,k
qfdtnam, kqfdtobj, ‘TABLE’, 65537 from x$kqfdt
原来gv$是全局视图,而v$是针对某个实例的视图,$X是所有gv$的数据来源,从gv$到v$需要加上where inst_id = USERENV(’Instance’)。一般来说一个oracle数据库只会有一个实例对其操作,但在RAC上可以有多台实例同时装载并打开一个数据库,在RAC上得到的结果是:
etl@ALIDW> select distinct inst_id from gv$session;
INST_ID
———-
1
2
4
3
这rac上有四个实例。嗯,再次加深了对实例与数据库的理解。
那gv_$与v_$的定义又在什么地方呢?原来在$ORACLE_HOME/rdbms/admin存放着系统管理脚本,在catalog.sql中发现:
–CATCTL -S Initial scripts single process
@@cdstrt
@@cdfixed.sql
@@cdcore.sql
–CATCTL -M
@@cdplsql.sql
@@cdsqlddl.sql
…………………………………………………………………………….
进一步在cdfixed.sql中找到
create or replace view v_$fixed_table as select * from v$fixed_table;
create or replace public synonym v$fixed_table for v_$fixed_table;
grant select on v_$fixed_table to select_catalog_role;
create or replace view gv_$fixed_table as select * from gv$fixed_table;
create or replace public synonym gv$fixed_table for gv_$fixed_table;
grant select on gv_$fixed_table to select_catalog_role;
…………………………………………………………………………………………………………….
[oracle@3857 admin]$ sqlplus sys/sys@archdw as sysdba
SQL> select * from user_role_privs;
USERNAME GRANTED_ROLE ADM DEF OS_
—————————— —————————— — — —
SYS SELECT_CATALOG_ROLE YES YES NO
因此我们常用的v$ 是v_$的同义词,v_$是基于真正的视图v$,而真正的v$视图是在gv$的基础上限制inst_id得到;
我们常用的gv$是gv_$的同义词,gv_$基于真正的视图gv$,而真正的gv$视图基于系统表X$。
oracle动态视图v$,v_$,gv$,gv_$与x$之间的关系的更多相关文章
- oracle数据库_实例_用户_表空间之间的关系
基础概念:Oracle数据库.实例.用户.表空间.表之间的关系 数据库:Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实Oracle数据库的 ...
- Oracle 动态视图6 V$PROCESS
一.视图包含当前系统oracle运行的所有进程信息.常用于将session与进程(oracle进程,操作系统进程)之间建立联系. Column Datatype Description ADDR RA ...
- Oracle 动态视图3 V$SESSION
每一个连接到数据库实例中的session都拥有一条记录.包括用户session及后台进程如DBWR,LGWR,arcchiver等 Column Datatype Description SADDR ...
- Oracle 动态视图2 V$LOCKED_OBJECT
v$locked_object视图列出当前系统中哪些对象正被锁定 Column Datatype Description XIDUSN NUMBER 回滚段号 XIDSLOT NUMBER 槽号 XI ...
- Oracle 动态视图1 V$LOCK
v$lock显示数据库当前持有锁情况 Column Datatype Description SID NUMBER 会话ID TYPE VARCHAR2(2) 表示锁的类型.值包括TM,TX,等 ID ...
- Oracle 动态视图5 V$SESSION_LONGOPS
一.视图V$SESSION_LONGOPS显示运行超过6秒的操作的状态.包括备份,恢复,统计信息收集,查询等等 Column Datatype Description SID NUMBER Sessi ...
- Oracle 动态视图4 V$SESSION_WAIT & V$SESSION_EVENT
一.视图V$SESSION_WAIT显示了session的当前等待事 Column Datatype Description SID NUMBER Session identifier SEQ# NU ...
- 关于oracle动态视图v$datafile和v$datafile_header(转)
v$datafile是从oracle的控制文件中获得的数据文件的信息v$datafile_header是从数据文件的头部在正常运行下,两者的检查点SCN值是一致的,但当datafile出现损坏时可以用 ...
- oracle动态视图(一)stat
1v$mystat,v$sesstat,v$sysstat是用来分别统计用户级,会话级,系统级信息的. SID NUMBER STATI ...
随机推荐
- Xcode 注释工具的使用
1:Xcode 8之后 Goodbye World In Xcode 8, Apple integrated a comment documentation generator plugin, whi ...
- Android学习笔记(一)Git相关配置及使用
一.配置 打开Git Bash, git config --global user.name "username" git config --global user.email & ...
- SDN理解:目录
为什么? 最近一直在学习SDN方面的知识,本着"最好的学习就是分享"的精神,记录下本系列的文章,尝试更好地去理解SDN这一正当红的技术. 如何? SDN领域现在已经充斥了大量的公司 ...
- python学习——DAY1
日期:20170113 一.个人体会: 零基础学python,是艰辛的,需要付出和坚持. 关于流程图.我最开始画的是从上到下,再从左到右,画了很多重复的内容,单线程的流程图,看起来很容易理解,但是自己 ...
- java 基本数据类型跟封装类型的差距
import java.util.*; class test1{ public static void main(String[] args){ long start1 = System.curren ...
- Unity3D脚本使用:物体调用物体
如下图4种方式: 方式5 通过Tag定位物体 1.先对物体定义标签Tag,可选已有或自定义 2.通过Tag名称找到对象 注意:如果标签对应多个对象,需使用获取对象集合再进行处理
- 拒绝深坑!记录找了多半天时间的C++编译失败的错误
采用新的源码,和原来的服务改动也不是很大,但是拒绝深坑啊,找了半天以为是源码的问题,结果倒好原来是环境的问题,还是要感谢一个神一样的人物的帮助 编译的时候一直出现undefined reference ...
- CSS 待解决问题
记录一些待解决的问题 1. 关于 table 边框参差不齐问题 乍一看表头的边框有 间隙, 下边框也有点没有对其的问题. 解决方案: 给 table 添加: border-collapse: col ...
- C#里面Auotpostback回刷时候,textbox里面的password怎么保存
刷新页面时,如何保留页面上的PassWord模式下的TextBox的值? this.txtUserPwd.Attributes["value"] = txtUserPwd.Text ...
- nginx trouble shooting
除去配置语法失误.逻辑失误 nginx中的大部分问题都是前端到后端联通性 curl 域名没反应 cyr@test:/etc/nginx/sites-enabled$ curl test.hehe.ex ...