
1.9 数据字典视图与动态性能视图
在Oracle数据库中,与用户有关的表有三种,一是用户自己创建的表,二是数据字典视图,三是动态性能视图。在后两种视图中,用户(主要是DBA)可以查询自己关心的信息。
关于后两种视图,即数据字典视图和动态性能视图,其中“数据字典视图”用于记录数据库自身当前信息,包括数据库安装后最原始的基础信息,如SYSTEM表空间里的那些东西和随着时间的延续,由用户对数据库所做的维护信息,如新建表、索引、序列及存储程序(过程、函数及触发器)等这些数据库的模式对象,这些信息统称为数据字典基本表。换句话说,数据字典基本表就是给Oracle看的,只有Oracle自己才能看懂,而数据字典视图是为了方便用户查看而将基本表简化而来的,登录到数据库的用户,只要有权限都可以看,而且二者(数据字典基本表和数据字典视图)的内容应该是一样的;而“动态性能视图”则记录的是在数据库运行期间产生的与性能相关的信息,这些信息是动态的,由数据库自身生成。比如,V$SYSSTAT动态性能视图(Oracle的负载间档性能视图),该视图中的数据时刻变化。这样的视图还有很多,在此不再赘述。
尤其是动态性能视图,是DBA们最关心的,依据这些信息可以找出数据库可能存在的性能瓶颈等问题。
1.9.1 数据字典视图
数据字典是一种系统表,它在数据库被创建时自动产生,并且由数据库服务器本身进行维护和更新。在数据字典中包含了数据库的相关信息。在数据字典中存储了以下信息:
●数据库的物理结构和逻辑结构信息;
●用户和权限信息;
●数据库对象的信息,如表、视图、索引、存储程序、约束等;
●审计信息。
由于数据字典是一个非常大且非常复杂的表,用户不方便对其进行直接访问,而且这样做也不安全。为了用户访问方便,Oracle提供了许多数据字典视图,这些视图就建立在数据字典基本表上,平常所说的数据字典就是指这些数据字典视图。数据字典视图的结构可以通过在SQL*Plus中执行DESC命令来查看。对一个用户而言,可以访问的数据字典视图很多,如果按照所包含的信息的范围大小来划分,有3类主要的数据字典视图,这些视图的名称分别以下列标识符开始:
●“user_”打头的,存储当前用户所拥有的某类对象的信息;
●“all_”打头的,存储当前用户有权访问的某类对象的信息;
●“DBA_”打头的,存储数据库中所有的某类数据对象的信息,仅管理员可以访问。
例如,从数据字典视图user_objects中可以查询当前用户所拥有的所有对象的信息,包括表、视图、索引、存储程序等。如果要查询当前用户所拥有的所有对象的名称、类型、创建时间、状态等信息,可以执行下列SELECT语句:
SQL>SELECT object_name,object_type,created,status FROM user_objects; [00016]
在数据字典视图user_tables中存储了当前用户所拥有的表的信息。例如,要查询当前用户所拥有的表的名称和所在的表空间名称,可以执行下列SELECT语句:
SQL>SELECT table_name,tablespace_name FROM user_tables; [00017]
从数据字典视图all_tables中可以查询当前用户可以访问的表的信息,包括用户自己创建的表,以及其他用户授权该用户可以访问的表。例如,通过执行下面的SELECT语句,可以了解当前用户可以访问的表的名称:
SQL>SELECT table_name FROM all_tables; [00018]
从数据字典视图user_tab_columns中可以查询当前用户所拥有的表的各个列的定义。例如,通过执行下列的SELECT语句,可以了解表DEPT的各个列的定义:
SQL>SELECT table_name,column_name,data_type,data_length FROM user_tab_columns WHERE table_name= 'LBKP'; [00019]
这里的表名必须用大写。
从数据字典视图dba_tables中能够查询当前数据库中所有表的信息,这类以“DBA_”开始的视图只能由SYS用户查看。例如,下面的SELECT语句用于查询数据库中所有表的名称、所在表空间的名称、所有者等信息:
SQL>SELECT table_name,tablespace_name,owner FROM dba_tables; [00020]
一个用户可以访问的数据字典有很多,这些数据字典的名字与所存储的对象信息有关。例如,数据字典视图user_indexes可以查询当前用户所创建的索引的信息,在dba_users中,可以查询当前数据库中所有用户的信息。在以后的章节中,将陆续介绍很多有用的数据字典视图。
1.9.2 动态性能视图
如果说数据字典视图反映了数据库的信息,那么动态性能视图则主要反映了实例的信息。数据字典视图中的信息是静态的,来自数据字典基本表,它反映的是数据库的信息,这些信息不会因为数据库服务器的关闭而消失。动态性能视图中的信息则是动态变化的,它反映了实例的实际运行情况,这些信息来自SGA或者控制文件,随着实例的关闭和重新启动,这些信息将重新产生。
动态性能视图的名称基本上是以“v$”开始的。从这些视图中可以获得一些有用的统计信息,这些信息主要用于对数据库的性能进行调优。例如,执行下面的SELECT语句可以了解数据库中一些等待事件的发生情况:
SQL>SELECT event,total_waits,time_waited,average_wait from v$SYSTEM_event; [00021]
下面的语句用于查看SGA中每种缓冲区的大小:
SQL>SELECT name,round(bytes/1024/1024,0)as MB from v$sgastat WHERE round(bytes/1024/1024,0)>0; [00022]