暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 数据字典与性能视图

Oracle技术就绪 2015-09-30
1042

从哪里能查询到数据字典信息?


对于初学者来说,从什么地方法查询数据字典的信息是一个基本的要求,因为,你必须先了解从哪里查询到数据字典的名称及其存储的信息内容,你才能从这些数据字典中查询你需要的信息。

问题的提出

在你想获取某个对象/Oracle系统执行情况信息时,你可以从数据字典和性能视图中查询到。对于新手和熟悉Oracle系统的使用者来说,都必须了解的数据字典就是DICT了。DICT 包含有数据字典信息和性能视图的信息。

实现技术

为了获取Oracle系统的数据字典和视图的信息,你最好以sysdba登录Oracle系统,然后查询DICT数据字典即可。

实现步骤

你要DBAsysdba登录到SQL>下,然后查询DICT即可:

--

--适应版本:Oracle 9i~12c

--

--

连接到:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> show user

USER "SYS"

SQL>

SQL> desc dict

名称 是否为空? 类型

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

TABLE_NAME VARCHAR2(30)

COMMENTS VARCHAR2(4000)

SQL> col comments for a70

SQL> set line 120

SQL>select * from dict where rownum<11 ;

TABLE_NAME COMMENTS

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

DBA_2PC_NEIGHBORS information about incoming and outgoing connections for pending transa

ctions

DBA_2PC_PENDING info about distributed transactions awaiting recovery

DBA_ADDM_FDG_BREAKDOWN

DBA_ADDM_FINDINGS

DBA_ADDM_INSTANCES

DBA_ADDM_SYSTEM_DIRECTIVES

DBA_ADDM_TASKS

DBA_ADDM_TASK_DIRECTIVES

DBA_ADVISOR_ACTIONS

说明

Oracle 系统数据字典多数都是以DBA_xxx命名;而性能视图均以V$xxx命名,如果你的Oracle环境属于RAC集群的话,则要查询的性能视图均以GV$xxx命名。

如何获取Oracle系统性能视图


Oracle系统性能视图自动记录Oracle系统运行时的相关数据,比如:某个SQL运行所使用CPU的时间、排序操作所使用的内存大小等。

问题的提出

当你希望查询某项Oracle 系统运行期间的信息时,你需要查询相应的性能视图(也称动态性能视图),比如,你要查询当前会话登录的时间,则需要访问V$MYSTAT视图。那么如何查询到当前Oracle系统的所有性能视图信息呢?

实现技术

为了获取Oracle系统的数据字典和视图的信息,你最好以sysdba登录Oracle系统,然后查询DICT数据字典即可。

实现步骤

下面脚本从DICT中查询表名称和表的注释信息

--

--适应版本:Oracle 9i~12c

--

CONNECT sys/password AS SYSDBA

--

set line 160

col comments for a70

col table_name for a30

Select table_name,comments

from dict where table_name like ‘V$%’ ;

说明

Oracle 系统性能视图除了以V$xxx命名外,性能视图所记录的信息基本是动态的,所谓动态就是指Oracle系统在运行中,不断采集Oracle实例运行的情况信息,并记录到性能视图中,此外,从Oracle 10g开始,部分性能视图保留的信息可持续1周时间。

用户从哪里查询自己拥有对象的信息?


所谓用户对象指的是某个用户拥有的表、视图、索引、存储过程等的实体。对于普通用户(没有DBA权限)来说,主要关心自己使用和维护的对象的基本信息,比如,当前用户有哪些表、哪些索引等。

问题的提出

在使用和维护Oracle系统的应用过程中,用户需要了解当前用户的表、索引、视图等对象信息,从而对这些对象进行维护。那么,用户从哪些数据字典中看到属于自己的对象的信息呢?

实现技术

用户拥有的对象就是指用户创建的对象,要查询到用户拥有对象的信息,需要查询两组数据字典,首选,你要了解当前用户拥有的对象的基本信息,然后再查询某个对象的详细信息。

实现步骤

下面我们给出用户查询自己用户对象的基本信息,然后再查询某个对象的详细信息:

--

--适应版本:Oracle 12c

--

连接到:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> show user

USER "SCOTT"

SQL>

SQL> alter session set container=pdborcl;

会话已更改。

SQL> desc user_objects

名称 是否为空? 类型

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

OBJECT_NAME VARCHAR2(128)

SUBOBJECT_NAME VARCHAR2(128)

OBJECT_ID NUMBER

DATA_OBJECT_ID NUMBER

OBJECT_TYPE VARCHAR2(23)

CREATED DATE

LAST_DDL_TIME DATE

TIMESTAMP VARCHAR2(19)

STATUS VARCHAR2(7)

TEMPORARY VARCHAR2(1)

GENERATED VARCHAR2(1)

SECONDARY VARCHAR2(1)

NAMESPACE NUMBER

EDITION_NAME VARCHAR2(128)

SHARING VARCHAR2(13)

EDITIONABLE VARCHAR2(1)

ORACLE_MAINTAINED VARCHAR2(1)

SQL>

--查询对象基本信息

--

Col object_type for a20

Col object_name for a30

Select object_type,object_name,status,created from user_objects ;

--

--查询表的信息:

--

Select table_name,tablespace_name,initial_extents,next_extent

From user_tables table_name like ‘xxx’;

--

--查询索引的信息:

--

Select index_name,table_name from user_indexes

Order by table_name;

说明

从这里给出的样例,你可能已经明白,一般维护和开发人员都需要了解和查询user_objects数据字典信息,从中可以了解到当前用户拥有的对象的基本信息,然后再去查询某个具体对象的详细信息。这里给出只是入门级的查询脚本,后面章节有较复杂的数据字典样例。




Oready即为“One Technology Ready”!
Oready不仅仅是数据库领域的专家,同时也是一个社区,我们汇集百位数据库领域资深顾问、讲师,服务于数据中心的技术支持与技能传授,注重对客户的关键数据库运营支撑,强调经验的分享-Skill Transfer,聚焦数据中心的完美结合.

文章转载自Oracle技术就绪,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论