相关链接
- 相关名词
缺省 : 缺省,即系统默认状态,意思与“默认”相同。
缺省值:default value。缺省值(quē shěng zhí)就是默认值。是指一个属性、参数在被修改前的初始值。计算机软件系统要求用户输入某些值而用户未给定时,系统自动赋予的事先设定的数值。
Oracle数据字典
-
Oracle数据库字典
┄┄┄数据字典内存放了Oracle的数据库信息,用户可以通过数据字典来查看这些信息。数据字典是只读的,它是Oracle数据库的最重要的部分之一,是由一组只读的表及其视图组成。数据字典可提供以下的信息。- Oracle用户的名字
- 每一个用户所拥有的权限和角色
- 数据库对象的名字(表、视图、快照、索引、聚集、同义词、序列、过程、函数、包及触发器等)
- 关于完整性约束的信息
- 列的缺省值
- 有关数据库中对象的空间分布及当前使用情况
- 审计信息(如谁存取或修改各种对象)
- 其它的一些数据库信息
-
Oracle中的数据字典有静态和动态之分
静态数据字典
主要包含用户在访问数据字典时不会发生改变的信息。动态数据字典
是依赖数据库运行的性能的,反映数据库运行的一些内在信息,所以在访问这类数据字典时数据往往不是一成不变的,数据库管理员常从动态数据字典中获得数据的运行信息。接下来我们分别就这两类数据字典来论述。
1 静态数据字典
┄┄┄这类数据字典主要是由表和视图组成。应该注意的是,数据字典中的表是不能直接来访问的,但是可以访问数据字典中的视图。静态数据字典中的视图分为三类,它们分别为:DBA_、ALL_、USER_。
- DBA_视图存储了数据库中所有对象的信息。当前用户必须具有访问这些数据库的权限才能访问,一般来说必须具有管理员权限。
- ALL_视图存储了当前用户能够访问的所有对象的信息。与USER相比,ALL并不需要拥有该对象,只需要有访问该对象的权限即可。
- USER_视图存储了当前用户所拥有的对象的信息(即所有在当前用户模式下的对象)。
- 可以简单理解为在ALL_视图查询时加上限制条件 WHERE OWNER = ‘当前USER’
┄┄┄三类视图之间的数据有重叠,它们之间除了因为访问权限不一样所以访问范围不一样之外,其他均具有一致性。具体来说,由于数据字典视图是由SYS(系统用户)所拥有的,在缺省情况下,只有SYS和拥有DBA系统权限的用户可以看到所有的视图。没有DBA权限的用户只能看到USER_和ALL_视图。如果用户没有被授予相关的SELECT权限,就不能看到DBA_视图的内容。举例来说,USER_USERS、ALL_USERS、DBA_USERS视图内放的都是有关用户的信息,USER_USERS内放的是用户名,用户状态,用户创建时间等信息,而ALL_USERS内放的是当前数据库内所有用户的用户名称和用户创建时间。DBA_USERS内描述的字段信息和USER_USERS一样,但显示所有用户的信息。三者一般同时出现,有USER_USERS就有DBA_USERS和ALL_USERS;同样,有USER_TABLES就有DBA_TABLES和ALL_TABLES等,只是范围不一样。
- √ 表示任意用户可以访问
- 〇 表示需要管理员权限
- × 表示这个表不存在
列:表示DBA_ ALL_ USER_ 三个表表结构是否一致,如果不一致,相差几个字段
序号 | DBA_ | ALL_ | USER_ | 视图家族 | 描述 | 搜集统计信息 Statistic | 列 | 编号 | 备注 |
---|---|---|---|---|---|---|---|---|---|
1 | 〇 | √ | √ | COL_COMMENTS | 表和视图的列上的注释 | N | T6 | OFFICIAL | |
2 | 〇 | √ | √ | COL_PRIVS | 包含了表的列权限,包括授予者、被授予者和权限 | N | OFFICIAL | ||
3 | 〇 | √ | √ | CONS_COLUMNS | 【约束-列】信息,比如约束中所指定的列,多个约束进行排序 | N | T4 | OFFICIAL | |
4 | 〇 | √ | √ | CONSTRAINTS | 约束信息,比如约束的类型,约束的执行状态 | N | T3 | OFFICAL 延迟约束 | |
5 | 〇 | × | √ | EXTENTS | 数据范围信息,比如数据文件,数据段名(segment_name)和大小 | N | N(-4) | OFFICIAL | |
6 | 〇 | √ | √ | IND_COLUMNS | 索引列信息,比如索引上的列的排序方式 | N | OFFICIAL | ||
7 | 〇 | √ | √ | INDEXES | 索引信息,比如类型、唯一性和被涉及的表 | N | OFFICIAL | ||
8 | 〇 | √ | √ | OBJECTS | 对象信息,比如状态和DDL time | N | T7 | OFFICIAL | |
9 | 〇 | × | √ | ROLE_PRIVS | 角色权限,比如GRANT和ADMIN选项 | N | OFFICIAL | ||
10 | 〇 | × | √ | SEGMENTS | 表和索引的数据段信息,比如tablespace和storage | N | OFFICIAL | ||
11 | 〇 | × | × | SEQUECNCES | 序列信息,比如序列的cache、cycle和ast_number | N | OFFICIAL | ||
12 | 〇 | √ | √ | SOURCE | 除触发器之外的所有内置过程、函数、包的源代码 | N | N(-1) | OFFICIAL | |
13 | 〇 | √ | √ | SYNONYMS | 别名信息,比如引用的对象和数据库链接db_link | N | OFFICIAL | ||
14 | 〇 | × | √ | SYS_PRIVS | 系统权限,比如grantee、privilege、admin选项 | N | OFFICIAL | ||
15 | 〇 | √ | √ | TAB_COLUMNS | 表和视图的列信息,包括列的数据类型,长度、精度 ,最大最小值等 | Y | T1 | OFFICIAL 直方图 | |
16 | 〇 | √ | √ | TAB_COMMENTS | 表和视图的注释信息 | N | T2 | OFFICIAL | |
17 | 〇 | √ | √ | TAB_PRIVS | 表权限,比如授予者、被授予者和权限 | N | OFFICIAL | ||
18 | 〇 | √ | √ | TABLES | 表信息,比如表空间(tablespace),存储参数(storage parms)和数据行的数量 | Y | T5 | OFFICIAL | |
19 | 〇 | √ | √ | TRIGGERS | 触发器信息,比如类型、事件、触发体(trigger body) | N | N(-1) | OFFICIAL | |
20 | 〇 | √ | √ | USERS | 用户信息,比如临时的和缺省的表空间 | N | N(+) | OFFICIAL | |
21 | 〇 | √ | √ | VIEWS | 视图信息,包括视图定义 | N | N(-1) | OFFICIAL |
- 举例
1.查看用户信息
查看当前用户的缺省表空间的代码如下。
SQL>select username,default_tablespace
from user_users;
查看当前用户的角色的代码如下。
SQL>select * from user_role_privs;
查看当前用户的系统权限和表级权限如下。
SQL>select * from user_sys_privs;
SQL>select * from user_tab_privs;
2.表
查看用户下所有的表的代码如下。
SQL>select * from user_tables;
查看名称包含log字符的表的代码如下。
SQL>select object_name,object_id
from user_objects
where instr(object_name,'LOG')>0;
查看某表的创建时间的代码如下。
SQL>select object_name,created
from user_objects
where object_name=upper('&table_name');
查看某表的大小的代码如下。
SQL>select sum(bytes)/(1024*1024) as "size(M)"
from user_segments
where segment_name=upper('&table_name');
查看放在Oracle的内存区里的表的代码如下。
SQL>select table_name,cache
from user_tables
where instr(cache,'Y')>0;
3.索引
查看索引个数和类别的代码如下。
SQL>select index_name,index_type,table_name
from user_indexes
order by table_name;
查看索引被索引的字段的代码如下。
SQL>select *
from user_ind_columns
where index_name=upper('&index_name');
查看索引的大小的代码如下。
SQL>select sum(bytes)/(1024*1024) as "size(M)"
from user_segments
where segment_name=upper('&index_name');
4.序列号
查看序列号,last_number是当前值的代码如下。
SQL>select * from user_sequences;
5.视图
查看视图的名称的代码如下。
SQL>select view_name
from user_views;
查看创建视图的select语句如下。
SQL>set view_name,text_length
from user_views;
SQL>set long 2000; %说明:可以根据视图的text_length的值设定set long的大小
SQL>select text
from user_views
where view_name=upper('&view_name');
6.同义词
查看同义词的名称的代码如下。
SQL>select * from user_synonyms;
7.约束条件
查看某表的约束条件的代码如下。
SQL>select constraint_name, constraint_type,search_condition, r_constraint_name
from user_constraints
where table_name = upper('&table_name');
SQL>select c.constraint_name,c.constraint_type,cc.column_name
from user_constraints c,user_cons_columns cc
where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
and c.owner = cc.owner and c.constraint_name = cc.constraint_name
order by cc.position;
8.存储函数和过程
查看函数和过程的状态的代码如下。
SQL>select object_name,status from user_objects where object_type='FUNCTION';
SQL>select object_name,status from user_objects where object_type='PROCEDURE';
查看函数和过程的源代码如下。
SQL>select text from all_source where owner=user and name=upper('&plsql_name');
1.1 分析表
- 分析表
analyze table databasename.tablename compute statistics;
- 删除分析数据
analyze table databasename.tablename delete statistics;
2 动态数据字典
┄┄┄Oracle包含了一些潜在的由系统管理员如SYS维护的表和视图,因为数据库运行时它们会不断进行更新,所以称为动态数据字典(或者是动态性能视图)。这些视图提供了关于内存和磁盘的运行情况,所以只能对其进行只读访问而不能修改。
┄┄┄Oracle中这些动态性能视图都是以v$开头的视图,比如v$access。下面我们就几个主要的动态性能视图进行介绍。
1.V$ACCESS
视图
视图内描述了数据库中锁定的数据库对象以及访问这些对象的会话对象(session对象)。
2.V$SESSION
视图
视图内描述了当前会话的详细信息。该视图字段较多。
3.V$ACTIVE_INSTANCE
视图
视图内描述了当前数据库下活动实例的信息。
4.V$CONTEXT
视图
视图内描述了当前会话的属性信息,比如命名空间、属性值等。
2.1 各类数据字典区分
┄┄┄Oracle中有多种数据字典,有ALL,USER,DBA,V$,GV$,V$,GV_$,X$。数据字典之间的关系比较复杂,前四种前面我们已介绍过,下面详细介绍后几种。
┄┄┄GV$视图是从Oracle 8开始引入的,G表示Global。除了一些特例以外,每个V$视图都有一个对应的GV$视图存在,如GV$FIXED_TABLE对应V$FIXED_TABLE视图。GV$视图出现在并行服务器(OPS)环境中。在并行服务器环境中,GV$视图返回的是所有实例信息;而V$视图则是在GV$视图的基础上,增加了实例ID判断后的结果,即每个V$视图都是在GV$视图中包含语句where inst_id = USERENV(‘Instance’)而产生的,如图2-35所示。
┄┄┄V$、GV$实际上又是GV$,V$视图的同义词(图2-35中以‘=’号表示),V$,GV$是用下面SQL语句从GV$,V$视图中创建的。
SQL>create or replace view v_$nls_parameters as select * from v$nls_parameters;
SQL>create or replace public synonym v$nls_parameters for v_$nls_parameters;
SQL>grant select on v_$nls_parameters to public;
2.2 各类数据字典区分
┄┄┄以后用户经常会用到动态数据字典,尤其是数据管理员。动态数据字典是管理员获取数据库信息的一个接口。图2-36、图2-37和图2-38给出动态数据字典的结构和分类,以帮助读者加深理解。
2.3 动态数据字典分类
┄┄┄Oracle数据库中保存了许多动态数据字典,为了便于用户掌握,这里专门对这些数据字典进行分类,表2-9给出一个数据字典分类表。
说明:“支持的数据库版本”列如果没有写出支持的版本,表示任何版本都支持。
参考文章
20/08/28
M