学院首页 软件应用 编程开发 创意设计 认证培训 软件论坛
ASP ASP.NET PHP JSP SQL MYSQL Java VB

您的位置:学院 >> 编程开发 >> Oracle >> 基础简介:深入了解Oracle的数据字典


基础简介:深入了解Oracle的数据字典


首先,Oracle的字典表和视图基本上可以分为三个层次。

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.indx = y.indx) and ((translate(ksppinm,’_’,’#’) not 
like ’#%’) or (ksppstdf = ’FALSE’))

在这里我们看到GV$PARAMETER来源于x$ksppi,x$ksppcv两个X$表。 x$ksppi,x$ksppcv 基本上包含所有数据库可调整参数,v$parameter展现的是不包含"_"开头的参数。以"_"开头的参数我们通常称为隐含参数,一般不建议修改,但很多因为功能强大经常使用而广为人知。
技术文章快速查找

栏目导航
软件应用
·操作系统 ·杀毒防黑 ·应用软件
·聊天软件 ·网络软件  
Web开发
·ASP ·JavaScript ·CGI
·JSP ·VbScript ·Web服务器
·PHP ·XML  
开发语言
·VB ·VC ·ASP.NET
·Java ·C/C++ ·Delphi
数据库开发
·MySQL ·SQL/Access ·PowerBuilder
·Oracle ·DB2  
网站设计
·Flash ·Dreamweaver ·HTML/CSS
·Fireworks ·FrontPage  
平面设计
·Photoshop ·CorelDraw ·AutoCAD
·FreeHand ·Illustrator ·3DsMAX
媒体动画
·Director ·Authorware ·Maya
·视频处理    


相关软件 产品库推荐
·笔记本 ·台式机 ·服务器
·数码相机 ·手机 ·GPS
·DV摄像机 ·MP3 ·MP4
·CPU ·硬盘 ·内存
·主板 ·显卡 ·显示器
·打印机 ·投影机 ·路由器

还没人留言,抢个先,哈哈!
对"基础简介:深入了解Oracle的数据字典"的评论 - 快速回贴
内容:
  [完成后可按Ctrl+Enter发布]

百度中 基础简介:深入了解Oracle的数据字典 相关内容
Google搜索中 基础简介:深入了解Oracle的数据字典 相关内容
雅虎中 基础简介:深入了解Oracle的数据字典 相关内容
Sogou搜索中 基础简介:深入了解Oracle的数据字典 相关内容

相关软件 最新回复帖子:

·Windows Vista 中卸载软件的不同方式
·没有mysql支持时的替代方案
·一个可以发送附件及HTML格式邮件的PHP类
·AutoCAD打造精致三维鸟笼实例详解
·Photoshop自定义水晶字特效样式
·AutoCAD三维基础实例教程
·PS为黑背景长发美女照片抠图换背
·用Photoshop自制个性摩托车贴花小经验
·轻松几步将美女照片处理为手工素描
·巧用Photoshop画笔轻松绘制创意特效


  相关软件 基础简介:深入了解Oracle的数据字典相关文章
高手进阶:一个回滚段损坏的修复实例 Oracle 10g新特性之虚拟专用数据库
Oracle数据库操作常见错误及解决方案 用Oracle闪回功能恢复偶然丢失的数据
Oracle数据仓库的分层管理器解决方案 用Oracle并行查询发挥多CPU的威力
如何在Oracle数据库10g中跟踪SQL 将Oracle 10g内置的安全特性用于PHP
教你如何在Oracle中实现搜索分页查询 Oracle 数据库的常用函数列表一览
Oracle数据库的常见问题答疑之集锦 Oracle数据库中删除DUAL表后的处理
Oracle中如何用T-SQL语句建立跟踪 ORACLE中常用的SQL语法和数据对象
经验总结:学好 Oracle 数据库六条 Oracle中使用SQL MODEL定义行间计算
Oracle11g的新特性-11g New Features 简单介绍用RMAN进行Oracle自动备份
Oracle数据库联机热备份的原理简介 Oracle10g中新的多重集运算符解析