CJforever 2014-09-23
数据字典是Oracle存放有关数据库对象信息的一组表和视图结构,其用途是用来描述数据的。比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息等。它们由脚本$oracle_home/rdbms/admin/catalog.sql创建,存放在SYSTEM表空间中。
Oracle中的数据字典有静态和动态之分。 静态数据字典主要是由表和视图组成,是在用户访问数据字典时不会发生改变的。数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。
静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*、 all_*、 dba_*。
user_*:该视图存储了关于当前用户所拥有的对象的信息。(即所有在该用户模式下的对象)
all_*:该试图存储了当前用户能够访问的对象的信息。(与user_*相比,all_* 并不需要拥有该对象,只需要具有访问该对象的权限即可)
dba_*:该视图存储了数据库中所有对象的信息。(前提是当前用户具有访问这些数据库的权限,一般来说必须具有管理员权限)
--------------------------------------分割线 --------------------------------------
--------------------------------------分割线 --------------------------------------
常用的静态数据字典视图有:
1、用户(user_users,user_sys_privs)
查看当前用户的缺省表空间
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;
显示指定用户所具有的系统权限
SQL>select * from dba_sys_privs where grantee='GAME';
2、表(user_tables)
查看用户下所有的表
SQL>select table_name,tablespace_name from user_tables;
查看名称包含REG字符的表
SQL>select object_name,object_id from user_objects where instr(object_name,'REG')>0;
查看某表的大小
SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper('table_name');
3、索引(user_indexes)
查看索引个数和类别
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、视图(user_views)
查看视图的名称
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');
5、约束条件(user_constraints)
查看某表的约束条件
SQL>select constraint_name, constraint_type,search_condition, table_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;
6、存储函数和过程(user_objects )
查看函数和过程的状态
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');
7、表空间(dba_free_space 、dba_data_files)
查看表空间的使用情况
SQL>select a.tablespace_name "表空间名称",
100-round((nvl(b.bytes_free,0)/a.bytes_alloc)*100,2) "占用率(%)",
round(a.bytes_alloc/1024/1024,2) "容量(M)",
round(nvl(b.bytes_free,0)/1024/1024,2) "空闲(M)",
round((a.bytes_alloc-nvl(b.bytes_free,0))/1024/1024,2) "使用(M)",
to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') "采样时间"
from (
select f.tablespace_name, sum(f.bytes) bytes_alloc, sum(decode(f.autoextensible,'YES',f.maxbytes,'NO',f.bytes)) maxbytes
from dba_data_files f
group by tablespace_name
) a,
(select f.tablespace_name,sum(f.bytes) bytes_free
from dba_free_space f
group by tablespace_name
) b,
where a.tablespace_name = b.tablespace_name;
查看表空间物理文件的名称及大小
SQL>select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;
动态数据字典是依赖数据库运行的性能的,反映数据库运行的一些内在信息,所以在访问这类数据字典时往往不是一成不变的。