深入了解Oracle数据字典

玖兰殿2

玖兰殿2

2016-02-19 21:17

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享深入了解Oracle数据字典,希望可以对大家能有小小的帮助。

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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  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中查到:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

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

展开更多 50%)
分享

猜你喜欢

深入了解Oracle数据字典

编程语言 网络编程
深入了解Oracle数据字典

使用数据字典

编程语言 网络编程
使用数据字典

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Oracle的数据字典技术简析

编程语言 网络编程
Oracle的数据字典技术简析

Oracle中的数据字典技术简析

编程语言 网络编程
Oracle中的数据字典技术简析

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

深入了解白平衡

摄影 人像摄影 静物摄影
深入了解白平衡

获取MSSQL数据字典的SQL语句

编程语言 网络编程
获取MSSQL数据字典的SQL语句

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

最痛苦玓眔昰感情

最痛苦玓眔昰感情

有时难过得仿佛动一动,就会疼的掉泪

有时难过得仿佛动一动,就会疼的掉泪
下拉加载更多内容 ↓