我们知道Oracle实例Instance由系统全局区SGA和一些后台进程background Process组成,SGA又由Database buffer cache,Redo log buffer,Shared Pool(它包括Libaray cache和Data dictionary cache),和可选的Large pool,Java pool构成。
Oracle通常把最常用的block块缓存起来,以备其他用户重用以提高性能。Database buffer cache将常用的block读到自己里面来,以备重用,同时它也把将要写入的数据缓存起来,等到合时的时候一并写入到disk中的数据文件中,这样可以提高系统性能。当我们的Instance失败(比如:断电,系统突然死机导致Instance失败),在SGA中的数据就可能有没有写入到disk中的datafile之中。下次启动open oracle的时候,SMON就开始发挥它的作用对Instance进行Recovery了。
数据的更改已经记录到了online redo log file之中,但是还没有来的及提交,instance失败了,导致Database buffer cache之中的数据丢失了。启动oracle的时候,SMON从online redo log file之中读取修改的记录然后将这些更新到数据库的block之中。
打开数据库以便用户可以登录
回退未提交的事务处理。它们由SMON 回退,或在访问锁定的数据时由单个服务器
进程回退。
SMON 也执行一些空间维护功能:
• 它联合或合并数据文件中空闲空间的邻近区域。
• 它回收临时段,将它们作为数据文件中的空闲空间返回。
清理临时表空间:伴随这“真正”的临时表空间的出现,清理临时表空间的杂事已经减轻了,但它还没完全消失。例如,当建立一个索引,在创建期间分配给索引的扩展区被标志为TEMPORARY。如果Create Index会话因某些原因异常中断,SMON负责清理他们。其他操作创建的临时扩展区,SMON同样会负责。
接合空闲空间:如果你正使用数据字典管理表空间,SMON负责把那些在表空间中空闲的并且互相是邻近的extent接合成一个较大的空闲扩展区。这发生仅在带有默认的pctincrease设置为非零的存储子句的字典管理表空间。
PMON进程:该进程在用户进程出现故障时执行进程恢复,负责清理内存储区和释
放该进程所使用的资源。例:它要重置活动事务表的状态,释放封锁,将该故障
的进程的ID从活动进程表中移去。PMON还周期地检查调度进程(DISPATCHER)和
服务器进程的状态,如果已死,则重新启动(不包括有意删除的进程)。
PMON有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。
SMON进程:该进程实例启动时执行实例恢复,还负责清理不再使用的临时段。在
具有并行服务器选项的环境下,SMON对有故障CPU或实例进行实例恢复。SMON进程
有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。