oracle 11g的数据字典 + 动态性能视图

oracle 11g的数据字典 + 动态性能视图

什么是数据字典?(关于数据的数据)

  数据字典是oracle存放有关数据库信息的地方,几乎所有的系统信息和对象信息都可在数据字典中进行查询。数据字典是oracle数据库系统的信息核心,它是一组提供有关数据库信息的表和视图的集合,这些表和视图是只读的。它是随着数据库的建立而建立的,当数据库执行特定动作时数据字典也会自动更新。数据一览与数据字典来记录、校验和管理正在进行的操作。
     oracle中、sys用户是数据字典的拥有者,数据字典保证在所有数据库的系统表空间system内,任何用户都无权更改sys模式下的模式对象或数据字典中的行。也就是说数据字典只能查询,不能手动进行修改。

  数据字典用途
       oracle通过存取数据字典从而比较方便地获取有关用户某事对象和存储结构等信息。当系统执行了DDL语句后,oracle会及时修改数据字典。任何用户只能以读的形式使用数据字典获取数据库信息。
  数据字典包括 :数据字典基本表+数据字典视图
        对于整个数据库的方方面面进行构造,通过目录 ORACLE_HOME\RDBMS\ADMIN下的.sql文件来进行构造,当数据库创建起来以后,并不是所有功能都实现,这样对于数据库来说负荷太大,所以我们会发现有些功能不是默认提供给你的,我们就需要使用该目录下的相应的sql文件重新执行一下,某些扩展功能就会开启。如statspack (得到数据库运行实时信息报告)、logmnr等工能,都是默认不提供但又很常见的,要开启相应功能,就执行相应脚本文件。而数据字典基本表则是由该目录下的sql.bsq创建,文件中rem 表示注释,无实际意义,文件中为多个sql文件名,即就是触发相应sql文件,再实现文件中对应的作用。数据字典基本表大多以$结尾,属于sys用户,存放在system表空间。
用户不能手动去修改数据字典基本表。
      为了简化对数据字典基本表的使用,oracle提供了数据字典视图,oracle还为数据字典视图创建了公有同义词,方便用户使用,数据字典视图和同义词的创建通过catalog.sql。

二、数据字典基本视图的三种类型

数据字典视图分为三种类型:USER_、ALL_、DBA_。
USER_类型的视图表示当前登录用户拥有的信息。
ALL_类型的视图表示当前登录用户有权限看到的信息。 (不仅是自己拥有的,而且还是它能够查看到别人的那一部分信息
DBA_类型的视图表示数据库管理员能够看到的信息,也就是整个数据库范围内的信息。
这里写图片描述

例如:user_tables、all_tables、dba_tables
      user_tables对应了2个数据库对象,一个是数据字典视图、一个是同义词,而且是先基于数据字典基本表创建了数据字典视图,然后为该视图创建了一个同名的同义词。

三、动态性能视图

      动态性能视图:存储数据库中每时每刻都在变化的信息,主要是数据库的活动状态信息,它把存储在内存里的信息、和存储在控制文件里的信息,以视图的形式展现出来。动态性能视图属于数据字典,系统管理员用户 SYS 可以访问它们。
      常见的动态性能视图:v$parameter:初始化参数文件中所有项的值,v$process:当前进程的信息,v$session:有关会话的信息,动态视图实时的记载最新的连接到数据库上的session的情况v$sysstat:基于当前操作会话进行的系统统计,v$log:从控制文件中提取有关重做日志组的信息,v$logfile有关实例重置日志组文件名及其位置的信息,v$lock:当前进程已获得的和正在请求的锁定信息,v$transaction:数据库的事务信息。
      v$fixed_view_definition中记录了所有的动态性能视图的定义信息。

V$, V_$, GV$, X$ 视图说明:

X$

      X$表包含了特定实例的各方面的信息,是Oracle数据库的运行基础,如当前的配置信息,连接到实例的会话,以及丰富而有价值的性能信息。 X$表并不是驻留在数据库文件的永久表或临时表。X$表仅仅驻留在内存中,当实例启动时,由Oracle应用程序动态创建,在内存中进行实时的维护。 它们中的大多数至少需要装载或已经打开的数据库。X$表为SYS用户所拥有,并且是只读的。 不能进行DML(更新,插入,删除)。X$表对数据库来说至关重要,所以Oracle不允许SYSDBA之外的用户直接访问,显示授权不被允许。

可以从v$fixed_table中查到X$:
SQL> select count(*) from v\$fixed_table where name like ‘X\$%’;

COUNT(*)
945                         –在Oracle 11g共有945个X$表。

      关于X$表,其创建信息我们也可以通过bootstrap$表查看,该表中记录了数据库启动的基本及驱动信息。

V$ 视图

     动态性能视图由前缀V_$标识。这些视图的公用同义词具有前缀V$数据库管理员或用户应该只访问V$对象,而不是访问V_$对象。动态性能视图由企业管理器和Oracle Trace 使用,Oracle Trace 是访问系统性能信息的主要界面。一旦实例启动,从内存读取数据的 V$视图就可以访问了。

通过v$fixed_table 查询V$视图信息:

SQL> select count(*) from v$fixed_table where name like ‘V$%’;

COUNT(*)
525

GV$ 视图

     从Oracle8开始,GV$视图开始被引入, GV$(Global V$,全局V$)。除了一些特例以外(如:V$CACHE_LOCK、V$LOCK_ACTIVITY、V$LOCKS_WITH_COLLISIONS和V$ROLLNAME),每个V$视图都有一个对应的GV$视图存在。在并行服务器环境下,可查询GV$视图从所有限定实例中检索V$视图的信息。V$视图和GV$视图是相同的,V$比GV$只是少了INST_ID字段。INST_ID 列显示从其获得相关的V$视图信息的实例号。INST_ID 列可用作一个从可得到的实例集检索V\$信息的过滤器。

如:

SQL>SELECT * FROM GV$LOCK WHERE INST_ID = 2;

表示从实例2上的V$ 视图中检索信息。

通过v$fixed_table 查询GV$视图信息:

SQL> select count(*) from v$fixed_table where name like ‘GV\$%’;

COUNT(*)
496

从查询结果看,GV$是496个,V$是525个,从这个结果可以证明:不是每个V$同义词都有对应的GV$同义词。

GV_$, V_$视图

动态性能的视图是通过catalog.sql创建。当catalog.sql运行时:

create or replace view v_$fixed_table as select * from v$fixed_table;

create or replace public synonym v$fixed_table for v_$fixed_table;

create or replace view gv_$fixed_table as select * from gv$fixed_table;

create or replace public synonym gv$fixed_table for gv_$fixed_table;

    我们注意到, 先创建 V_$和GV_$ 视图,然后基于V_$视图和GV_$视图来创建V$和GV$同义词。所以,实际上通常我们访问的V$视图,其实是指向V_$视图的同义词。而V_$视图是基于X$表建立的。

猜你喜欢

转载自blog.csdn.net/bibibrave/article/details/81698656