我们前面已经学了三个重要的必选后台进程
LGWR
CKPT
DBWR
他们之间都是密切关联和执行顺序
我们接下来学习另外两个必选后台进程
SMON和PMON
我们首先来学SMON
SMON用来维护和监控整个数据库的安全和完整性。
它的主要职责有如下:
o 实例恢复
o 每3秒整理区碎片
o 清理临时段
我们接着详细讲这3部分
我们可以用静安书店来比喻这个实例,那SMON就相当于公司的行政部长
处理这个公司的日常运做
比如停电,公司处理大的活动
还有象一些场地的分配等
那我们的SMON第1个重要任务就是处理实例的异常DOWN机(类似停电)
我们知道,ORACLE为了实现高效,会把最近的数据和日志记录在内存,定期回去刷新,这就是前面的LGWR,DBWR的进程干的活
所以DOWN机也就意味着你的磁盘数据不是最新的或者最后的数据
那最新最后的数据在哪里?
在DB BUFFER
还有及少部分在REDO BUFFER
那还有一个地方有
LOGFILE
o db buffer
o logfile
o redo buffer --这个部分肯定没提交,否则写到logfile
所以停电了会有什么结果
db buffer
redo buffer没了
因为电没了,内存就没了
那新的数据要不丢失,只能从logfile里拿,而redo buffer丢了也不要紧,反正没提交,它的脏块也不需要写到磁盘
我们用图来了解这个过程
o SMON在实例启动时完成实例恢复
应用没有写到磁盘的改动向量
并回滚没有提交事务的改动向量
停电后SMON等于要做两个动作
我们看增量检查点将写最早的3秒钟的重做向量(图上绿色部分)
前滚 --前滚那些没有写到磁盘的改动向量(白色箭头部分)
这些脏缓存被停电丢了
最后的重做向量是T4,这时箭头以下的部分还没被应用,这时候停电
停电时数据文件是在黑色箭头的状态,日志文件在最后t4的状态
没看到图
前滚后数据文件是在最后t4的状态,日志文件也在最后t4的状态
红色上箭头是回滚的顺序
红色横箭头是回滚的改动向量
我们看到要回滚7条改动向量
这些动作都会在实例启动的时候由SMON触发去检查,来实现实例恢复
好,这是SMON在危机的时刻重要的一个任务
第2.
在字典管理表空间中整理FREE的邻接空间
我们先了解区碎片是怎么清理的,然后了解下什么情况下会去清理
由于字典管理,各个表或者表内分配了不同大小的区,而DELETE,UPDATE后区内容会被删除,变成FREE区
而这些区大小不一样,看我们图里的每一个就是一个区(EXTENT)
那把这些小FREE区合并到一个大区就会更有可能服务于别的空间请求
我们看到右边箭头黄色区域,第2行4个空闲区被合并成一个区,第4行2个空闲区被合并成1个区
那其它黄色空闲区为什么不能一起合并
'
因为他们物理上不是一个连续的区,所以不能合并
好,这就是区整理的概念
那我们来了解下,有哪些情况在字典管理模式下触发区合并
oo 进程申请分配新的空间的时候
当申请分配空间时,没有合适的FREE区满足它申请的大小,则会触发区的合并,来满足这次请求
再看第2种情况
oo PCTINCREASE (SMON)完成
这个就是我们讲的SMON的任务,只有PCTINCREASE>0时,意味着区的大小是线性增长的,每个区都不一样大
为了避免将来空间分配出现困难,SMON每3秒种清理合并区
大家想一下SMON是不是很累
所以我们不建议这样做
第3种情况
oo ALTER TABLESPACE COALESCE
人工触发清理
好,以上我们讲的区合并都是基于字典管理
但是现在几乎用的都是本地管理,所以大家要关心的是下面的知识
在本地管理表空间中不需要特意去整理FREE的邻接空间
因为本地管理的区信息是用位图状态并保存在块级别维护
由位图来实现碎片的维护
ORACLE自动跟踪邻接空间,来减少了整理的操作
好,这是SMON的第二大功能
第3.临时段的清理
SMON的另一个功能是临时段的清理,比如全局临时表
如果不再使用,SMON负责清理工作
好,我们SMON讲到这里
我们接着讲PMON
进程监控
PMON是进程监控程序,用户监控和维护进程的安全和一致性
顾名思义,PMON管理的是进程
ORACLE的所有的进程它来参与维护和监控
它的主要职责是:
对用户进程处理失败后,执行进程清理恢复的操作
看不到图片的同学,可以参考教材《ORACLE基础篇-I-1.pdf》48页
负责每个人的生活起居,碰到的困难,它来帮你解决
那它碰到了进程异常,将处理哪些事情呢
我新来的那个资料可以发一份给我马·
共享里
o 释放该进程的buffer cache资源
o 进程相关的锁资源
o 其他资源,比如进程号等信息,v$process可以看到的一些信息
o 检查调度器和服务器进程,来实现调度器分配请求队列和响应队列
第2.pmon还有一个任务,它可以实现服务注册(在基础II网络部分讲)
它可以把实例提供的服务的当前负载信息告诉listener,在RAC的系统以便让listener选择一个负载低的服务来为客人服务
比如上海图书馆(提供ORACLE服务)
静安图书分店(有40人排队买书) -->告诉书店调度中心(LISTENER)有40个连接
黄浦图书分店(有20人排队买书) -->告诉书店调度中心(LISTENER)有20个连接
小丽 提出要买'CBO 基础'最新版的书,书店调度中心(LISTENER)接收到小丽的请求
判断有两个图书分店提供服务,但是黄浦图书分店只有20个连接,你去的话排队时间会更短
-->告诉书店调度中心(LISTENER)有40个连接
谁告诉书店调度中心(LISTENER)?
就是PMON
这是动态服务注册的概念 --基础II会详细讲这个过程
时间有点紧了
前面讲的后台进程是ORACLE必须有的后台进程.也就是你要开静安图书分店
你必须要有的管理人员,否则这店要关门(DOWN)
所以你杀了这5个进程,实例就会DOWN机
对于不同的组件和版本,还会有很多可选的后台进程,我们会在以后的课里慢慢接触
我们在这本书里再介绍一个最常见的可选后台进程,ARCH
归档进程之所以可选,是以为你实例可归档,也可以不归档
这要看你安全性的级别设置的如何
1.你就设置正确的listener协议/地址/端口
2.tnsnames里指向这个listener协议/地址/端口
取一个别名orcl
3.然后alter system set local_listener=orcl;
alter system register;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8334342/viewspace-566820/ ,如需转载,请注明出处,否则将追究法律责任。