- 浏览: 758125 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
di1984HIT:
哈哈,都不错。
Linux 环境下SQLPLUS 回退键无法使用处理方法 -
di1984HIT:
还可以查到sql
oracle中查询被锁的表并释放session -
di1984HIT:
呵呵,真的不错。
Oracle数据库经常会遇到CPU利用率很高的情况 -
李君寻:
...
解读java连接db2的四种类型 -
清风123:
dx>=this.length
js删除Array数组中的某个元素
常用的几个数据字典:
user_objects : 记录了用户的所有对象,包含表、索引、过程、视图等信息,以及创建时间,状态是否有效等信息,是非DBA用户的大本营。想知道自己有哪些对象,往这里查。
user_source :包含了系统中对象的原码,如存储过程,FUNCTION、PROCEDURE、PACKAGE等信息
cat或Tab :包含当前用户所有的用户和视图信息和同义词信息,cat还多了一个SYNONYM;
dict :系统中所有的数据字典都存储在这里面
Oracle中的数据字典有静态和动态之分。静态数据字典主要是在用户访问数据字典时不会发生改变的,但动态数据字典是依赖数据库运行的性能的,反映数据库运行的一些内在信息,所以在访问这类数据字典时往往不是一成不变的。以下分别就这两类数据字典来论述。
1. 静态数据字典
这类数据字典主要是由表和视图组成,应该注意的是,数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*、 all_*、 dba_*。
user_*
该视图存储了关于当前用户所拥有的对象的信息。(即所有在该用户模式下的对象)
all_*
该试图存储了当前用户能够访问的对象的信息。(与user_*相比,all_* 并不需要拥有该对象,只需要具有访问该对象的权限即可)
dba_*
该视图存储了数据库中所有对象的信息。(前提是当前用户具有访问这些数据库的权限,一般来说必须具有管理员权限)
从上面的描述可以看出,三者之间存储的数据肯定会有重叠,其实它们除了访问范围的不同以外(因为权限不一样,所以访问对象的范围不一样),其他均具有一致性。具体来说,由于数据字典视图是由SYS(系统用户)所拥有的,所以在却省情况下,只有SYS和拥有DBA系统权限的用户可以看到所有的视图。没有DBA权限的用户只能看到user_*和all_*视。如果没有被授予相关的SELECT权限的话,他们是不能看到 dba_*视图的。
由于三者具有相似性,下面以user_为例介绍几个常用的静态视图:
user_users视图
主要描述当前用户的信息,主要包括当前用户名、帐户id、帐户状态、表空间名、创建时间等。例如执行下列命令即可返回这些信息。
select * from user_users
user_tables视图
主要描述当前用户拥有的所有表的信息,主要包括表名、表空间名、簇名等。通过此视图可以清楚了解当前用户可以操作的表有哪些。执行命令为:select * from user_tables
user_objects视图
主要描述当前用户拥有的所有对象的信息,对象包括表、视图、存储过程、触发器、包、索引、序列等。该视图比user_tables视图更加全面。例如, 需要获取一个名为“package1”的对象类型和其状态的信息,可以执行下面命令:
select object_type,status
from user_objects
where object_name=upper(‘package1’);
这里需注意upper的使用,数据字典里的所有对象均为大写形式,而PL/SQL里不是大小写敏感的,所以在实际操作中一定要注意大小写匹配。
user_tab_privs视图
该视图主要是存储当前用户下对所有表的权限信息。比如,为了了解当前用户对table1的权限信息,可以执行如下命令:
select * from user_tab_privs where table_name=upper('table1')
了解了当前用户对该表的权限之后就可以清楚的知道,哪些操作可以执行,哪些操作不能执行。
前面的视图均为user_开头的,其实all_开头的也完全是一样的,只是列出来的信息是当前用户可以访问的对象而不是当前用户拥有的对象。对于dba_开头的需要管理员权限,其他用法也完全一样,这里就不再赘述了。
2. 动态数据字典
Oracle包含了一些潜在的由系统管理员如SYS维护的表和视图,由于当数据库运行的时候它们会不断进行更新,所以称它们为动态数据字典(或者是动态性能视图)。这些视图提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。
Oracle中这些动态性能视图都是以v$开头的视图,比如v$access。下面就几个主要的动态性能视图进行介绍。
v$access
该视图显示数据库中锁定的数据库对象以及访问这些对象的会话对象(session对象)。
运行如下命令:
select * from v$access
结果如下:(因记录较多,故这里只是节选了部分记录)
SID OWNER OBJECT TYPE
27 DKH V$ACCESS CURSOR
27 PUBLIC V$ACCESS SYNONYM
27 SYS DBMS_APPLICATION_INFO PACKAGE
27 SYS GV$ACCESS VIEW
v$session
该视图列出当前会话的详细信息。由于该视图字段较多,这里就不列详细字段,为了解详细信息,可以直接在sql*plus命令行下键入:desc v$session即可。
v$active_instance
该视图主要描述当前数据库下的活动的实例的信息。依然可以使用select语句来观察该信息。
v$context
该视图列出当前会话的属性信息。比如命名空间、属性值等。
常用的数据字典是要掌握的,如表空间、各种对象、会话等。个人认为一般知道自己需要时往哪里找这些信息才是最重要的,然后通过关键字查找。
--------------------------------
1.1 X$表
这一部分表是Oracle数据库的运行基础,在数据库启动时由Oracle应用程序动态创建。
这部分表对数据库来说至关重要,所以Oracle不允许SYSDBA之外的用户直接访问,显示授权不被允许。
如果显示授权你会收到如下错误:
SQL> grant select on x$ksppi to eygle;
grant select on x$ksppi to eygle
*
ERROR at line 1:
ORA-02030: can only select from fixed tables/views
1.2 GV$和V$视图
从Oracle8开始,GV$视图开始被引入,其含义为Global V$.
除了一些特例以外,每个V$视图都有一个对应的GV$视图存在。
GV$视图的产生是为了满足OPS环境的需要,在OPS环境中,查询GV$视图返回所有实例信息,而每个V$视图基于GV$视图,增加了INST_ID列判断后建立,只包含当前连接实例信息。
注意,每个V$视图都包含类似语句:
where inst_id = USERENV('Instance')
用于限制返回当前实例信息。
我们从GV$FIXED_TABLE和V$FIXED_TABLE开始
SQL> select view_definition from v_$fixed_view_definition where view_name='V$FIXED_TABLE';
VIEW_DEFINITION
------------------------------------------------------------------------------
select NAME , OBJECT_ID , TYPE , TABLE_NUM from GV$FIXED_TABLE where inst_id = USERENV('Instance')
这里我们看到V$FIXED_TABLE基于GV$FIXED_TABLE创建。
SQL> select view_definition from v_$fixed_view_definition where view_name='GV$FIXED_TABLE';
VIEW_DEFINITION
------------------------------------------------------------------------------
select inst_id,kqftanam, kqftaobj, 'TABLE', indx from x$kqfta
union all
select inst_id,kqfvinam, kqfviobj, 'VIEW', 65537 from x$kqfvi
union all
select inst_id,kqfdtnam, kqfdtobj, 'TABLE', 65537 from x$kqfdt
这样我们找到了GV$FIXED_TABLE视图的创建语句,该视图基于X$表创建。
1.3 GV_$,V_$视图和V$,GV$同义词
这些视图是通过catalog.ql创建。
当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_$视图的同义词被创建。
所以,实际上通常我们访问的V$视图,其实是指向V_$视图的同义词。
而V_$视图是基于真正的V$视图(这个视图是基于X$表建立的)。
而v$fixed_view_definition视图是我们研究Oracle对象关系的一个入口,仔细理解Oracle的数据字典机制,有助于深入了解和学习Oracle数据库知识。
1.4 再进一步
1.4.1 X$表
关于X$表,其创建信息我们也可以从数据字典中一窥究竟。
首先我们考察bootstrap$表,该表中记录了数据库启动的基本及驱动信息。
SQL> select * from bootstrap$;
LINE# OBJ# SQL_TEXT
------------------------------------------------------------------------------
-1 -1 8.0.0.0.0
0 0 CREATE ROLLBACK SEGMENT SYSTEM STORAGE ( INITIAL 112K NEXT 1024K MINEXTENTS 1 M
8 8 CREATE CLUSTER C_FILE#_BLOCK#("TS#" NUMBER,"SEGFILE#" NUMBER,"SEGBLOCK#" NUMBER)
9 9 CREATE INDEX I_FILE#_BLOCK# ON CLUSTER C_FILE#_BLOCK# PCTFREE 10 INITRANS 2 MAXT
14 14 CREATE TABLE SEG$("FILE#" NUMBER NOT NULL,"BLOCK#" NUMBER NOT NULL,"TYPE#" NUMBE
5 5 CREATE TABLE CLU$("OBJ#" NUMBER NOT NULL,"DATAOBJ#" NUMBER,"TS#" NUMBER NOT NULL
6 6 CREATE CLUSTER C_TS#("TS#" NUMBER) PCTFREE 10 PCTUSED 40 INITRANS 2 MAXTRANS 255
7 7 CREATE INDEX I_TS# ON CLUSTER C_TS# PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE (
....
这部分信息,在数据库启动时最先被加载,跟踪数据库的启动过程,我们发现数据库启动的第一个动作就是:
create table bootstrap$ ( line# number not null, obj#
number not null, sql_text varchar2(4000) not null) storage (initial
50K objno 56 extents (file 1 block 377))
这部分代码是写在Oracle应用程序中的,在内存中创建了bootstrap$以后,Oracle就可以从file 1,block 377上读取其他信息,创建重要的数据库对象。从而根据这一部分信息启动数据库,这就实现了数据库的引导,类似于操作系统的初始化。
这部分你可以参考biti_rainy的文章。
X$表由此建立。这一部分表可以从v$fixed_table中查到:
SQL> select count(*) from v$fixed_table where name like 'X$%';
COUNT(*)
----------
394
共有394个X$对象被记录。
1.4.2 GV$和V$视图
X$表建立以后,基于X$表的GV$和V$视图得以创建。
这部分视图我们也可以通过查询V$FIXED_TABLE得到。
SQL> select count(*) from v$fixed_table where name like 'GV$%';
COUNT(*)
----------
259
这一部分共259个对象。
SQL> select count(*) from v$fixed_table where name like 'V$%';
COUNT(*)
----------
259
同样是259个对象。
v$fixed_table共记录了:
394 + 259 + 259 共 912 个对象。
我们通过V$PARAMETER视图来追踪一下数据库的架构:
SQL> select view_definition from v$fixed_view_definition a where a.VIEW_NAME='V$PARAMETER';
VIEW_DEFINITION
------------------------------------------------------------------------------
select NUM , NAME , TYPE , VALUE , ISDEFAULT , ISSES_MODIFIABLE , ISSYS_MODIFIA
BLE , ISMODIFIED , ISADJUSTED , DESCRIPTION, UPDATE_COMMENT from GV$PARAMETER wh
ere inst_id = USERENV('Instance')
我们看到V$PARAMETER是由GV$PARAMETER创建的。
SQL> select view_definition from v$fixed_view_definition a where a.VIEW_NAME='GV$PARAMETER';
VIEW_DEFINITION
-----------------------------------------------------------------------------
select x.inst_id,x.indx+1,ksppinm,ksppity,ksppstvl,ksppstdf, decode(bitand(kspp
iflg/256,1),1,'TRUE','FALSE'), decode(bitand(ksppiflg/65536,3),1,'IMMEDIATE',2,
'DEFERRED', 3,'IMMEDIATE','FALSE'), decode(bit
and(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE'), decode(bitand(ksppstvf,2)
,2,'TRUE','FALSE'), ksppdesc, ksppstcmnt from x$ksppi x, x$ksppcv y where (x.i
ndx = y.indx) and ((translate(ksppinm,'_','#') not like '#%') or (ksppstdf = 'F
ALSE'))
在这里我们看到GV$PARAMETER来源于x$ksppi,x$ksppcv两个X$表。 x$ksppi,x$ksppcv 基本上包含所有数据库可调整参数,v$parameter展现的是不包含"_"开头的参数。以"_"开头的参数我们通常称为隐含参数,一般不建议修改,但很多因为功能强大经常使用而广为人知。
http://hum998.spaces.live.com/blog/cns!aa0c007cc0f2dc67!148/
发表评论
-
ORA-01950: no privileges on tablespace "example_tbs"
2012-04-20 14:38 1364原因:用户没有此表空间分配EXTENT的权限 可以两个 ... -
oracle中查询被锁的表并释放session
2010-06-10 10:10 2717在开发项目中经常发现有人锁住表不放 我们可以通alter s ... -
在oracle中通过connect by prior来实现递归查询
2010-05-06 13:52 1575connect by 是结构化查询 ... -
oracle中跟用户及权限有关的系统表
2010-04-20 15:54 14451.查看所有用户: select * from dba_u ... -
oracle 物化视图
2010-04-20 09:24 2302优势 可以提 ... -
oracle 查看跟踪文件
2010-03-24 09:35 1224sql_trace 和10046 事件 首先 SQL> ... -
v$lock视图
2010-03-19 15:49 2014v$lock视图SID:Identifier for sess ... -
如何设置Oracle Events以跟踪数据库
2010-03-18 10:33 1771Events事件是Oracle的重要诊断工具及问题解决办法,很 ... -
oracle“SQL Trace”简介
2010-03-17 17:03 1946一、概述 “SQL TRACE”是Oracle提供的用于进行 ... -
Oracle数据库提高命中率及相关优化
2010-03-15 17:06 2029本文是关于Oracle数据库调试与优化方面的文章,主要介绍Or ... -
多种方法查看Oracle SQL执行计划
2010-03-15 16:38 2249一.在线查看执行计划表如果PLAN_TABLE表不存在,执行$ ... -
Oracle数据库经常会遇到CPU利用率很高的情况
2010-03-15 16:32 16836Oracle数据库经常会遇到CPU利用率很高的情况,这种时候大 ... -
oracle hint提示优化SQL
2010-03-09 16:47 1630在优化调整数据库的SQL时候,经常会用到HINT提示.目前OR ... -
oracle问题 SP2-0613: 无法验证 PLAN_TABLE 格式或实体
2010-03-05 11:40 1852此错误表示还没有创建 plan_table 表 先创建 ... -
Oracle truncate table 与 delete tabel的区别
2010-03-04 13:56 2003一、 1.delete产生rollback,如果删除大数据 ... -
Oracle 索引的分类
2010-03-02 17:54 1731逻辑上: Single column 单列索引Concaten ... -
oracle 锁等待的诊断及排除
2010-03-02 16:38 2725在ORACLE中,为了保证数据的一致性,在对数据库中的数据进行 ... -
Red Hat Enterprise Linux 5 上安装RAC环境
2010-01-29 16:36 1185oracle 10 在 Red Hat Enterprise ... -
oracle9i 启用Partition功能
2009-11-25 17:44 14801、确定安装oracle9i企业版本 select * fr ... -
oracle性能调整—PCTFREE、PCTUSED
2009-10-30 10:45 5163一、定义 1、PCTFREE、PCT ...
相关推荐
这个脚本首先创建V$和GV$视图,然后创建这两个视图的同义词,使得用户可以通过V$或GV$来访问数据。实际上,当我们查询V$视图时,我们实际上是通过V_$视图的同义词访问数据,而V_$视图本身又是基于实际的V$视图(基于...
除了上述静态的数据字典视图,Oracle还有动态的数据字典视图,以"V$"或"GV$"为前缀。这些视图被称为动态视图,因为它们提供了关于Oracle实例运行时的动态性能和统计信息。动态视图通常以V$开头,它们是基于X$虚拟...
通过合理利用X$ 表、GV$ 和 V$ 视图以及GV_$ 和 V_$ 视图,可以实现对数据库内部结构和运行状态的全面掌握,这对于Oracle DBA来说是非常有价值的技能。 ### 结论 Oracle数据字典是理解Oracle数据库不可或缺的一...
动态性能视图可分为 X$ 表、GV$ 和 V$ 视图三类。 常用数据字典视图:对于日常的数据库开发和维护,常用的数据字典主要有静态数据字典视图的 DBA 视图和动态性能视图的 V$ 视图两类。 常用静态数据字典视图:...
在X$ 表创建后,Oracle进一步创建了GV$ 和 V$ 视图。GV$ 视图是从Oracle 8版本开始引入的,其全称为Global V$,主要用于多实例环境中的查询。 - **GV$ 视图**:在多实例环境中,查询GV$ 视图可以获得所有实例的信息...
首先,Oracle的数据字典包括三个主要层次:X$表、GV$和V$视图以及V$和GV$的同义词。X$表是Oracle数据库运行的基础,这些表在数据库启动时由Oracle应用程序动态生成,包含了数据库运行所需的关键信息。由于它们的重要...
### Oracle 12C 数据字典视图概念深入浅出 #### 一、概述 在Oracle 12C中引入了多租户容器数据库(CDB)的概念,它允许在一个容器数据库内创建多个可插拔数据库(PDB)。为了更好地管理这些数据库结构,Oracle 12C...
- **视图命名规则**:动态数据字典视图通常以单数形式命名,例如 `V_$TABLESPACE`。 - **访问条件**:部分动态数据字典视图可以在数据库未打开的状态下访问。 - **列信息格式**:动态数据字典视图中的列信息通常采用...
可以通过一下视图和数据字典来来查看ASM 的信息。Thislistisobtainedqueryingv$fixed_view_definitionwhere view_namelike'%ASM%'whichexposesallthev$and gv$viewswiththeirdefinition.Fixedtablesare
这些视图以`V$`或`GV$`开头,基于内部的X$表,通常用于诊断和性能监控。由于这些信息随数据库的运行而变化,因此每次查询可能得到不同的结果。 3. 数据字典的使用: 用户在操作数据库时,可以通过查询数据字典获取...
这些视图作为数据字典视图的补充,存储在系统全局区(SGA)中,提供了丰富的实时信息,帮助用户了解数据库内部的运作情况。此外,还有全球固定视图(GV$ Views),它们与V$ Views类似,但额外包含了实例ID(inst_id...
4. **V$ 视图**:这些视图以V$或GV$开头,提供了关于数据库实例的实时信息。V$视图基于X$虚拟视图构建,通常只对SYS用户和具有DBA权限的用户可见。 #### 四、Oracle 数据字典中的视图家族 Oracle 数据字典中的视图...
本文将基于给定的内容,详细介绍Oracle 10g中的动态性能视图(V$ views)以及全球固定视图(GV$ views),并解释其主要功能和用途。 #### 动态性能视图(V$ views) **概述:** 动态性能视图是Oracle 10g数据库...
5. **GV$视图**:类似于V$视图,但提供了全局视图,即包含所有数据库实例的信息,这对于RAC(Real Application Clusters)环境尤其重要。 ### Oracle公共字典的使用场景 Oracle公共字典的应用场景非常广泛,包括但...
* 动态表:以V$或GV$开头的表,例如V$SESSION、V$SQL等,这些表会不断更新以反映出Oracle数据库当前的状态。 * 静态数据字典表:以DBA_、ALL_或USER_开头的表,例如DBA_TABLES、ALL_TABLES、USER_TABLES等,这些表...
- **user_**:记录当前用户的对象信息,任何用户都可以查询自己的数据字典视图。 - **all_**:记录当前用户及其被授权访问的所有对象信息,需要有相应的权限才能访问。 - **gv_**:分布式环境下所有实例的动态视图,...