详解Oracle数据字典

时间:2022-12-18 22:21:49

Oracle通过数据字典来管理和展现数据库信息,数据字典通常储存数据库的元数据,是数据库的“数据库”。通常说的数据字典由4部分组成:内部RDBMS(X$)表、数据字典表、动态性能视图(V$)和(静态)数据字典视图。(两表两视图)

 
1,内部RDBMS(X$)表
     X$表示Oracle数据库的核心部分,这些表用于跟踪数据库内部信息,维持数据库的正常运行。X$表是加密命名的,而且Oracle不做文档说明。X$表是Oracle数据库的运行基础,在数据库启动时由Oracle应用程序动态创建。比如我们熟知的X$BH、X$KSMSP等。研究这些表的最好的办法就是借用Oracle的autotrace功能(set autotrace trace explain)。
 
2,数据字典表
     数据字典表(Data dictionary table)用以存储表、索引、约束以及其它数据库结构的信息,这些对象通常以“$”结尾(例如:TAB$、OBJ$、TS$等),在创建数据库的时候通过运行$ORACLE_HOME/rdbms/admin/sql.bsq脚本来创建。sql.bsq是一个非常重要的文件,其中包含了数据字典表的定义及注释说明,应仔细阅读研究。
     比如我们经常使用的V$DBA_OBJECT视图就是基于V$OBJ创建的;再比如,当用户创建一张表的时候,Oracle将会在后台执行一系列的内部操作,比如向objV$表中插入数据、向tab$表中记录表数据等。Oracle通过将DDL解析成DML操作,并且将这些操作记录在数据字典表中,那么我们当然可以通过反向解析得到原始的创建语句,从Oracle 9i 开始,一个新的工具包 DBMS_METADATA 就可以完成该功能:
详解Oracle数据字典
 
3,静态数据字典视图
     由于X$表和数据字典表通常不能直接被用户访问,Oracle创建了静态数据字典视图来提供用户对于数据字典信息的访问,由于这些信息通常相对稳定,不能直接修改,所以又被称为静态数据字典视图。静态数据字典视图在创建数据库时由$ORACLE_HOME/rdbms/admin/catagory.sql脚本创建。
     静态数据字典视图按照前缀的不同通常分成三类:
     ● USER_:用户所拥有的相关对象信息;
     ● ALL_:用于有权限访问的所有对象的信息;
     ● DBA_:数据库所有相关对象的信息,用于需要有 select any table 的权限才能访问。
     通过三类视图在本质上是为了实现权限控制。在Oracle数据库中,每个用户与方案(Schema)是对应的,Schema是用户所拥有的对象的集合。数据库通过Schema将不同用户的对象隔离开来,用户可以*的访问自己的对象,但是要访问其他Schema对象就需要相关的授权。
 
4,动态性能视图
     动态性能视图记录了数据库运行时信息和统计数据,大部分动态性能视图被实时更新以及反映数据库当前状态。在数据库启动时,Oracle动态创建X$表,在此基础上,Oracle创建了GV$和V$视图,GV$即Global V$,除了一些特例外,每个V$都对应一个GV$。GV$产生是为了OPS/RAC环境的需要,每个V$都是基于GV$的,只是GV$多了INST_ID列来显示实例ID。
    (1)如何查看一个视图的底层创建语句?
     Oracle提供了一些特殊的视图用以记录其他视图的创建方式,v$fixed_view_definition就是其中之一。
详解Oracle数据字典
     (2)查询V$视图时,报的错却是V_$视图不存在,V_$视图不是基于V$视图创建的吗,怎么反向报错了?
 
     为了防止普通用户的误操作,Oracle对通过软件机制对V$视图的访问做了限制,它不允许普通用户直接访问V$视图,但我们平时不是经常访问吗?这其实是Oracle引入了V_$视图。在建立V$视图后,Oracle就建立了V_$视图,随后为V_$视图建立了与V$视图同名的共用同义词。这些工作都是通过catalog.sql脚本(该脚本位于$ORACLE_HOME/rdbms/admin/目录下)实现的。
如:
     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;    --同名同义词
 
也就是说,大部分用户访问的V$对象,并不是视图,而是执行V_$视图的同义词;而V_$视图时基于真正V$视图创建的。
详解Oracle数据字典

详解Oracle数据字典的更多相关文章

  1. [转帖]万字详解Oracle架构、原理、进程,学会世间再无复杂架构

    万字详解Oracle架构.原理.进程,学会世间再无复杂架构 http://www.itpub.net/2019/04/24/1694/ 里面的图特别好 数据和云 2019-04-24 09:11:59 ...

  2. 详解Oracle手动创建数据库几大步骤

    在这里我们将介绍Oracle手动创建数据库几大步骤,包括前期的准备工作,以及具体的实施. Oracle手动创建数据库是本文介绍的重点,希望通过本文能帮助大家更好的利用Oracle.51CTO也向您推荐 ...

  3. ​ 用一个开发案例详解Oracle临时表

    ​ 用一个开发案例详解Oracle临时表 2016-11-14 bisal ITPUB  一.开发需求  最近有一个开发需求,大致需要先使用主表,或主表和几张子表关联查询出ID(主键)及一些主表字段 ...

  4. [转帖]详解oracle数据库唯一主键SYS_GUID()

    详解oracle数据库唯一主键SYS_GUID() https://www.toutiao.com/i6728736163407856139/ 其实 需要注意 这里满不能截取 因为截取了 就不一定唯一 ...

  5. [转帖]【Oracle】详解Oracle中NLS_LANG变量的使用

    [Oracle]详解Oracle中NLS_LANG变量的使用 https://www.cnblogs.com/HDK2016/p/6880560.html NLS_LANG=LANGUAGE_TERR ...

  6. 【Oracle】详解ORACLE中的trigger(触发器)

    本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...

  7. 详解Oracle partition分区表

    随着表中行数的增多,管理和性能性能影响也将随之增加.备份将要花费更多时间,恢复也将 要花费更说的时间,对整个数据表的查询也将花费更多时间.通过把一个表中的行分为几个部分,可以减少大型表的管理和性能问题 ...

  8. 【Oracle】详解Oracle中的序列

    序列: 是oacle提供的用于产生一系列唯一数字的数据库对象. 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效率 创建序列: 1.  要有创建序列的权限 create ...

  9. 【转】详解Oracle的dual表

    网址:http://www.adp-gmbh.ch/ora/misc/dual.html dual is a table which is created by oracle along with t ...

随机推荐

  1. ActiveMQ第二弹:使用Spring JMS与ActiveMQ通讯

    本文章的完整代码可从我的github中下载:https://github.com/huangbowen521/SpringJMSSample.git 上一篇文章中介绍了如何安装和运行ActiveMQ. ...

  2. bzoj 3039 悬线法求最大01子矩阵

    首先预处理每个F点左右,下一共有多少个F点,然后 对于每个为0的点(R),从这个点开始,一直到这个点 下面第一个R点,这一区间中的min(左),min(右)更新答案. ps:我估计这道题数据有的格式不 ...

  3. 常用原生JS兼容性写法汇总

    1.添加事件方法 addHandler:function(element,type,handler){ if(element.addEventListener){//检测是否为DOM2级方法 elem ...

  4. hdu 2295 Radar 重复覆盖+二分

    题目链接 给m个雷达, n个城市, 以及每个城市的坐标, m个雷达里只能使用k个, 在k个雷达包围所有城市的前提下, 求最小半径. 先求出每个雷达到所有城市的距离, 然后二分半径, 如果距离小于二分的 ...

  5. hihoCoder #1174:拓扑排序·一

    [题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 因为今天上课的老师讲的特别无聊.小Hi和小Ho偷偷地聊了起来. 小Ho:小Hi ...

  6. Project 6:上楼梯问题

    问题简述:梯有N阶,上楼可以一步上一阶,也可以一步上二阶.编写一个程序,计算共有多少中不同的走法. 样例输入: 5 样例输出: 8 #include <stdio.h> int count ...

  7. linux-之常用命令

    Linux常用命令,长时间不用或者想用时具体的使用方法模糊了,可以进行查看,避免还要去其他地方进行查找麻烦,所以找了一些命令进行记录.   1.帮助命令 help 和 man 帮助查看命令的具体使用方 ...

  8. Array类型和方法

    var ft = new Array(); var ft = new Array(20); var ft = new Array("1","2","3 ...

  9. CAT架构的应用与实践 IT大咖说 - 大咖干货,不再错过

    CAT架构的应用与实践 IT大咖说 - 大咖干货,不再错过 http://www.itdks.com/dakashuo/new/dakalive/detail/594

  10. bzoj1084&colon; &lbrack;SCOI2005&rsqb;最大子矩阵 dp

    这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 题解:m很小分类讨论,m==1时怎么搞都可以,m==2时,dp[i][j][k]表 ...