`

Oracle数据字典详解(原创)

 
阅读更多

Oracle数据字典概述

数据库是数据的集合,数据库维护和管理这用户的数据,那么这些用户数据表都存在哪里,用户的信息是怎样的,存储这些用户的数据的路径在哪里,这些信息不属于用户的信息,却是数据库维护和管理用户数据的核心,这些信息就是数据库的数据字典来维护的,数据库的数据字典就汇集了这些数据库运行所需要的基础信息叻。每个数据库都提供了各自的数据字典的方案,虽然形式不同,但是目的和作用是一样的,比如在mysql里数据字典是在information_schema 里表现的,sqlserver则是在sys这个系统schema里来展示的。
Oracle的数据字典是Oracle数据库安装之后,自动创建的一系列数据库对象。数据字典是Oracle数据库对象结构的元数据信息。熟悉和深入研究数据字典对象,可以很大程度的帮助我们了解Oracle内部机制。
Oracle字典视图包括四个层次,分别为X$内部表、基础数据字典表、数据字典视图和动态性能视图。

数据字典表和用户创建的表没有什么区别,不过数据字典表里的数据是Oracle系统存放的系统数据,而普通表存放的是用户的数据而已,为了方便的区别这些表,这些表的名字都是用"$"结尾,在我们看到的sql语句里看到"$"结尾的这些表,大家就可以想到这可能是一个数据字典表了,同样,既然如此,我们创建自己的用户表的时候就不要用“$”结尾,以免让别人误会,数据字典表是系统存放系统用户的,所以他的owner是sys,在手工用create database的命令的时候,会调用$ORACLE_HOME/rdbms/admin/sql.bsq文件,这个就会执行生成我们这些数据字典表。打开sql.bsq会发现很多数据字典几乎都以$结尾,比如col$,tab$等。

对于数据字典表,里面的数据是有数据库系统自身来维护的,所以这里虽然和普通表一样可以用DML语句来修改数据内容,但是大家最好还是不要自己来做了,因为这些表都是作用于数据库内部的,我们有时看到的604的的recursive sql这里的sql实际上很有可能就是我们的相关的数据字典表的执行内容。所以这里我们切记记住不要去修改这些表里的内容。

刚才说道了。这里的数据字典表的用户都是sys,存在在system这个表空间里,表名都用"$"结尾,为了便于用户对数据字典表的查询,这样的名字是不利于我们记忆的,所以Oracle对这些数据字典都分别建立了用户视图视图,不仅有更容易接受的名字,还隐藏了数据字典表表之间的关系,让我们字节通过视图来进行查询,简单而形象,Oracle针对这些对象的范围,分别把视图命名为DBA_XXXX, ALL_XXXX和USER_XXXX

user_对象视图:描述了当前用户schema下的对象;
all_对象视图:描述了当前用户有权限访问到的所有对象的信息;
dba_对象视图:包括了所有数据库对象的信息;

注意:在创建数据库是会运行两个脚本。先运行catalog.sql,该脚本用来创建数据库的内部字典表。然后再运行catrpoc.sql,该脚本用来创建数据库内建的存储过程、包等pl\sql对象。如果我们是使用dbca来创建数据库,则dbca会自动调用这两个脚本。否则在执行create database命令来创建时,则需要手工运行这两个脚本。

追踪数据字典

数据字典视图非常多,我们无法一一记住,但是有个视图,我们必须知道,那就是dictionary视图,该视图里记录了所有的数据字典视图的名称。所以当我们需要查找某个数据字典而又不知道这个信息在哪个视图里的时候,就可以在dictionary视图里找。该视图还有个同名词dict。下面我们来追踪下dba_synonyms

SQL> desc dict
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 TABLE_NAME                                         VARCHAR2(30)
 COMMENTS                                           VARCHAR2(4000)

SQL> select table_name from dict where table_name like'%SYNONYM%';

TABLE_NAME
------------------------------
DBA_SYNONYMS
USER_SYNONYMS
ALL_SYNONYMS

在DBA_SYNONYMS验证下dba_synonyms是否为同名词

SQL>select OWNER,SYNONYM_NAME,TABLE_NAME from dba_synonyms where SYNONYM_NAME='DBA_SYNONYMS'

OWNER                          SYNONYM_NAME                   TABLE_NAME
------------------------------ ------------------------------ ------------------------------
PUBLIC                         DBA_SYNONYMS                   DBA_SYNONYMS

果然,DBA_SYNONYMS为

Oracle数据字典概述

数据库是数据的集合, 数据库维护和管理这用户的数据,那么这些用户数据表都存在哪里,用户的信息是怎样的,存储这些用户的数据的路径在哪里,这些信息不属于用户的信息,却是数 据库维护和管理用户数据的核心,这些信息就是数据库的数据字典来维护的,数据库的数据字典就汇集了这些数据库运行所需要的基础信息叻。每个数据库都提供了 各自的数据字典的方案,虽然形式不同,但是目的和作用是一样的,比如在mysql里数据字典是在information_schema 里表现的,sqlserver则是在sys这个系统schema里来展示的。
Oracle的数据字典是Oracle数据库安装之后,自动创建的一系列数据库对象。数据字典是Oracle数据库对象结构的元数据信息。熟悉和深入研究数据字典对象,可以很大程度的帮助我们了解Oracle内部机制。
Oracle字典视图包括四个层次,分别为X$内部表、基础数据字典表、数据字典视图和动态性能视图。

数 据字典表和用户创建的表没有什么区别,不过数据字典表里的数据是Oracle系统存放的系统数据,而普通表存放的是用户的数据而已,为了方便的区别这些 表,这些表的名字都是用"$"结尾,在我们看到的sql语句里看到"$"结尾的这些表,大家就可以想到这可能是一个数据字典表了,同样,既然如此,我们创 建自己的用户表的时候就不要用“$”结尾,以免让别人误会,数据字典表是系统存放系统用户的,所以他的owner是sys,在手工用create database的命令的时候,会调用$ORACLE_HOME/rdbms/admin/sql.bsq文件,这个就会执行生成我们这些数据字典表。打 开sql.bsq会发现很多数据字典几乎都以$结尾,比如col$,tab$等。

对于数据字典表,里面的数据是有数据库系统自身来维护 的,所以这里虽然和普通表一样可以用DML语句来修改数据内容,但是大家最好还是不要自己来做了,因为这些表都是作用于数据库内部的,我们有时看到的 604的的recursive sql这里的sql实际上很有可能就是我们的相关的数据字典表的执行内容。所以这里我们切记记住不要去修改这些表里的内容。

刚才说道了。 这里的数据字典表的用户都是sys,存在在system这个表空间里,表名都用"$"结尾,为了便于用户对数据字典表的查询,这样的名字是不利于我们记忆 的,所以Oracle对这些数据字典都分别建立了用户视图视图,不仅有更容易接受的名字,还隐藏了数据字典表表之间的关系,让我们字节通过视图来进行查 询,简单而形象,Oracle针对这些对象的范围,分别把视图命名为DBA_XXXX, ALL_XXXX和USER_XXXX

user_对象视图:描述了当前用户schema下的对象;
all_对象视图:描述了当前用户有权限访问到的所有对象的信息;
dba_对象视图:包括了所有数据库对象的信息;

注 意:在创建数据库是会运行两个脚本。先运行catalog.sql,该脚本用来创建数据库的内部字典表。然后再运行catrpoc.sql,该脚本用来创 建数据库内建的存储过程、包等pl\sql对象。如果我们是使用dbca来创建数据库,则dbca会自动调用这两个脚本。否则在执行create database命令来创建时,则需要手工运行这两个脚本。

追踪数据字典

数 据字典视图非常多,我们无法一一记住,但是有个视图,我们必须知道,那就是dictionary视图,该视图里记录了所有的数据字典视图的名称。所以当我 们需要查找某个数据字典而又不知道这个信息在哪个视图里的时候,就可以在dictionary视图里找。该视图还有个同名词dict。下面我们来追踪下 dba_synonyms

SQL> desc dict
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 TABLE_NAME                                         VARCHAR2(30)
 COMMENTS                                           VARCHAR2(4000)

SQL> select table_name from dict where table_name like'%SYNONYM%';

TABLE_NAME
------------------------------
DBA_SYNONYMS
USER_SYNONYMS
ALL_SYNONYMS

在DBA_SYNONYMS验证下dba_synonyms是否为同名词

SQL>select OWNER,SYNONYM_NAME,TABLE_NAME from dba_synonyms where SYNONYM_NAME='DBA_SYNONYMS'

OWNER                          SYNONYM_NAME                   TABLE_NAME
------------------------------ ------------------------------ ------------------------------
PUBLIC                         DBA_SYNONYMS                   DBA_SYNONYMS

果然,DBA_SYNONYMS为

Oracle数据字典概述

数据库是数据的集合, 数据库维护和管理这用户的数据,那么这些用户数据表都存在哪里,用户的信息是怎样的,存储这些用户的数据的路径在哪里,这些信息不属于用户的信息,却是数 据库维护和管理用户数据的核心,这些信息就是数据库的数据字典来维护的,数据库的数据字典就汇集了这些数据库运行所需要的基础信息叻。每个数据库都提供了 各自的数据字典的方案,虽然形式不同,但是目的和作用是一样的,比如在mysql里数据字典是在information_schema 里表现的,sqlserver则是在sys这个系统schema里来展示的。
Oracle的数据字典是Oracle数据库安装之后,自动创建的一系列数据库对象。数据字典是Oracle数据库对象结构的元数据信息。熟悉和深入研究数据字典对象,可以很大程度的帮助我们了解Oracle内部机制。
Oracle字典视图包括四个层次,分别为X$内部表、基础数据字典表、数据字典视图和动态性能视图。

数 据字典表和用户创建的表没有什么区别,不过数据字典表里的数据是Oracle系统存放的系统数据,而普通表存放的是用户的数据而已,为了方便的区别这些 表,这些表的名字都是用"$"结尾,在我们看到的sql语句里看到"$"结尾的这些表,大家就可以想到这可能是一个数据字典表了,同样,既然如此,我们创 建自己的用户表的时候就不要用“$”结尾,以免让别人误会,数据字典表是系统存放系统用户的,所以他的owner是sys,在手工用create database的命令的时候,会调用$ORACLE_HOME/rdbms/admin/sql.bsq文件,这个就会执行生成我们这些数据字典表。打 开sql.bsq会发现很多数据字典几乎都以$结尾,比如col$,tab$等。

对于数据字典表,里面的数据是有数据库系统自身来维护 的,所以这里虽然和普通表一样可以用DML语句来修改数据内容,但是大家最好还是不要自己来做了,因为这些表都是作用于数据库内部的,我们有时看到的 604的的recursive sql这里的sql实际上很有可能就是我们的相关的数据字典表的执行内容。所以这里我们切记记住不要去修改这些表里的内容。

刚才说道了。 这里的数据字典表的用户都是sys,存在在system这个表空间里,表名都用"$"结尾,为了便于用户对数据字典表的查询,这样的名字是不利于我们记忆 的,所以Oracle对这些数据字典都分别建立了用户视图视图,不仅有更容易接受的名字,还隐藏了数据字典表表之间的关系,让我们字节通过视图来进行查 询,简单而形象,Oracle针对这些对象的范围,分别把视图命名为DBA_XXXX, ALL_XXXX和USER_XXXX

user_对象视图:描述了当前用户schema下的对象;
all_对象视图:描述了当前用户有权限访问到的所有对象的信息;
dba_对象视图:包括了所有数据库对象的信息;

注 意:在创建数据库是会运行两个脚本。先运行catalog.sql,该脚本用来创建数据库的内部字典表。然后再运行catrpoc.sql,该脚本用来创 建数据库内建的存储过程、包等pl\sql对象。如果我们是使用dbca来创建数据库,则dbca会自动调用这两个脚本。否则在执行create database命令来创建时,则需要手工运行这两个脚本。

追踪数据字典

数 据字典视图非常多,我们无法一一记住,但是有个视图,我们必须知道,那就是dictionary视图,该视图里记录了所有的数据字典视图的名称。所以当我 们需要查找某个数据字典而又不知道这个信息在哪个视图里的时候,就可以在dictionary视图里找。该视图还有个同名词dict。下面我们来追踪下 dba_synonyms

SQL> desc dict
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 TABLE_NAME                                         VARCHAR2(30)
 COMMENTS                                           VARCHAR2(4000)

SQL> select table_name from dict where table_name like'%SYNONYM%';

TABLE_NAME
------------------------------
DBA_SYNONYMS
USER_SYNONYMS
ALL_SYNONYMS

在DBA_SYNONYMS验证下dba_synonyms是否为同名词

SQL>select OWNER,SYNONYM_NAME,TABLE_NAME from dba_synonyms where SYNONYM_NAME='DBA_SYNONYMS'

OWNER                          SYNONYM_NAME                   TABLE_NAME
------------------------------ ------------------------------ ------------------------------
PUBLIC                         DBA_SYNONYMS                   DBA_SYNONYMS

果然,DBA_SYNONYMS为DBA_SYNONYMS表的同名词。

继续查找dba_objects验证DBA_SYNONYMS为何种对象。

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查看

Oracle数据字典概述

数据库是数据的集合, 数据库维护和管理这用户的数据,那么这些用户数据表都存在哪里,用户的信息是怎样的,存储这些用户的数据的路径在哪里,这些信息不属于用户的信息,却是数 据库维护和管理用户数据的核心,这些信息就是数据库的数据字典来维护的,数据库的数据字典就汇集了这些数据库运行所需要的基础信息叻。每个数据库都提供了 各自的数据字典的方案,虽然形式不同,但是目的和作用是一样的,比如在mysql里数据字典是在information_schema 里表现的,sqlserver则是在sys这个系统schema里来展示的。
Oracle的数据字典是Oracle数据库安装之后,自动创建的一系列数据库对象。数据字典是Oracle数据库对象结构的元数据信息。熟悉和深入研究数据字典对象,可以很大程度的帮助我们了解Oracle内部机制。
Oracle字典视图包括四个层次,分别为X$内部表、基础数据字典表、数据字典视图和动态性能视图。

数 据字典表和用户创建的表没有什么区别,不过数据字典表里的数据是Oracle系统存放的系统数据,而普通表存放的是用户的数据而已,为了方便的区别这些 表,这些表的名字都是用"$"结尾,在我们看到的sql语句里看到"$"结尾的这些表,大家就可以想到这可能是一个数据字典表了,同样,既然如此,我们创 建自己的用户表的时候就不要用“$”结尾,以免让别人误会,数据字典表是系统存放系统用户的,所以他的owner是sys,在手工用create database的命令的时候,会调用$ORACLE_HOME/rdbms/admin/sql.bsq文件,这个就会执行生成我们这些数据字典表。打 开sql.bsq会发现很多数据字典几乎都以$结尾,比如col$,tab$等。

对于数据字典表,里面的数据是有数据库系统自身来维护 的,所以这里虽然和普通表一样可以用DML语句来修改数据内容,但是大家最好还是不要自己来做了,因为这些表都是作用于数据库内部的,我们有时看到的 604的的recursive sql这里的sql实际上很有可能就是我们的相关的数据字典表的执行内容。所以这里我们切记记住不要去修改这些表里的内容。

刚才说道了。 这里的数据字典表的用户都是sys,存在在system这个表空间里,表名都用"$"结尾,为了便于用户对数据字典表的查询,这样的名字是不利于我们记忆 的,所以Oracle对这些数据字典都分别建立了用户视图视图,不仅有更容易接受的名字,还隐藏了数据字典表表之间的关系,让我们字节通过视图来进行查 询,简单而形象,Oracle针对这些对象的范围,分别把视图命名为DBA_XXXX, ALL_XXXX和USER_XXXX

user_对象视图:描述了当前用户schema下的对象;
all_对象视图:描述了当前用户有权限访问到的所有对象的信息;
dba_对象视图:包括了所有数据库对象的信息;

注 意:在创建数据库是会运行两个脚本。先运行catalog.sql,该脚本用来创建数据库的内部字典表。然后再运行catrpoc.sql,该脚本用来创 建数据库内建的存储过程、包等pl\sql对象。如果我们是使用dbca来创建数据库,则dbca会自动调用这两个脚本。否则在执行create database命令来创建时,则需要手工运行这两个脚本。

追踪数据字典

数 据字典视图非常多,我们无法一一记住,但是有个视图,我们必须知道,那就是dictionary视图,该视图里记录了所有的数据字典视图的名称。所以当我 们需要查找某个数据字典而又不知道这个信息在哪个视图里的时候,就可以在dictionary视图里找。该视图还有个同名词dict。下面我们来追踪下 dba_synonyms

SQL> desc dict
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 TABLE_NAME                                         VARCHAR2(30)
 COMMENTS                                           VARCHAR2(4000)

SQL> select table_name from dict where table_name like'%SYNONYM%';

TABLE_NAME
------------------------------
DBA_SYNONYMS
USER_SYNONYMS
ALL_SYNONYMS

在DBA_SYNONYMS验证下dba_synonyms是否为同名词

SQL>select OWNER,SYNONYM_NAME,TABLE_NAME from dba_synonyms where SYNONYM_NAME='DBA_SYNONYMS'

OWNER                          SYNONYM_NAME                   TABLE_NAME
------------------------------ ------------------------------ ------------------------------
PUBLIC                         DBA_SYNONYMS                   DBA_SYNONYMS

果然,DBA_SYNONYMS为

Oracle数据字典概述

数据库是数据的集合, 数据库维护和管理这用户的数据,那么这些用户数据表都存在哪里,用户的信息是怎样的,存储这些用户的数据的路径在哪里,这些信息不属于用户的信息,却是数 据库维护和管理用户数据的核心,这些信息就是数据库的数据字典来维护的,数据库的数据字典就汇集了这些数据库运行所需要的基础信息叻。每个数据库都提供了 各自的数据字典的方案,虽然形式不同,但是目的和作用是一样的,比如在mysql里数据字典是在information_schema 里表现的,sqlserver则是在sys这个系统schema里来展示的。
Oracle的数据字典是Oracle数据库安装之后,自动创建的一系列数据库对象。数据字典是Oracle数据库对象结构的元数据信息。熟悉和深入研究数据字典对象,可以很大程度的帮助我们了解Oracle内部机制。
Oracle字典视图包括四个层次,分别为X$内部表、基础数据字典表、数据字典视图和动态性能视图。

数 据字典表和用户创建的表没有什么区别,不过数据字典表里的数据是Oracle系统存放的系统数据,而普通表存放的是用户的数据而已,为了方便的区别这些 表,这些表的名字都是用"$"结尾,在我们看到的sql语句里看到"$"结尾的这些表,大家就可以想到这可能是一个数据字典表了,同样,既然如此,我们创 建自己的用户表的时候就不要用“$”结尾,以免让别人误会,数据字典表是系统存放系统用户的,所以他的owner是sys,在手工用create database的命令的时候,会调用$ORACLE_HOME/rdbms/admin/sql.bsq文件,这个就会执行生成我们这些数据字典表。打 开sql.bsq会发现很多数据字典几乎都以$结尾,比如col$,tab$等。

对于数据字典表,里面的数据是有数据库系统自身来维护 的,所以这里虽然和普通表一样可以用DML语句来修改数据内容,但是大家最好还是不要自己来做了,因为这些表都是作用于数据库内部的,我们有时看到的 604的的recursive sql这里的sql实际上很有可能就是我们的相关的数据字典表的执行内容。所以这里我们切记记住不要去修改这些表里的内容。

刚才说道了。 这里的数据字典表的用户都是sys,存在在system这个表空间里,表名都用"$"结尾,为了便于用户对数据字典表的查询,这样的名字是不利于我们记忆 的,所以Oracle对这些数据字典都分别建立了用户视图视图,不仅有更容易接受的名字,还隐藏了数据字典表表之间的关系,让我们字节通过视图来进行查 询,简单而形象,Oracle针对这些对象的范围,分别把视图命名为DBA_XXXX, ALL_XXXX和USER_XXXX

user_对象视图:描述了当前用户schema下的对象;
all_对象视图:描述了当前用户有权限访问到的所有对象的信息;
dba_对象视图:包括了所有数据库对象的信息;

注 意:在创建数据库是会运行两个脚本。先运行catalog.sql,该脚本用来创建数据库的内部字典表。然后再运行catrpoc.sql,该脚本用来创 建数据库内建的存储过程、包等pl\sql对象。如果我们是使用dbca来创建数据库,则dbca会自动调用这两个脚本。否则在执行create database命令来创建时,则需要手工运行这两个脚本。

追踪数据字典

数 据字典视图非常多,我们无法一一记住,但是有个视图,我们必须知道,那就是dictionary视图,该视图里记录了所有的数据字典视图的名称。所以当我 们需要查找某个数据字典而又不知道这个信息在哪个视图里的时候,就可以在dictionary视图里找。该视图还有个同名词dict。下面我们来追踪下 dba_synonyms

SQL> desc dict
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 TABLE_NAME                                         VARCHAR2(30)
 COMMENTS                                           VARCHAR2(4000)

SQL> select table_name from dict where table_name like'%SYNONYM%';

TABLE_NAME
------------------------------
DBA_SYNONYMS
USER_SYNONYMS
ALL_SYNONYMS

在DBA_SYNONYMS验证下dba_synonyms是否为同名词

SQL>select OWNER,SYNONYM_NAME,TABLE_NAME from dba_synonyms where SYNONYM_NAME='DBA_SYNONYMS'

OWNER                          SYNONYM_NAME                   TABLE_NAME
------------------------------ ------------------------------ ------------------------------
PUBLIC                         DBA_SYNONYMS                   DBA_SYNONYMS

果然,DBA_SYNONYMS为

Oracle数据字典概述

数据库是数据的集合, 数据库维护和管理这用户的数据,那么这些用户数据表都存在哪里,用户的信息是怎样的,存储这些用户的数据的路径在哪里,这些信息不属于用户的信息,却是数 据库维护和管理用户数据的核心,这些信息就是数据库的数据字典来维护的,数据库的数据字典就汇集了这些数据库运行所需要的基础信息叻。每个数据库都提供了 各自的数据字典的方案,虽然形式不同,但是目的和作用是一样的,比如在mysql里数据字典是在information_schema 里表现的,sqlserver则是在sys这个系统schema里来展示的。
Oracle的数据字典是Oracle数据库安装之后,自动创建的一系列数据库对象。数据字典是Oracle数据库对象结构的元数据信息。熟悉和深入研究数据字典对象,可以很大程度的帮助我们了解Oracle内部机制。
Oracle字典视图包括四个层次,分别为X$内部表、基础数据字典表、数据字典视图和动态性能视图。

数 据字典表和用户创建的表没有什么区别,不过数据字典表里的数据是Oracle系统存放的系统数据,而普通表存放的是用户的数据而已,为了方便的区别这些 表,这些表的名字都是用"$"结尾,在我们看到的sql语句里看到"$"结尾的这些表,大家就可以想到这可能是一个数据字典表了,同样,既然如此,我们创 建自己的用户表的时候就不要用“$”结尾,以免让别人误会,数据字典表是系统存放系统用户的,所以他的owner是sys,在手工用create database的命令的时候,会调用$ORACLE_HOME/rdbms/admin/sql.bsq文件,这个就会执行生成我们这些数据字典表。打 开sql.bsq会发现很多数据字典几乎都以$结尾,比如col$,tab$等。

对于数据字典表,里面的数据是有数据库系统自身来维护 的,所以这里虽然和普通表一样可以用DML语句来修改数据内容,但是大家最好还是不要自己来做了,因为这些表都是作用于数据库内部的,我们有时看到的 604的的recursive sql这里的sql实际上很有可能就是我们的相关的数据字典表的执行内容。所以这里我们切记记住不要去修改这些表里的内容。

刚才说道了。 这里的数据字典表的用户都是sys,存在在system这个表空间里,表名都用"$"结尾,为了便于用户对数据字典表的查询,这样的名字是不利于我们记忆 的,所以Oracle对这些数据字典都分别建立了用户视图视图,不仅有更容易接受的名字,还隐藏了数据字典表表之间的关系,让我们字节通过视图来进行查 询,简单而形象,Oracle针对这些对象的范围,分别把视图命名为DBA_XXXX, ALL_XXXX和USER_XXXX

user_对象视图:描述了当前用户schema下的对象;
all_对象视图:描述了当前用户有权限访问到的所有对象的信息;
dba_对象视图:包括了所有数据库对象的信息;

注 意:在创建数据库是会运行两个脚本。先运行catalog.sql,该脚本用来创建数据库的内部字典表。然后再运行catrpoc.sql,该脚本用来创 建数据库内建的存储过程、包等pl\sql对象。如果我们是使用dbca来创建数据库,则dbca会自动调用这两个脚本。否则在执行create database命令来创建时,则需要手工运行这两个脚本。

追踪数据字典

数 据字典视图非常多,我们无法一一记住,但是有个视图,我们必须知道,那就是dictionary视图,该视图里记录了所有的数据字典视图的名称。所以当我 们需要查找某个数据字典而又不知道这个信息在哪个视图里的时候,就可以在dictionary视图里找。该视图还有个同名词dict。下面我们来追踪下 dba_synonyms

SQL> desc dict
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 TABLE_NAME                                         VARCHAR2(30)
 COMMENTS                                           VARCHAR2(4000)

SQL> select table_name from dict where table_name like'%SYNONYM%';

TABLE_NAME
------------------------------
DBA_SYNONYMS
USER_SYNONYMS
ALL_SYNONYMS

在DBA_SYNONYMS验证下dba_synonyms是否为同名词

SQL>select OWNER,SYNONYM_NAME,TABLE_NAME from dba_synonyms where SYNONYM_NAME='DBA_SYNONYMS'

OWNER                          SYNONYM_NAME                   TABLE_NAME
------------------------------ ------------------------------ ------------------------------
PUBLIC                         DBA_SYNONYMS                   DBA_SYNONYMS

果然,DBA_SYNONYMS为DBA_SYNONYMS表的同名词。

继续查找dba_objects验证DBA_SYNONYMS为何种对象。

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,从而是得所有用户都可以通过同名词查看数据字典信息。

动态性能视图概述

所谓动态性能视图,就是指将内存里的数据或控制文件里的数据以表的形式展现出来。他们实际都是需表,并不是真正的表。只不过是为了能够让我们更好的管理数据库的性能,所以将内存里的活动情况以表的形式展现出来。只要数据库还在运行,就会不断更新动态性能视图。一旦数据库关闭或崩溃,动态性能视图里的数据就会全部丢失,下次重启时则会重新计算。就像所有的数据字典的名词都存在dictionary里一样,v$fixed_table里存放了所有的动态性能视图的名称。所有的动态性能的属主都是sys,且都以v$_开头,创建同名词时则都以v$开头。

追踪动态性能视图

下面以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'

TEXT
--------------------------------------------------------------------------------
select "SADDR","SID","SERIAL#","AUDSID","PADDR","USER#","USERNAME","COMMAND","OW

.......................................................
,"WAIT_TIME","SECONDS_IN_WAIT","STATE","SERVICE_NAME","SQL_TRACE","SQL_TRACE_WAI
TS","SQL_TRACE_BINDS" from v$session

可以看到v_$session视图是基于与动态性能视图v$session视图创建的,而动态性能视图的定义信息记录在v$fixed_view_definition里面

SQL> select VIEW_DEFINITION from v$fixed_view_definition where VIEW_NAME='V$SESSION';

VIEW_DEFINITION
------------------------------------------------------------------------------------------------------------------------------------------------------
select  SADDR , SID , SERIAL# , AUDSID , PADDR , USER# , USERNAME , COMMAND , OWNERID, TADDR , LOCKWAIT , STATUS , SERVER , SCHEMA# , SCHEMANAME ,OSUS
.......................................................

WAIT_CLASS#,WAIT_CLASS,WAIT_TIME, SECONDS_IN_WAIT,STATE,SERVICE_NAME, SQL_TRACE, SQL_
TRACE_WAITS, SQL_TRACE_BINDS from GV$SESSION where inst_id = USERENV('Instance')

可以看到动态性能视图v$session是基于动态性能视图gv$session视图创建的,继续追踪

select VIEW_DEFINITION from v$fixed_view_definition where VIEW_NAME='GV$SESSION'
SQL> /

VIEW_DEFINITION
------------------------------------------------------------------------------------------------------------------------------------------------------
select s.inst_id,s.addr,s.indx,s.ksuseser,s.ksuudses,s.ksusepro,s.ksuudlui,s.ksuudlna,s.ksuudoct,s.ksusesow, decode(s.ksusetrn,hextoraw('00'),null,s.k
.......................................................
ED KNOWN TIME')),s.ksusesvc, decode(bitand(s.ksuseflg2,32),32,'ENABLED','DISABLED'),decode(bitand(s.ksuseflg2,64),64,'TRUE','FALSE'),decode(bitand(s.k
suseflg2,128),128,'TRUE','FALSE')from x$ksuse s, x$ksled e where bitand(s.ksspaflg,1)!=0 and bitand(s.ksuseflg,1)!=0 and s.ksuseopc=e.indx

可以看到gv$session是的最终定义信息是来自于x$ksuse s和x$ksle,这些表是动态性能视图的机表。但是这些表都是内存表,表中的数据不会存在数据文件中,只存在内存中。


参考至:《教你成为10g OCP》韩思捷著

            《深入了解Oracle数据字典》盖国强著

             http://club.topsage.com/thread-601580-1-1.html

             http://space.itpub.net/17203031/viewspace-686814

0
4
分享到:
评论

相关推荐

    Oracle数据字典及中文详解[含CHM版资料]

    华为公司详细的Oracle数据字典,里面包含有非常详细的数据字典及中文说明,另附有CHM版的Oracle工具资料,非常不错,是学习Oracle应用的好东西。推荐。

    oracle 数据字典

    oracle数据字典详解,Oracle数据字典就像是一个宝库:它是ORACLE数据库的重要组成部分,提供了诸如数据库结构、数据库对象空间分配和数据库用户等等有关数据库的信息。本文试图从数据库管理系统的若干基本概念出发,...

    Oracle数据字典

    华为公司详细的Oracle数据字典,里面包含有非常详细的数据字典及中文说明,另附有CHM版的Oracle工具资料,非常不错,是学习Oracle应用的好东西。推荐。

    Oracle_sqlplus详解.

    Oracle_sqlplus详解. ORACLE 的启动和关闭 用户如何有效地利用数据字典 查看数据库的 SQL

    ORACLE+DBA必备技能详解.pdf

    第一章:数据库管理员命令参考 第二章:数据库的创建和管理 第三章:回滚/撤销段.控制文件和重做日志 第四章:表空间 第五章:表 第六章:索引 第七章:视图 ...附录B:数据字典视图 附录C:Oracle sql语法

    Oracle dblink详解

    在创建database link的时候,Oracle再数据字典中保存相关的database link的信息,在使用database link的时候,Oracle通过Oracle Net用用户预先定义好的连接信息访问相应的远程数据库以完成相应的工作。 建立database...

    Oracle数据库学习指南

    13. Oracle常用数据字典 14. ORACLE回滚段管理(上) 15. ORACLE回滚段管理(下) 16. Oracle基于Client-Server的性能调整 17. Oracle数据库的安全策略 18. ORACLE数据库简介 19. Oracle数据库密码文件的使用...

    Oracle数据操作和控制语言详解

    正在看的ORACLE教程是:Oracle数据操作和控制语言详解。SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL。其中用于定义数据的结构,比如 创建、修改或者删除数据库;...

    oracle入门详解

    有关oracle 的入门教程,文档详细介绍了oracle数据库的特点和使用,包括数据字典在内的很多说明

    Oracle PL/SQL语言初级教程

    7.Oracle数据操作和控制语言详解 62 插入数据 63 更新数据 63 清空表 64 死锁 65 事务控制 65 一致性和事务 67 建立和修改用户 69 权限和角色 72 8.Oracle数据库游标使用大全 76 其他DML语句 77 DML语句的结果 78 ...

    Oracle 手动创建数据库步骤详解

    7.运行数据字典脚本 8.Oracle的网络配置 (客户端连接到服务端) 初始化参数文件 从%ORACLE_HOME%\admin\sample\pfile从复制initsmpl.ora文件,并黏贴到$ORACLE_HOME%\database目录下,改名为init假设改为initzhouyt...

    Oracle 日志挖掘(LogMiner)使用详解

    Logminer依赖于2个包:DBMS_LOGMNR和DBMS_LOGMNR_D,Oracle 11g默认已安装 Logminer 基本使用步骤 <1>. Specify a LogMiner dictionary. 指定Logminer字典 <2>. Specify a list of redo log files for analysis. ...

    非常全的oracle文档

    五、 Oracle术语解释详解(摘自网络) 20 4.1. 数据库名 21 4.2. 数据库实例名 23 4.3. 数据库域名 24 4.4. 数据库服务名 24 六、 SYS和SYSTEM用户 25 七、 启动Oracle 25 八、 Oracle管理工具介绍 26 九、 查看Oracle...

    Java框架Bootstrap、HTML5、jQuery、Spring MVC、Hibernate、MySQL、Oracle、SQL Server、数据库

    开源中国详解地址:...框架的数据持久层将添加、修改、删除、排序、分页、各种条件的查询封装成通用模块,几乎不用手写SQL。 系统后端和前端全部采用官方的最新稳定版本,可直接应用到企业生产环境。

    asp.net知识库

    如何获取MSSQLServer,Oracel,Access中的数据字典信息 C#中利用GetOleDbSchemaTable获取数据库内表信息[原创] 如何解决ACCESS中SELECT TOP语句竟然返回多条记录的问题? Asp.net 利用OleDb的GetOLEDBSchemaTable方法...

Global site tag (gtag.js) - Google Analytics