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的重做日志记录时,这个区的数据写道联机重做日志里。 |