数据字典
数据字典
1 什么是数据字典
Oracle提供了大量的内部表,它们记录了数据库对象的更改和修正。可以将这些内部表划分为两种主要类型: 静态的数据字典表和动态的性能表
这些内部表是由oracle维护的,它们都是只读表。用户包括sys都不能修改,只能查看
Oracle数据字典通常是在创建和安装数据库时被创建的
2 数据字典内容
- 数据库中所有模式对象的信息,如表、视图、簇、及索引等
- 分配多少空间,当前使用了多少空间等
- 列的缺省值
- 约束信息的完整性
- Oracle用户的名字
- 用户及角色被授予的权限
- 用户访问或使用的审计信息
- 其它产生的数据库信息
3 数据字典组成
数据字典表:是Oracle存放系统数据的表。这些表属于SYS用户。用以存储表、索引、约束以及其他数据库结构信息,通常以$结尾,如tab$、obj$、ts$、aud$等
内部表(X$):Oracle 的核心,官网不做说明,Oracle通过大量X$建立起大量视图,仅供用户select
数据字典视图数据字典表上创建,通常分为三类dba_、all_、user_
动态性能视图(v$)实时更新反应当前实例的状态,官网对v$视图有详尽的说明
实际工作中最常用的是数据字典视图和动态性能视图:
广义概念中:v$也属于数据字典范畴。因为v$的结构也是在创建数据库的时候通过执行脚本完成的。与数据字典视图不同的是:v$数据源不是来自system表空间,而是来自内存或控制文件,它在实例启动后被填充,在实例关闭后被清除
4 查询静态和动态视图
4.1 dict表 dictionary
dict表记录了所有静态视图和动态视图的名称
select count(*) from dict; select * from dict where table_name='DBA_OBJECTS';
4.2 数据字典视图:静态(static)视图
在数据库open状态下访问,可以通过静态视图了解database的架构
dba_:存储所有用户对象的信息(默认只能有sys/system用户访问)
all_:存储当前用户有权限访问的对象的信息(包括用户所拥有和其他用户授权访问的)
user_:存储当前用户所拥有的对象的相关信息
startup mount force; select status from v$instance;
select tablespace_name from dba_tablespaces;
select name from v$tablespace;
alter database open; select tablespace_name from dba_tablespaces;
4.3 动态性能视图(v$)
是维护当前实例信息的,由于不断的更新,所以也叫动态视图
其底层是一组虚拟的动态表称为X$表,Oracle不允许直接访问X$表,而是在这些表上创建视图,然后再创建这些视图的同义词。
基表(x$)-------------视图(v_$)--------------同义词v$---------------用户访问
explain plan for select tablespace_name from dba_tablespaces; @?/rdbms/admin/utlxplp.sql
可以通过v$fixed_table视图查到所有的动态视图的名称;用于调优和数据库监控
select count(*) from v$fixed_table;
GV$视图含义为Global V$,大多数V$视图都有一个GV$视图存在。RAC环境查看gv$
4.4 普通用户访问dba_xxx
第一种:授予具体视图查询权限
grant select on dba_objects to scott;
回收权限
revoke select on dba_objects from scott;
第二种:授予查select any dictionary系统权限
grant select any dictionary to scott;
第三种:授予select_catalog_role角色
grant select_catalog_role to scott;
第四种【不推荐】
grant select any table to scott; alter system set O7_DICTIONARY_ACCESSIBILITY=true scope=spfile;
4.5 如何让普通用户访问v$xxx
grant select on v_$log to scott; --授予scott用户v_$对象权限