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,这些表是动态性能视图的机表。但是这些表都是内存表,表中的数据不会存在数据文件中,只存在内存中。

转自:http://czmmiao.iteye.com/blog/1258462


=========================================================================================================

select * from dictionary;

  --数据字典

  数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的。

  比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息等。

  数据库数据字典是一组表和视图结构。它们存放在SYSTEM表空间中

  当用户在对数据库中的数据进行操作时遇到困难就可以访问数据字典来查看详细的信息。

  用户可以用SQL语句访问数据库数据字典。

  数据字典内容包括:

  1,数据库中所有模式对象的信息,如表、视图、簇、及索引等。

  2,分配多少空间,当前使用了多少空间等。

  3,列的缺省值。

  4,约束信息的完整性。

  5,Oracle用户的名字。

  6,用户及角色被授予的权限。

  7,用户访问或使用的审计信息。

  8,其它产生的数据库信息。

  Oracle中的数据字典有静态和动态之分。

  1,静态数据字典-->主要是在用户访问数据字典时不会发生改变的,

  --例如某用户创建的表

  2,动态数据字典-->是依赖数据库运行的性能的,反映数据库运行的一些内在信息,所以在访问这类数据字典时往往不是一成不变的。

  --当前锁住的对象

  静态数据字典:这类数据字典主要是由表和视图组成

  数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。

  静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*、 all_*、 dba_*。

  user_*

  该视图存储了关于当前用户所拥有的对象的信息。(即所有在该用户模式下的对象)

  all_*

  该试图存储了当前用户能够访问的对象的信息。(与user_*相比,all_* 并不需要拥有该对象,只需要具有访问该对象的权限即可)

  dba_*

  该视图存储了数据库中所有对象的信息。(前提是当前用户具有访问这些数据库的权限,一般来说必须具有管理员权限)

  -----------------------------------------------------------------------------------------------------------

  select * from dictionary;

  --查询该用户拥有哪些表

  --user_tables主要描述当前用户拥有的所有表的信息,

  ----主要包括表名、表空间名、簇名等。通过此视图可以清楚了解当前用户可以操作的表有哪些

  desc user_tables;

  select table_name from user_tables;

  select * from user_tables;

  --查询该用户拥有哪些索引

  select index_name from user_indexes;

  --查询该用户拥有哪些视图

  select view_name from user_views;

  --查询该用户拥有哪些数据库对象,对象包括表、视图、存储过程、触发器、包、索引、序列、JAVA文件等。

  select object_name from user_objects;

  --主要描述当前用户的信息,主要包括当前用户名、帐户id、帐户状态、表空间名、创建时间等。

  select * from user_users;

  -----------------------------------------------------------------------------------------------------------

  --user_/all_区别:

  ----all_列出来的信息是当前用户可以访问的对象而不是当前用户拥有的对象。

  --查询某一用户下的所有表、过程、函数等信息。

  select owner , object_name ,object_type from all_objects

  -----------------------------------------------------------------------------------------------------------

  --对于dba_开头的需要管理员权限,

  --查询表空间的信息(当前用户必须拥有DBA角色)。

  select * from dba_data_files

  -----------------------------------------------------------------------------------------------------------

  动态数据字典

  Oracle包含了一些潜在的由系统管理员如SYS维护的表和视图,由于当数据库运行的时候它们会不断进行更新,所以称它们为动态数据字典(或者是动态性能视图)。这些视图提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。

  Oracle中这些动态性能视图都是以v$开头的视图.

  v$access

  该视图显示数据库中锁定的数据库对象以及访问这些对象的会话对象(session对象)。

  select * from v$access

  v$session

  该视图列出当前会话的详细信息。

  v$active_instance

  该视图主要描述当前数据库下的活动的实例的信息。依然可以使用select语句来观察该信息。

  v$context

  该视图列出当前会话的属性信息。比如命名空间、属性值等


你可能感兴趣的:(数据库)