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,将刚刚完成的重做日志写入到归档重作日志中。