oracle体系-14-数据字典

半腔热情 提交于 2020-02-13 01:38:24

什么是数据字典

1)Oracle提供了大量的内部表,它们记录了数据库对象信息。可以将这些内部表划分为两种主要类型:静态的数据字典表和动态的性能表。这些内部表是由oracle维护的,它们都是只读表。用户包括sys都不能修改,只能查看。

2)Oracle数据库字典通常是在创建和安装数据库时被创建的

11.2数据字典内容

1)数据库中所有模式对象的信息,如表、视图、簇、及索引等。

2)分配多少空间,当前使用了多少空间等。

3)列的缺省值。

4)约束信息的完整性。

5)Oracle用户的名字。

6)用户及角色被授予的权限。

7)用户访问或使用的审计信息。

8)其它产生的数据库信息

数据字典组成

1)数据字典表:是Oracle存放系统数据的表。这些表属于SYS用户。用以存储表、索引、约束以及其他数据库结构信息,通常以$结尾,如tab$,obj$,ts$,aud$等。

2)内部表(X$):Oracle的核心,官网不做说明, Oracle通过大量X$建立起大量视图,仅供用户select

3)数据字典视图:数据字典表上创建,通常分为三类dba_, all_, user_

4)动态性能视图(V$):实时更新反应当前实例的状态,官网对V$视图有详尽的说明。

实际工作中最常用的是数据字典视图和动态性能表:

广义概念中:v$也属于数据字典范畴。因为v$的结构也是在创建数据库的时候通过执行脚本完成的。与数据字典视图不同的是:v$数据源不是来自system表空间,而是来自内存或控制文件,它在实例启动后被填充,在实例关闭后被清除。

 查询静态和动态视图

1)DICT表记录了所有静态视图和动态视图的名称

SQL> select * from dict where table_name='DBA_OBJECTS';

SQL> select count(*) from dict;

2)数据字典视图:静态(static)视图

在数据库open状态下访问,可以通过静态视图了解database的架构(记录database的架构

dba_:存储所有用户对象的信息(默认只能有sys/system 用户访问)

all_:存储当前用户能够访问的对象(包括用户所拥有的对象和别的用户授权访问的对象)的信息。

user_:存储当前用户所拥有的对象的相关信息。

3)动态性能视图(V$)

是维护当前实例信息的,由于不断的更新,所以也叫动态视图。其底层是一组虚拟的动态表称为X$表,Oracle不允许直接访问X$表,而是在这些表上创建视图,然后再创建这些视图的同义词。

基表(x$)-------------视图(v_$)--------------同义词v$-------用户访问

可以通过v$fixed_table 视图  查到所有的动态视图的名称;用于调优和数据库监控。

SQL> select count(*) from v$fixed_table;

从Oracle8开始, GV$视图开始被引入,其含义为Global V$,GV$的产生是为了满足OPS环境的需要,除了一些特例以外,每个V$视图都有一个GV$视图存在。

4)如何让普通用户访问dba_xxx的三种授权方法

第一种SQL>grant select on dba_objects to scott;   将对象权限授予scott

SQL>revoke select on dba_users from scott  收回对象权限

第二种SQL>grant select any dictionary to scott;   将系统权限授权给scott

第三种

SQL>grant select any table to scott;   ##此时,scott除了不能访问dba_xxx,其余均可访问

Sys@SQL>alter system set O7_DICTIONARY_ACCESSIBILITY=true scope=spfile;   ##sys给o7的布尔值变为真,即可达到scott访问任意表,O7修改完后,需要重启生效

5)如何让普通用户访问v$xxx

SQL>grant select on v_$log to scott;   ##授予Scott 用户v_$对象权限

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!