知识大全 深入了解Oracle数据字典

Posted 视图

篇首语:人生必须的知识就是引人向光明方面的明灯。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 深入了解Oracle数据字典相关的知识,希望对你有一定的参考价值。

深入了解Oracle数据字典  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  首先 Oracle的字典表和视图基本上可以分为三个层次      X$表    这一部分表是Oracle数据库的运行基础 在数据库启动时由Oracle应用程序动态创建     这部分表对数据库来说至关重要 所以Oracle不允许SYSDBA之外的用户直接访问 显示授权不被允许     如果显示授权你会收到如下错误:    SQL> grant select on x$ksppi to eygle;    grant select on x$ksppi to eygle  *  ERROR at line :  ORA : can only select from fixed tables/views     GV$和V$视图    从Oracle 开始 GV$视图开始被引入 其含义为Global V$     除了一些特例以外 每个V$视图都有一个对应的GV$视图存在     GV$视图的产生是为了满足OPS环境的需要 在OPS环境中 查询GV$视图返回所有实例信息 而每个V$视图基于GV$视图 增加了INST_ID列判断后建立 只包含当前连接实例信息     注意 每个V$视图都包含类似语句     where inst_id = USERENV( Instance )    用于限制返回当前实例信息     我们从GV$FIXED_TABLE和V$FIXED_TABLE开始    SQL> select view_definition from v_$fixed_view_definition where view_name= V$FIXED_TABLE ;    VIEW_DEFINITION     select NAME OBJECT_ID TYPE TABLE_NUM from GV$FIXED_TABLE where inst_id = USERENV( Instance )    这里我们看到V$FIXED_TABLE基于GV$FIXED_TABLE创建     SQL> select view_definition from v_$fixed_view_definition where view_name= GV$FIXED_TABLE ;    VIEW_DEFINITION     select inst_id kqftanam kqftaobj TABLE indx from x$kqfta  union all  select inst_id kqfvinam kqfviobj VIEW from x$kqfvi  union all  select inst_id kqfdtnam kqfdtobj TABLE from x$kqfdt    这样我们找到了GV$FIXED_TABLE视图的创建语句 该视图基于X$表创建      GV_$ V_$视图和V$ GV$同义词    这些视图是通过catalog ql创建     当catalog 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;  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;    我们注意到 第一个视图V_$和GV_$首先被创建 v_$和gv_$两个视图     然后基于V_$视图的同义词被创建     所以 实际上通常我们访问的V$视图 其实是指向V_$视图的同义词     而V_$视图是基于真正的V$视图(这个视图是基于X$表建立的)     而v$fixed_view_definition视图是我们研究Oracle对象关系的一个入口 仔细理解Oracle的数据字典机制 有助于深入了解和学习Oracle数据库知识      再进一步     X$表    关于X$表 其创建信息我们也可以从数据字典中一窥究竟     首先我们考察bootstrap$表 该表中记录了数据库启动的基本及驱动信息     SQL> select * from bootstrap$;    LINE# OBJ# SQL_TEXT          CREATE ROLLBACK SEGMENT SYSTEM STORAGE ( INITIAL K NEXT K MINEXTENTS M     CREATE CLUSTER C_FILE#_BLOCK#( TS# NUMBER SEGFILE# NUMBER SEGBLOCK# NUMBER)     CREATE INDEX I_FILE#_BLOCK# ON CLUSTER C_FILE#_BLOCK# PCTFREE INITRANS MAXT     CREATE TABLE SEG$( FILE# NUMBER NOT NULL BLOCK# NUMBER NOT NULL TYPE# NUMBE     CREATE TABLE CLU$( OBJ# NUMBER NOT NULL DATAOBJ# NUMBER TS# NUMBER NOT NULL     CREATE CLUSTER C_TS#( TS# NUMBER) PCTFREE PCTUSED INITRANS MAXTRANS      CREATE INDEX I_TS# ON CLUSTER C_TS# PCTFREE INITRANS MAXTRANS STORAGE (       这部分信息 在数据库启动时最先被加载 跟踪数据库的启动过程 我们发现数据库启动的第一个动作就是:    create table bootstrap$ ( line# number not null obj#  number not null sql_text varchar ( ) not null) storage (initial   K objno extents (file block ))    这部分代码是写在Oracle应用程序中的 在内存中创建了bootstrap$以后 Oracle就可以从file block 上读取其他信息 创建重要的数据库对象 从而根据这一部分信息启动数据库 这就实现了数据库的引导 类似于操作系统的初始化 这部分你可以参考biti_rainy的文章     X$表由此建立 这一部分表可以从v$fixed_table中查到     SQL> select count(*) from v$fixed_table where name like X$% ;    COUNT(*)          共有 个X$对象被记录      GV$和V$视图    X$表建立以后 基于X$表的GV$和V$视图得以创建     这部分视图我们也可以通过查询V$FIXED_TABLE得到     SQL> select count(*) from v$fixed_table where name like GV$% ;  COUNT(*)          这一部分共 个对象     SQL> select count(*) from v$fixed_table where name like V$% ;    COUNT(*)          同样是 个对象     v$fixed_table共记录了:     + + 共 个对象     我们通过V$PARAMETER视图来追踪一下数据库的架构:    SQL> select view_definition from v$fixed_view_definition a where a VIEW_NAME= V$PARAMETER ;    VIEW_DEFINITION    select NUM NAME TYPE VALUE ISDEFAULT ISSES_MODIFIABLE ISSYS_MODIFIA    BLE ISMODIFIED ISADJUSTED DESCRIPTION UPDATE_MENT from GV$PARAMETER wh    ere inst_id = USERENV( Instance )    我们看到V$PARAMETER是由GV$PARAMETER创建的     SQL> select view_definition from v$fixed_view_definition a where a VIEW_NAME= GV$PARAMETER ;    VIEW_DEFINITION    select x inst_id x indx+ ksppinm ksppity ksppstvl ksppstdf decode(bitand(kspp    iflg/ ) TRUE FALSE ) decode(bitand(ksppiflg/ ) IMMEDIATE      DEFERRED IMMEDIATE FALSE ) decode(bit    and(ksppstvf ) MODIFIED SYSTEM_MOD FALSE ) decode(bitand(ksppstvf )     TRUE FALSE ) ksppdesc ksppstcmnt from x$ksppi x x$ksppcv y where (x i    ndx = y indx) and ((translate(ksppinm _ # ) not like #% ) or (ksppstdf = F    ALSE ))    在这里我们看到GV$PARAMETER来源于x$ksppi x$ksppcv两个X$表 x$ksppi x$ksppcv 基本上包含所有数据库可调整参数 v$parameter展现的是不包含 _ 开头的参数 以 _ 开头的参数我们通常称为隐含参数 一般不建议修改 但很多因为功能强大经常使用而广为人知 cha138/Article/program/Oracle/201311/17400

相关参考

知识大全 Oracle数据字典与动态性能视图

Oracle数据字典与动态性能视图  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  常用的数据字典

知识大全 如何有效的利用ORACLE数据字典

如何有效的利用ORACLE数据字典  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!ORACLE的数据

知识大全 Oracle数据字典的介绍与应用实例

Oracle数据字典的介绍与应用实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle

知识大全 ORACLE常用数据字典的查询视图

ORACLE常用数据字典的查询视图  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  用户  查看用

知识大全 Oracle用户数据字典以及查询表字段

Oracle用户数据字典以及查询表字段  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  查看当前用

知识大全 ORACLE主要的系统表和数据字典视图

ORACLE主要的系统表和数据字典视图  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  系统表  

知识大全 Oracle快速删除数据字典管理的表空间

Oracle快速删除数据字典管理的表空间  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我的测试

知识大全 Oracle数据字典(可用它动态获取字段名、长度、类型等)

Oracle数据字典(可用它动态获取字段名、长度、类型等)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 如何利用oracle外部表查看报警信息

  首先了解什么是外部表与其它表的区别建立一个简单的外部表(主要看操作过程)最后我们用外部表查看Oracle报警日志  一了解oracle外部表  外部表定义结构被存放在数据字典而表数据被放在OS文件

知识大全 Oracle数据块原理深入剖析

Oracle数据块原理深入剖析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据块(Oracl