写本篇文章主要受两本书的启发写一些个人心得笔记,分享知识,并把书籍推荐给大家阅读1、《收获,不止Oracle》 2、《Oracle内核技术》 不涉及编程,设计体系架构思路,如果有编程书更是好!还有官方文档一定要读,英语水平差看翻译也要读一遍,真正权威来源于官方。我感觉了解Oracle Internal时候,尽可能把自己成为设计者的角度去看待问题,如果你能用C写成底层过程更是了得。

    我们一起来说一说,那么数据库分为Instance与Database,我们知道用户访问必须通过实例才能访问数据库,这是硬规定。实例与数据库中都是什么,用户访问还要经过PGA,这又是什么,下面我们一起来来看一看

    PGA,当我们的通过Socket请求(其实也分为很多种处理,不想细说)我们的指令会先到PGA区域是Program Global Area,这个区域有会保存会话属性,存绑定变量等也就是我们用户连接信息,然后用户进程与数据库建立会话时候,系统会将用户相关权限查出来,保存在这个区域,PGA里面有进程叫Server process来完成这些工作,而且是私有不是共享!

    SGA,System Global Area,共享内存区域,Instance 其实就是 SGA+process(后台),SGA里面板块有很多,我认为相对来说shared_pool,database buffer cache,Redo log buffer相对重要,因为每一个组件都很重要,这里只相对概念,SGA里面也包含Java pool,Large_pool等,我们那个简单的查询语句来说select * from t来说说他怎样过程。

    Shared_pool共享池,这个其实作用很大,当我们从PGA访问到实例时候先到SGA中,那么在PGA会生成唯一标识HASH,这时候会在SGA的共享池中寻找着唯一标识,如果找到HASH会从对应数据缓存缓冲中找到对应的values,把values直接返回用户,如果找不到就比较麻烦,他会显示判断语法是否错误,权限是否正确,解析用什么样的方式去查询,会先预估成本COST,比较成本选择较低的方式去查询,那么当着动作完成后就会生成唯一HASH值存储到共享池中,然后去数据缓存缓冲区中查询。

    数据缓冲缓存里面会寻找我们想要的数据,SGA是在内存中开辟的空间,这时候没有我们只能去Database中来实现完成,查询磁盘中的数据文件找到就好找不到也好,都必须带着结果返回给用户,那么一条查询语句粗略的算是完成。

    再说一说实例里面的进程,我们在Linux下,ps aux | grep oracle就会发现很多后台进程,我说几个里面主要的进程和功能,PMON,SMON,LCKn,RECO,CKPT,ARCH,包括DBWR,LGWR,我们理解这些词语英语英语!很重要,基本就是英语翻译过来的字面意思,下面我们都去说一说,知道怎样工作,负责什么工作,重点说一下Redo log与ARCH日志功能!

    草稿2个多月没有去写,以后有空继续研究!(Oracle到此告一段落)