oracle数据字典
2015-07-14 11:53
393 查看
每个数据库都提供了各自的数据字典的方案,虽然形式不同,但是目的和作用是一样的,比如在mysql里数据字典是在information_schema 里表现的,sqlserver则是在sys这个系统schema里来展示的。
Oracle的数据字典是Oracle数据库安装之后,自动创建的一系列数据库对象。数据字典是Oracle数据库对象结构的元数据信息。熟悉和深入研究数据字典对象,可以很大程度的帮助我们了解Oracle内部机制。
Oracle字典视图包括四个层次,分别为X$内部表、基础数据字典表、数据字典视图和动态性能视图。
动态性能视图概述
所谓动态性能视图,就是指将内存里的数据或控制文件里的数据以表的形式展现出来。他们实际都是虚拟表,并不是真正的表。只不过是为了能够让我们更好的管理数据库的性能,所以将内存里的活动情况以表的形式展现出来。只要数据库还在运行,就会不断更新动态性能视图。一旦数据库关闭或崩溃,动态性能视图里的数据就会全部丢失,下次重启时则会重新计算。就像所有的数据字典的名词都存在 dictionary里一样,v$fixed_table里存放了所有的动态性能视图的名称。所有的动态性能的属主都是sys,且都以v$_开头,创建同名词时则都以v$开头。
Oracle的数据字典是Oracle数据库安装之后,自动创建的一系列数据库对象。数据字典是Oracle数据库对象结构的元数据信息。熟悉和深入研究数据字典对象,可以很大程度的帮助我们了解Oracle内部机制。
Oracle字典视图包括四个层次,分别为X$内部表、基础数据字典表、数据字典视图和动态性能视图。
数据字典有四类 1内部RDBMS(X$)表 X$表是Oracle数据库的核心部分,这些表用于跟踪内部数据库信息,维持数据库的正常运行,X$表是加密命名的,而且Oracle不做文档说明,这部分知识是ORACLE公司的技术机密,ORACLE公司通过这些X$建立起其它大量视图提供用户查询管理数据库之用。 内部X$表可以用v$fixed_table来查询 2基础数据字典表,也叫基表(underlying tables) 数据字典表和用户创建的表没有什么区别,数据字典表里的数据是Oracle系统存放的系统数据,而普通表存放的是用户的数据。为了方便的区别这些表,这些表的名字都是用"$"结尾,这些表属于SYS用户。 数据字典表由$ORACLE_HOME/rdbms/admin/sql.bsq 脚本创建, 这个脚本里又调用了其他的脚本来创建这些数据字典表。 在那些创建脚本里有基表的创建SQL。 Oracle 对数据字典表的说明: These underlying tables store information about the database. Only Oracle Database should write to and read these tables. Users rarely access the base tables directly because they are normalized and most data is stored in a cryptic format. 这些数据字典表,只有Oracle 能够进行读写。 SYS用户下的这些数据字典表,存放在system 表空间下面,表名都用"$"结尾,为了便于用户对数据字典表的查询, Oracle对这些数据字典都分别建立了用户视图,这样即容易记住,还隐藏了数据字典表表之间的关系,Oracle针对这些对象的范围,分别把视图命名为DBA_XXXX, ALL_XXXX和USER_XXXX。 注意:在创建数据库时会运行两个脚本。先运行catalog.sql,该脚本用来创建数据库的内部字典表。然后再运行catrpoc.sql,该脚本用来创建数据库内建的存储过程、包等pl\sql对象。如果我们是使用dbca来创建数据库,则dbca会自动调用这两个脚本。否则在执行create database命令来创建时,则需要手工运行这两个脚本。 3数据字典视图 静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*、 all_*、 dba_*。 这些视图由SYS用户创建的,所以使用需要加上SYS,为了方便, Oracle为每个数据字典表的视图头建立了同名字的公共同义词(public synonyms). 这样简单的处理就省去了写sys.的麻烦。 除了静态数据字典中三类视图,其他的字典视图中主要的是V$视图,之所以这样叫是因为他们都是以V$或GV$开头的。这些视图会不断的进行更新,从而提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。 user_对象视图:描述了当前用户schema下的对象; all_对象视图:描述了当前用户有权限访问到的所有对象的信息; dba_对象视图:包括了所有数据库对象的信息; 4动态性能(V$)视图 V$视图是基于X$虚拟视图的。V$视图是SYS用户所拥有的,在缺省状况下,只有SYS用户和拥有DBA系统权限的用户可以看到所有的视图,没有DBA权限的用户可以看到USER_和ALL_视图,但不能看到DBA_视图。与DBA_,ALL,和USER_视图中面向数据库信息相反,这些视图可视的给出了面向实例的信息。 动态性能表用于记录当前数据库的活动,只存于数据库运行期间,实际的信息都取自内存和控制文件。 DBA可以使用动态视图来监视和调节数据。
动态性能视图概述
所谓动态性能视图,就是指将内存里的数据或控制文件里的数据以表的形式展现出来。他们实际都是虚拟表,并不是真正的表。只不过是为了能够让我们更好的管理数据库的性能,所以将内存里的活动情况以表的形式展现出来。只要数据库还在运行,就会不断更新动态性能视图。一旦数据库关闭或崩溃,动态性能视图里的数据就会全部丢失,下次重启时则会重新计算。就像所有的数据字典的名词都存在 dictionary里一样,v$fixed_table里存放了所有的动态性能视图的名称。所有的动态性能的属主都是sys,且都以v$_开头,创建同名词时则都以v$开头。
数据字典视图非常多,我们无法一一记住,但是有个视图,我们必须知道,那就是dictionary视图,该视图里记录了所有的数据字典视图的名称。所以当我们需要查找某个数据字典而又不知道这个信息在哪个视图里的时候,就可以在dictionary视图里找。该视图还有个同名词dict。下面我们来追踪下dba_synonyms SQL> desc dict Name Null? Type ----------------------------------------- -------- ---------------------------- TABLE_NAME VARCHAR2(30) COMMENTS VARCHAR2(4000) SQL> select * from dict where table_name like '%DICT%'; SQL> select count(*) from dict; COUNT(*) ---------- 2553 SQL> select * from dict where table_name like '%SYNONYM%'; TABLE_NAME COMMENTS ------------------------------ ----------------------------------------------------------------- USER_SYNONYMS The user's private synonyms ALL_SYNONYMS All synonyms for base objects accessible to the user and session DBA_SYNONYMS All synonyms in the database 在DBA_SYNONYMS验证下dba_synonyms是否为同名词 SQL> select OWNER,SYNONYM_NAME,TABLE_NAME from dba_synonyms; 果然,DBA_SYNONYMS为DBA_SYNONYMS表的同名词。 继续查找dba_objects验证DBA_SYNONYMS为何种对象。 SQL> column object_name format a30 SQL> select OWNER,OBJECT_NAME,OBJECT_TYPE from dba_objects where OBJECT_NAME='DBA_SYNONYMS'; OWNER OBJECT_NAME OBJECT_TYPE ------------------------------ ------------------------------ ------------------- SYS DBA_SYNONYMS VIEW PUBLIC DBA_SYNONYMS SYNONYM 可以看出,DBA_SYNONYMS为sys用户下的视图,继续查找dba_views查看DBA_SYNONYMS的具体定义。 SQL> select VIEW_NAME,TEXT from dba_views where VIEW_NAME='DBA_SYNONYMS'; VIEW_NAME TEXT ------------------------------ -------------------------------------------------------------------------------- DBA_SYNONYMS select u.name, o.name, s.owner, s.name, s.node from sys.user$ u, sys.syn$ s, sys 可以看到,DBA_SYNONYMS是基于sys用户下的user$和syn$这两张数据字典表创建的视图。 这里也就验证了,我们前面所说的数据字典组织方式:先基于数据字典创建数据字典视图,然后在基于数据字典视图创建同名词,并将该同名词赋给了PUBLIC,从而使得所有用户都可以通过同名词查看数据字典信息。 下面以v$session为例进行追踪 SQL> select OWNER,SYNONYM_NAME,TABLE_NAME from dba_synonyms where SYNONYM_NAME='V$SESSION'; OWNER SYNONYM_NAME TABLE_NAME ------------------------------ ------------------------------ ------------------------------ PUBLIC V$SESSION V_$SESSION 查看V_$SESSION的对象类型和属主 SQL> select OWNER,OBJECT_NAME,OBJECT_TYPE from dba_objects where OBJECT_NAME='V_$SESSION'; OWNER OBJECT_NAME OBJECT_TYPE ------------------------------ ------------------------------ ------------------- SYS V_$SESSION VIEW 这里可以知道V_$SESSION是视图,查看该视图的具体定义。 SQL> select TEXT from dba_views where VIEW_NAME='V_$SESSION'; 可以看到v_$session视图是基于与动态性能视图v$session视图创建的,而动态性能视图的定义信息记录在v$fixed_view_definition里面 select VIEW_DEFINITION from v$fixed_view_definition where VIEW_NAME='V$SESSION'; 可以看到动态性能视图v$session是基于动态性能视图gv$session视图创建的,继续追踪 select VIEW_DEFINITION from v$fixed_view_definition where VIEW_NAME='GV$SESSION' 可以看到gv$session是的最终定义信息是来自于x$ksuse s和x$ksle,这些表是动态性能视图的基表。但是这些表都是内存表,表中的数据不会存在数据文件中,只存在内存中。
相关文章推荐
- Oracle sqlldr导入数据使用默认值日期
- Oracle中varchar,varchar2,nvarchar,nvarchar2的区别及其它数据类型描述
- Oracle列转行函数Listagg以及pivot查询示例
- 查询oracle server端的字符集
- 使用PLSql连接Oracle时报错ORA-12541: TNS: 无监听程序
- [solaris]odbc-oracle,简单测试
- Oracle 11g必须开启的服务及服务详细介绍,oracle的命令大全
- [Oracle]Tablespace usage check
- oracle 11g密码永不过期
- sqlplus连接Oracle数据库超时
- Oracle数据库的导入导出
- oracle Database link 创建
- oracle时间数据格式的分析
- linux操作系统下,oracle db 11g中增大memory_max_target和memory_target应该注意的
- oracle update set 使用case when语句
- Oracle 调用java 初始(一)
- oracle创建用户及常用命令
- 【Oracle】数据库运行状态下物理删除所有redo日志恢复方法
- oracle中怎样获取当前月上个月的第一天和最后一天?
- oracle官方文档_查看初始化参数(举例)