前言:在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 关系 表 视图_oracle动态视图v$,v_$,gv$,gv_$与x$之间的关系相关推荐

  1. 讨论projects、programs和portfolio之间的关系以及对企业成功的贡献,以及与operations以及OPM之间的关系

    中山大学IT项目管理 第一次个人作业 讨论projects.programs和profolio之间的关系以及对企业成功的贡献:以及与operations以及OPM之间的关系. 一.厘清概念 proje ...

  2. mysql连接oracle视图_oracle数据库视图

    一.what 视图是一张虚拟表 二.如何创建视图 create view 视图名 as select 语句 视图名一般以v$开头 演示代码: --需求:查询所有员工的姓名和上司的姓名(做成视图) cr ...

  3. java调用oracle视图_oracle中视图

    1. 用户授权 查看当前用户的角色 SQL> select * from user_role_privs; 查看角色对应的权限 SQL> select * from dba_sys_pri ...

  4. Oracle多表联查时,某个字段由逗号分割的字符串组成,关系是此字符串切割后,对应另一张表某个字段,如何实现一条sql完成查询?

    此需要类似于在sql中,使用in的场景,只是in是一对多,此处需要切割后的多对多. 这里我使用了Oracle函数进行处理,取交集 CREATE OR REPLACE FUNCTION "FU ...

  5. oracle 创建表空间_Oracle 创建和管理表

    (1)创建表 - CREATE TABLE ① Create table 创建表 准备条件:具备创建表的权限和存储空间:制定表名,列名,数据类型,尺寸 create table 语句 必须具备:cre ...

  6. UML基本概念——动态视图

    内容来源:<Thinking in UML>第二版.仅供交流学习,若涉及版权,会立即删除. 4.2 动态视图 故名思义,动态视图是描述事物动态行为的.需要注意的是,动态视图不能够独立存在, ...

  7. 数据库关系建模(ER图设计关系表)

    目录 一.概述 二.基本概念 1. 关系(relation) 2. 列(column) 3. 行(row) 4. 关系表 VS 一般的表 5. 主码(主键primary key) 6. 实体完整性约束 ...

  8. 数据库关系表 ---- Relational table

    数据库关系表 ---- Relational table 什么是关系(relation) 关系(relation)的基本属性 约束(Constraints) Integrity Constraints ...

  9. UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

    类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什 ...

最新文章

  1. 13. 微型计算机中,传送cpu发出的读/写指令的总线是,我的微机原理题库
  2. 使用Python进行端口扫描
  3. CONVERSION_EXIT_SDATE_OUTPUT
  4. 实现点击按钮后,倒计时60秒才能再次点击
  5. android studio 工程demo例子,Android Studio 实现跑马灯微项目实例
  6. ubuntu安装时发现GPT分区表,无法安装问题
  7. 第16/24周 SQL Server 2014中的基数计算
  8. CentOS5、6的启动流程
  9. LeetCode:892. 三维形体的表面积
  10. leetcode - 674. 最长连续递增序列
  11. 根据各工序时间画aoe网_灯饰画的优点以及定制要求
  12. UVA - 208 Firetruck
  13. Visual Studio2013修改IDE集成开发环境视图风格
  14. IDEA的Database表的基本操作
  15. 市场上的视觉图像采集卡软硬功能对比
  16. CSS(三)盒子模型
  17. 实模式8086 与 保护模式80286
  18. python 路由追踪_tracert跟踪路由
  19. 错误计算机怎么打开,例举电脑无法开机出现a disk read error错误怎么办呢?
  20. 084 php获取美元人民币汇率方法

热门文章

  1. 【思维导图-索引篇】搞定数据库索引就是这么简单
  2. (转)自动化管理工具Saltstack之nginx部署
  3. Linux命令:MySQL系列之十--MySQL用户和权限管理,mysql管理员密码重置
  4. hadoop+hive+spark搭建(一)
  5. .net 中struct(结构)和class(类)的区别
  6. okhttp通过post发送Json数据到php 更新数据库
  7. Pascal常用函数
  8. [论文笔记] Anatomy of a crowdsourcing platform - Using the example of microworkers.com (IMIS, 2011)...
  9. java实现俄罗斯方块游戏
  10. 调用torchtext报错OSError: libtorch_cpu.so: cannot open shared object file: No such file or directory