Oracle 数据字典中有大量的关于所有类型的数据库用户的表和视图。
一、Oracle用户视图
用户视图是在数据字典中的可以为全部用户所拥有的视图,一个用户对其它的用户只有CREATE SESSION 的权限,所有的用户都是这样。
1、查看用户
select * from user_users;
--用户查看表设计
select * from user_users;
--all_users可以查看所有存在于数据库中的用户
select * from all_users;
USERNAME | USER_ID | DEFAULT_TABLESPACE | TEMPORARY | TABLESPACE | CREATED |
JSMITH | 29 | USERS | TEMP | 14-MAR-97 |
USERNAME | USER_ID | CREATED |
SYS | 0 | 01-JAN-97 |
SYSTEM | 5 | 01-JAN-97 |
SCOTT | 8 | 01-JAN-97 |
JSMITH | 10 | 14-MAR-97 |
TJONES | 11 | 15-MAR-97 |
VJOHNSON | 12 | 15-MAR-97 |
USER_USERS 视图可以查看ORACLE 中的 ID是如何设置的,显示其它用户的详细情况以及对用户的统计。默认的表大小和临时表的大小也可以被显示。默认的USER 的表的大小是指由该用户所创建的表的大小,临时表大小是对 JSMITH 所指定的进行排序和分组空间的大小。
ALL_USERS 视图你可以看到所有存在于数据库中的用户,但是内容不会像user_users那么详细。
2、访问权限
--查看系统权限
select *from user_sys_privs;
USERNAME | PRIVILEGE | ADM |
JSMITH | UNLIMITED TABLESPACE | NO |
JSMITH | CREATE SESSION | NO |
JSMITH已经被赋予两种权限:
UNLIMITED TABLESPACE//无限表空间权限, 允许用户在其他表空间随意建表。
CREATE SESSION//创建会话权限,允许用户登录数据库。
--查看用户自己拥有的系统权限
select *from user_role_privs;
username | granted_role | adm | def | os_ |
JSMITH | CONNECT | NO | YES | NO |
JSMITH | RESOURCE | NO | YES | NO |
3、访问内容
--查看用户视图
select * from user_catalog;
TABLE_NAME | TABLE_TYPE |
MAGAZINE_TBL | TABLE |
MAG_COUNTER | SEQUENCE |
MAG_VIEW | VIEW |
SPORTS | TABLE |
查看其他人拥有的表。
select * from all_catalog;
二、系统数据库管理员
1、用户访问DBA
select *
from USER_ROLE_PRIVS;
select * from sys.dba_roles;
--系统报错,显示表或者视图不存在,因为用户没有访问数据库管理员权限
USERNAME | GRANTED_ROLE | ADM | DEF | OS_ |
JSMITH | CONNECT | NO | YES | NO |
JSMITH | RESOURCE | NO | YES | NO |
2、数据库用户信息
select * from sys.dba_users;
USERNAME | USER_ID | PASSWORD | DEFAULT _TABLESPACE | TEMPORARY _TABLESPACE | CREATED | PROFILE |
SYS | 0 | 4012DA490794C16B | SYSTEM | TEMP | 06-JUN-96 | DEFAULT |
JSMITH | 5 | A4A94B17405C10B7 | USERS | TEMP | 06-JUN-96 | DEFAULT |
当选择了 DBA_USERS 视图中的所有内容,这个视图是 DBA 管理其它用户的重要视图。
三、数据库安全
在数据字典中有三个基本的视图与数据库安全相关的,这三个视图与数据库的规则、规则对用户的授权以及系统权限对用户的授权相关。视图会在 DBA_ROLES、DBA_ROLE_PRIVS和DBA_SYS_PRIVS中介绍。
--视图 DBA_ROLES 给出了所有在数据库中创建的规则的信息。它给出的规则的名字以及规则是否存在密码
select * from sys.dba_roles;
ROLE | PASSWORD |
CONNECT | NO |
RESOURCE | NO |
DBA | NO |
EXP_FULL_DATABASE | NO |
IMP_FULL_DATABASE | NO |
END_USER_ROLE | NO |
select * from dba_role_privs
where grant='RJENNINGS';
--DBA_ROLE_PRIVS 给出的关于赋给用户的数据库规则的信息
GRANTEE | GRANTED_ROLE | ADM | DEF |
RJENNINGS | CONNECT | NO | YES |
RJENNINGS | DBA | NO | YES |
RJENNINGS | RESOURCE | NO | YES |
第一列为被授权人,第二列显示了被授予的规则。用户所授予的每一个规则都会占用表中的一个记录。ADM 通过后边的 ADM 选项来确定这个规则是否是允许的,最后一列为默认,表明这个规则是否是用户的默认规则。
DBA_SYS_PRIVS 给了所有授予用户的系统权限,这个视图与 DBA_ROLE_PRIVS 视图类似,可以通过把系统权限授予规则来把这些系统权限包括在规则中。
四、数据库对象
数据字典中有几个视图提供有关数据库对象如表、索引的信息,通常这些视图你可以获得常用的信息或详细的信息。
1、DBA_CATALOG
--DBA_CATALOG 所做的事与 USER_CATALOG 是一样的,只显示了所有者的表。
select * from sys.dba_catalog
where rownum<5;
OWNER | TABLE_NAME | TABLE_TYPE |
SYS | CDEF$ | TABLE |
SYS | TAB$ | TABLE |
SYS | IND$ | TABLE |
SYS | CLU$ | TABLE |
USER_CATALOG 则用于显示当前用户的表,用 DBA_CATALOG 视图 DBA 可 以快速地查看所有的表。
2、DBA_OBJECTS
dba_objects对于特定的数据库都存在哪种类型的对象。
select distinct(object_ytpe)
from sys.dba_objects;
DISTINCT 功能可以让存在于数据库中的对象只出现一。
3、DBA_TABLES
--DBA_TABLES 视图给出了关于数据库表和大多数与存储有关的数据库对象的信息
select substr(OWNER,1,8) owner
substr(TABLE_NAME,1,25) TABLE_NAME,
substr(TABLESPACE_NAME,1,30) TABLESPACE_NAME
from SYS.DBA_TABLES
where OWNER='JSMITH';
OWNER | TABLE_NAME | TABLESPACE_NAME |
JSMITH | MAGAZINE_TBL | USERS |
JSMITH | HOBBY_TBL | USERS |
JSMITH | ADDRESS_TBL | SYSTEM |
JSMITH | CUSTOMER_TBL | USERS |
4、DBA_SYNONYMS
DBA_SYNONYMS 给出了所有存在于数据库中的同义字的清单。DBA_SYNONYMS 给出了所有数据库用户的同义字清单,USER_SYNONYMS是给出了当前 用户私有的同义字。
SELECT SYNONYM_NAME,
SUBSTR(TABLE_OWNER,1,10) TAB_OWNER,
SUBSTR(TABLE_NAME,1,30) TABLE_NAME
FROM SYS.DBA_SYNONYMS
WHERE OWNER = 'JSMITH';
5、DBA_INDEXS
DBA_INDEXS得到所有的 JSMITH 的表和索引的清单。
SELECT SUBSTR(TABLE_OWNER,1,10) TBL_OWNER,
SUBSTR(TABLE_NAME,1,30) TABLE_NAME,
SUBSTR(INDEX_NAME,1,30) INDEX_NAME
FROM SYS.DBA_INDEXES
WHERE OWNER = 'JSMITH' AND ROWNUM < 5
ORDER BY TABLE_NAME;
DBA_IND_COLUMNS工程/计划的记录集
SELECT SUBSTR(TABLE_NAME,1,15) TABLE_NAME,
SUBSTR(INDEX_NAME,1,30) INDEX_NAME,
SUBSTR(COLUMN_NAME,1,15) COLUMN_NAME,
COLUMN_POSITION
FROM SYS.DBA_IND_COLUMNS
WHERE TABLE_OWNER = 'JSMITH'
AND ROWNUM < 10
ORDER BY 1,2,3;
6、DBA_TABLESPACES视图
DBA_TABLESPACES 视图执行一个查询来查看所有的表空间以及状态。
SELECT TABLESPACE_NAME, STATUS
FROM SYS.DBA_TABLESPACES;
7、DBA_TS_QUOTAS
DBA_TS_QUOTAS可以用来查看JSNITH还有多少空间存储数据库对象。
SELECT TABLESPACE_NAME,BYTES,MAX_BYTES
FROM SYS.DBA_TS_QUOTAS
WHERE USERNAME='JSMITH';
五、数据库空间
1、数据库增长
有两个视图可以对管理数据库的生长情况进行控制。
1.1 DBA_SEGMENTS
DBA_SEGMENTS 提供了关于每一段或数据对象如存储分配,空间使用和扩展的信息。次当表和索引的增长超过了预先的指定就会开始下一次的扩展。采用这种方式会产生存储空间碎片化。
select substr(SEGMENT_NAME,1,20) SEGMENT_NAME,
substr(SEGMENT_TYPE,1,12) SEGMENT_TYPE,
bytes,
extents
from sys.DBA_SEGMENTS
where OWNER = 'TWILLIAMS'
and ROWNUM < 5;
1.2 DBA_EXTENTS会给出段每次扩展的信息。
select SUBSTR(OWNER,1,10) OWNER,
substr(SEGMENT_NAME,1,30) SEGMENT_NAME,
extent_id,
bytes
from sys.DBA_EXTENTS
where OWNER = 'TWILLIAMS'
and SEGMENT_NAME = 'INVOICE_TBL'
order by EXTENT_ID;
在扩展次数太多,需要重建数据库并重新生成表并增加 initial_extent 的大小以优化空间的使用,重新生成表将后,将原表中的数据释放一个单一的片断中, 会造成碎片化
3、空间分配
视图 DBA_DATA_FILES 可以让你看到表空间的实际分配。
select substr(TABLESPACE_NAME,1,25) TABLESPACE_NAME,
substr(FILE_NAME,1,40) FILE_NAME,
bytes
from sys.DBA_DATA_FILES;
4、可用空间
DBA_FREE_SPACE 视图可以告诉你在每个表格空中 还有多少自由的空间可以使用。
select TABLESPACE_NAME, sum(BYTES)
from sys.DBA_FREE_SPACE
group by TABLESPACE_NAME;
5、ROLLBACK 段
视图 DBA_ROLLBACK_SEGS可以查看事务所预留的 ROLLBACK 区域。
select OWNER,SEGMENT_NAME
from sys.DBA_ROLLBACK_SEGS;
六、动态执行视图
1、会话信息
对 V$SEEEION 视图执行 DESCRIBE命令,可以查看视图的详细内容。
describe V$SESSION
查看当前数据会话信息。
select USERNAME, COMMAND, STATUS
from V$SESSION
where USERNAME is not null;
2、运行统计
对用户的会话进行统计,包括执行的统计包括如数据库读写速率、对表的成功命中、系统全局区域的使用、内存缓冲的使用、ROLLBACK 的详细信息、事务历史记录的详细信息以及表的锁定和等待情况。
3、计划表
计划表是 ORACLE 的 SQL 语言工具所使用的默认表,EXPLAIN PLAN表是由被称为 UTLXPLAN.SQL 的 ORACLE 脚本所创建的。当软件被安装时拷贝到的服务器上,数据是由 EXPLAIN PLAN 工具来产生。