4.9 数据字典视图与动态性能视图

在Oracle数据库中,与用户有关的表有三种,一是用户自己创建的表,二是数据字典视图,三是动态性能视图。在后两种视图中,用户可以查询自己关心的信息。

4.9.1 数据字典视图

数据字典是一种系统表,它在数据库被创建时自动产生,并且由数据库服务器本身进行维护和更新。在数据字典中包含了数据库的相关信息。在数据字典中存储了以下信息:

·数据库的物理结构和逻辑结构信息。

·用户和权限信息。

·数据库对象的信息,如表、视图、索引、存储程序、约束等。

·审计信息。

由于数据字典是一个非常大而且非常复杂的表,用户不方便对其进行直接的访问,而且这样做也不安全。为了用户访问方便,Oracle提供了许多数据字典视图,这些视图就建立在数据字典基表上,我们平常所说的数据字典就是指这些数据字典视图。数据字典视图的结构可以通过在SQL*Plus中执行DESC命令来查看。对一个用户而言,可以访问的数据字典视图很多,如果按照所包含的信息的范围大小来划分,有三类主要的数据字典视图,这些视图的名称分别以以下标识符开始:

user_存储当前用户所拥有的某类对象的信息。

all_存储当前用户有权访问的某类对象的信息。

dba_存储数据库中所有的某类数据对象的信息,仅管理员可以访问。

例如,从数据字典视图user_objects中可以查询当前用户所拥有的所有对象的信息,包括表、视图、索引、存储程序等。如果要查询当前用户所拥有的所有对象的名称、类型、创建时间、状态等信息,可以执行下列SELECT语句:


SQL>SELECT object_name, object_type, created, status FROM user_objects;


在数据字典视图user_tables中存储了当前用户所拥有的表的信息。例如,要查询当前用户所拥有的表的名称和所在的表空间名称,可以执行下列SELECT语句:


SQL>SELECT table_name, tablespace_name FROM user_tables;


查询的结果类似如下,根据不同的用户查询结果会有所不同:


TABLE_NAME TABLESPACE_NAME

BONUS SYSTEM

DEPT SYSTEM

EMP SYSTEM

SALGRADE SYSTEM

STU SYSTEM


从数据字典视图all_tables中可以查询当前用户可以访问的表的信息,包括用户自己创建的表,以及其他用户授权该用户可以访问的表。例如,通过执行下面的SELECT语句,可以了解当前用户可以访问的表的名称:


SQL>SELECT table_name FROM all_tables;


从数据字典视图user_tab_columns中可以查询当前用户所拥有的表的各个列的定义。例如,通过执行下列的SELECT语句,可以了解表DEPT的各个列的定义:


SQL>SELECT table_name, column_name, data_type, data_length

FROM user_tab_columns

WHERE table_name='DEPT';


这条SELECT语句的执行结果类似如下:


TABLE_NAME COLUMN_NAME DATA_TYPE DATA_LENGTH

DEPT DEPTNO NUMBER 22

DEPT DNAME VARCHAR2 14

DEPT LOC VARCHAR2 13


从数据字典视图dbatables中能够查询当前数据库中所有表的信息,这类以dba开始的视图只能由SYS用户查看。例如,下面的SELECT语句用于查询数据库中所有表的名称、所在表空间的名称、所有者等信息:


SQL>SELECT table_name, tablespace_name, owner FROM dba_tables;


一个用户可以访问的数据字典是很多的,这些数据字典的名字是与所存储的对象信息有关的。例如,数据字典视图user_indexes可以查询当前用户所创建的索引的信息,在dba_users中,可以查询当前数据库中所有用户的信息。在以后的章节中,我将陆续介绍很多有用的数据字典视图。