你的位置:首页 > 数据库

[数据库]数据字典视图与动态性能视图


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

数据字典视图

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

在数据字典中存储了以下信息:
·数据库的物理结构和逻辑结构信息。
·用户和权限信息。
·数据库对象的信息,如表、视图、索引、存储程序、约束等。
·审计信息。
由于数据字典是一个非常大而且非常复杂的表,用户不方便对其进行直接的访问,而且这样做也不安全。
为了用户访问方便, Oracle提供了许多数据字典视图,这些视图就建立在数据字典基表上,我们平常所说的数据字典就是指这些数据字典视图。
数据字典视图的结构可以通过在SQL*Plus 中执行DESC命令来查看。
对一个用户而言,可以访问的数据字典视图很多,如果按照所包含的信息的范围大小来划分,有三类主要的数据字典视图,这些视图的名称分别以以下标识符开始:
user_ 存储当前用户所拥有某类对象的信息。
all_ 存储当前用户有权访问的某类对象的信息。
dba_ 存储数据库中所有的某类数据对象的信息,仅管理员可以访问。
例如,从数据字典视图user_objects 中可以查询当前用户所拥有的所有对象的信息,包括表、视图、索引、存储程序等。
如果要查询当前用户所拥有的所有对象的名称、类型、创建时间、状态等信息,可以执行下列SELECT语句:

SELECT object_name, object_type, created, status FROM user_objects;

在数据字典视图user_tables 中存储了当前用户所拥有的表的信息。

例如,要查询当前用户所拥有的表的名称和所在的表空间名称,可以执行下列SELECT语句:

SELECT table_name, tablespace_name FROM user_tables;

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

SELECT table_name FROM all_tables;

从数据字典视图user_tab_columns 中可以查询当前用户所拥有的表的各个列的定义。

例如,通过执行下列的SELECT语句,可以了解表DEPT的各个列的定义:

SELECT column_name, data_type, data_length FROM user_tab_columns WHERE table_name='DEPT';

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

SELECT table_name, tablespace_name, owner FROM dba_tables;

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

动态性能视图

如果说数据字典视图反映了数据库的信息,那么动态性能视图则主要反映了实例的信息
数据字典视图中的信息是静态的,来自数据字典基表,它反映的是数据库的信息,这些信息不会因为数据库服务器的关闭而消失。
动态性能视图中的信息则是动态变化的,它反映了实例的实际运行情况,这些信息来自SGA或者控制文件,随着实例的关闭和重新启动,这些信息将重新产生。

动态性能视图的名称基本上是以v$开始的。

从这些视图中可以获得一些有用的统计信息,这些信息主要用于对数据库的性能进行调优。
例如,执行下面的SELECT语句可以了解数据库中一些等待事件的发生情况:

SELECT event, total_waits, time_waited, average_wait FROM v$system_event;

下面的语句用于查看SGA 中每种缓冲区的大小:

SELECT name, bytes/1024/1024 mb FROM v$sgastat;