Oracle的结构体系的抽象


Oracle的结构体系的抽象

一个狂热摄影爱好者—老王的幸福家庭

 

 

每一本介绍ORACLE的书籍第一章节一般都会介绍ORACLE的结构体系,当打开该章节时候,读者会一下子陷入一个充满了大量晦涩难懂的、陌生的概念之深渊。读下去的兴趣一下子没有了,产生了ORACLE是一个深奥难懂的一个数据库的想法。但是如果不知道oracle的结构体系,即使使用oracle多年了,仍然处于低档次应用水平。为了帮助大家理解结构体系的内容,我写了一个《一个狂热摄影爱好者—老王的幸福家庭》的介绍,通过对比与联想,希望有助于您对ORACLE数据库的结构体系有所理解。

 

 

家庭成员与角色(注意这家人的别名,它们会出现在附件文档中)

成员

关系

别名

角色功能

老王

一家

之主

SID

用特殊的相机(不用换胶卷的一次产生一张照片和一张底片的)照相,并将照片放在DB_BUFFER_CACHE,将底片交给大儿子, 并作标记SCN;

王妻

妻子

DBWR

王妻是一个传统的中国女性,她的一项工作是不断地看看DB_BUFFER_CACHE上是否有新的照片,如有,她就放在照片空间(照片空间有照片剪贴簿、挂在墙壁上,照相簿几部分组成)上。墙上的照片框架一样大小,有时候一个框架放一张照片,有时候,一个框架放多张照片,有时候一张照片占用多个框架(照片链),每个框架上用SCN(system change number)作记录,每一张照片有唯一的ID(rowid),这个ID包含墙壁与框架的信息,

有时候,老王在看墙上照片,觉得不满意,拿下来进行修改,他就将包含这张照片的框架进行拷贝(也叫快照),并将拷贝放在一个叫回退的储藏室, 如果对修改满意并得到确认,王妻则将修改后的照片放回墙壁的原处,并把新的SCN放在框架上。如果不满意,则从回退的储藏室取回框架放在墙上,墙壁上的照片回到原来的样子。

王伯当

大儿子

LDWR

老王照一张照片的同时,产生了一张底片,他将底片放在家里的厨房里的一个架子上,在架子上,老王贴了一个标签,标签上标记底片,这个标签叫“LOG-BUFFER”,当大儿子王伯当发现架子上有底片,他立即将底片放在一个笔记本里,这个笔记本叫做“重做笔记本”,使用这个名字,是因为可以用里面的底片恢复一张照片。大儿子王伯当将底片按照顺序将底片放入到“重做笔记本”,一旦当前的笔记本满了,他就换另一个笔记本,并在“告警日记本上”作一次记录。

注意:不是所有照片都有底片的保存,老王可以指定那些照片不必做日志。

王仲和

二儿子

ARCH

尽管已经这样做了,老王还是不放心,他担心如果来了一场大火,或者其他什么意外,他的照片底片还是有可能被损坏,他赋予他的二儿子仲和一项任务,一旦大儿子更换“重做笔记本”时候,他就拿出那些“重做笔记本”中的底片,将他放在房子外面的一个安全的地方—后院的地下室,作了一份“重做笔记本”的拷贝,这个拷贝被称为“归档的重做笔记本”,同时他更新“控制笔记本”,并在并在“告警日记本上”作一次记录。

王小三

小儿子

CKPT

小儿子王小三是一个动作迅速的小家伙,他的任务将每一个墙壁,照相簿,剪贴册的照片与控制笔记本中的数字协调起来,当他得到指令,他就飞奔起来,在每一个墙面上写下数字,并将同样的数字记录在“控制笔记本”中,使得每一件事情协调起来。

王管家

管家

SMON

有时候,全家早晨起来,房子显得凌乱,这是因为昨晚大家休息前,没有来得及清理各自的事情,SMON负责在开门前处理一下没有完成的照片与回退(从回退储藏室中取出照片框架,把旧的版本放回原来的墙上)

王管家妻

女佣

PMON

老王家干完一天的工作,准备休息,他要求全家休息前,把东西放好,关掉或者停下手里的工作。让房间里参观的客人离开,一般有4种情况:

1:老王很有耐心,等待所有客人自行离开,再休息;

2:老王没有耐心,他亲自监督每一个客人,但客人看完照片后,他给客人指出出门的方向;

3:老王非常没有耐心,他揪着客人的衣领,送出门,不让他们干完自己的事情;

4:老王,拉下电闸,说,时间到。屋子里一片狼藉,第二天早上,由王管家来收拾。

当一个客人走后,老王叫来女佣,她监控每一个客人的活动,在这些客人走后,这位女佣不厌其烦地将客人留下的垃圾扫尽垃圾桶里,并妥善处理。

如果老王没有拉闸,每个人开着灯,进行清理:王妻会从DB_BUFFER_CACHE架子上取走所有照片,放在合适的墙壁上,大儿子王伯当确定LOG_BUFFER的架子上是空的,所有的底片都在“重做笔记本”中,小儿子王小三在整个房间里兜了一圈,用最高与最低的目录编号SCN来更新墙壁与笔记本;老二王仲和把最后的一张底片放在“重做笔记本”,并放到后院的地下室,然后更新控制与告警笔记本。每一件事情做完后,老王关灯,全家休息。


 

下面是一些角色活动中涉及到的一些名词,在这里单独说明:

 

控制笔记本:老王家的主要成员,要想将照片与底片处理的井井有条,需要制作很详细的笔记(如我们的工作周报),每个人都将自己的事情写入这个笔记本,这个笔记本叫做“控制笔记本”。“控制笔记本”记录了每一面墙,剪贴簿等家庭财产的清单条目,当老王觉得要增加一个房间,来放置更多的照片,他必须在“控制笔记本”增加相应的记录。当老大更换“重做笔记本”时候,他需要在“控制笔记本”增加相应的记录。当老二作了一份“重做笔记本”的拷贝的时候,他需要在“控制笔记本”增加相应的记录。当王小三在房间里跑了一圈,他需要在“控制笔记本”增加相应的记录。这个特殊的笔记本动态地保存了所有地方的资产情况,和房子里以数字表示的工作进程。

 

告警笔记本:每个家庭成员将遇到的问题写在这个日志里。如果需要某个情形下的额外信息,需要“跟踪笔记本”,它与告警笔记本配合使用,使得告警笔记本不会那么凌乱。

 

老王家的其他问题:

如果发生以下问题,老王无法开展一天的工作:

1:找不到新的一日工作的工作计划(初始化文件)

2:后院的地下室满了,老二没有空间放置新的底片,全家人只有等着;

3:老王的妻子患了感冒,老王很伤心,他会伤心地关上门,全家停工。

4:有时候老王需要用后院地下室的底片恢复一张(些)照片。如果他丢失一张底片,或者在恢复过程中损坏了一张底片,那他无法恢复那张损坏了底片以后拍的所有照片。

5:老王在工作中有时候不小心,在工作的时候,相机里的胶卷曝光,他会要求相机厂家提供有两个胶卷仓的照相机,万一一个胶卷仓的胶卷曝光,他还能指望另一个胶卷仓,这第二个胶卷仓叫“镜像”。

 

 

ORACLE内存的体系结构SGA

数据库启动的时候,能够看到以下主要参数信息

 

名称

角色功能

共享池

(shared pool)

库缓存、字典等

large pool:RMAN  并行处理 多线程服务器分时记忆

java pool:java代码数据使用

缓冲存储区

(buffer cache)

新的数据或者更新的数据工作先在缓存中进行,然后写回磁盘

重做日志缓冲区

(redo log buffer)

当数据被更新后,对于他们所作的修改被保存在重做日志缓冲区,当这个区满了1/3或者有了1M的重做日志记录时,这个区的数据写道联机重做日志里。

 

 

数据库的体系结构---老王家与ORACLE的基本内容的对照

ORACLE概念

老王家的对比物

ORACLE数据库

老王家保存照片与相关的笔记本、墙壁、储藏室。

一张照片。老王通过察看、修改、删除来处理照片,数据库的行保存了数据,可以查看,修改、删除、添加。

行标示(ROWID)

照片的ID

数据块

保存照片的框架。

表空间

保存照片的房间

系统更改号SCN

小三来回兜圈子协调墙壁与各个笔记本中内容的依据

数据文件

保存照片的房间的每一个墙壁

联机重做日志文件

 

控制文件

控制笔记本内容

参数文件

老王在一家开工前必须阅读的老王家一天工作的活动指南。

数据写入器

王妻从DB_BUFFER_CACHE架子上取照片,并放在墙壁上

日志写入器

大儿子王伯当将底片放入重做笔记本。

归档器

二儿子仲和拿出“重做笔记本”中的底片,放入“归档的重做笔记本”(在后院的地下室)

系统监视器

王管家

进程监视器

保姆王管家妻子

打开\关闭\启动数据库

王家的房子对客人开放\全家休息\早上常规程序

事务

处理一张或者多张照片

检查点

王小三同步墙上照片与控制笔记本的内容

 

 

 

 

 

活动流程:

                                                                          1、写入一条数据

INSERTINTO DEPTVALUES(........)              2、生成重做  保存在重做缓存区

                                                                          3、生成UNDO  保存在回滚段中

 

无论是否提交,都要生成重做

 

COMMIT;       1、读取一致性(原理SCN)

              2、将重做日志缓冲写入联机重做日志 

继续其他工作,如果一个联机重做日志写满,LGWR关闭这个日志,打开写下一个日志,LGWR还会通知ARCH,将刚刚完成的重做日志写入到归档重作日志中。

相关内容