当前位置: > 数据库 > Oracle >

Oracle常用数据字典介绍

时间:2014-10-03 15:18来源:未知 作者:it

数据字典是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;

动态数据字典是依赖数据库运行的性能的,反映数据库运行的一些内在信息,所以在访问这类数据字典时往往不是一成不变的。


 

Oracle包含了一些潜在的由系统管理员如SYS维护的表和视图,由于当数据库运行的时候它们会不断进行更新,所以称它们为动态数据字典(或者是动态性能视图)。这些视图提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。

常用的动态数据字典视图有:

1、查询有哪些数据库实例在运行(v$active_instance)

SQL>select inst_name from v$active_instances;

2、查看数据库的创建日期和归档方式(v$database)

SQL>Select Created, Log_Mode, Log_Mode From V$Database;

3、查看有哪些用户连接( v$session, v$process)

SQL>select s.oSUSEr os_user_name,

decode(sign(48 - command), 1, to_char(command),

'Action Code #' || to_char(command) ) action,    p.program oracle_process,

status session_status,    s.terminal terminal,    s.program program,

s.username user_name,    s.fixed_table_sequence activity_meter,  s.sid, s.serial# serial_num

from v$session s,    v$process p

where s.paddr=p.addr and    s.type = 'USER'

order by s.username, s.osuser

4、查看还没提交的事务(v$transaction)

SQL>select * from v$locked_object;

SQL>select * from v$transaction;

5、查看锁(lock)情况(v$session,v$lock)

SQL>select /*+ RULE */ ls.osuser os_user_name,  ls.username user_name,

decode(ls.type, 'RW', 'Row wait enqueue lock', 'TM', 'DML enqueue lock', 'TX','Transaction enqueue lock', 'UL', 'User supplied lock') lock_type,

o.object_name object,

decode(ls.lmode, 1, null, 2, 'Row Share', 3,'Row Exclusive', 4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive', null) lock_mode,

o.owner,ls.sid,ls.serial# serial_num,ls.id1,ls.id2

from sys.dba_objects o,

(select s.osuser, s.username, l.type,l.lmode,s.sid, s.serial#, l.id1, l.id2  from v$session s,v$lock l where s.sid = l.sid ) ls

where o.object_id = ls.id1 and o.owner<> 'SYS'

order by o.owner, o.object_name

其他一些可能会用到的数据字典有:

1、查看控制文件

SQL>select name from v$controlfile;

2、查看日志文件

SQL>select member from v$logfile;

3、查看数据库的版本 

SQL>Select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6)='Oracle';

4、取得服务器的IP 地址

SQL>select utl_inaddr.get_host_address from dual;

SQL>SELECT UTL_INADDR.get_host_name('192.168.3.235') FROM dual;

5、取得客户端的IP地址

SQL>select sys_context('userenv','host'),sys_context('userenv','ip_address') from dual;


 

(责任编辑:IT)
------分隔线----------------------------