什么是数据字典
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_$对象权限
来源:https://www.cnblogs.com/yqp-1/p/12302057.html