oracle数据库:Oracle进程_笔记5
现在来看我们感兴趣的各个主进程完成的功能,首先从主要的Oracle后台进程开始。
1.PMON:进程监视器
进程监视器(Process Monitor)负责在出现异常中止的连接之后完成清理。例如,如果专用服务器“失败”或者出于某种原因被撤销,就要由PMON进程负责修正(恢复或撤销工作),并释放资源。PMON会回滚未提交的工作,并释放为失败进程分配的SGA资源。
除了出现异常连接后完成清理外,PMON还负责监视其他的Oracle后台进程,并在必要时(如果可能的话)重启这些后台进程。如果一个共享服务器或调度程序失败(崩溃),PMON会介入,并重启另一个共享服务器或调度程序(对失败进程完成清理之后)。PMON会查看所有Oracle进程,可能重启这些进程,也可能适当地终止实例。例如,如果数据库日志写入器进程(LGWR)失败,就最好让实例失败。这是一个严重的错误,最安全的做法就是立即终止实例,并根据正常的恢复来修正数据。
PMON还会为实例做另一件事,这就是向Oracle TNS监听器注册这个实例。实例启动时,PMON进程会询问公认的端口地址(除非直接指定),来查看是否启动并运行了一个监听器。Oracle使用的公认/默认端口是1521。如果此时监听器在另外某个端口上启动会怎么样呢?在这种情况下,原理是一样的,只不过需要设置LOCAL_LISTENER参数来显示式地指定监听器地址。如果数据库实例启动时有监听器在运行,PMON会与这个监听器主,并向它传递相关的参数,如服务名和实例的负载度量等。如果监听器未启动,PMON则会定期地试图与之联系来注册实例。
2.SMON:系统监视器
SMON进程,系统监视器(System Monitor)要完成所有“系统级”任务。PMON感兴趣的是单个的进程,而SMON与之不同,它以系统级为出发点,这是一种数据库“垃圾收集器”。SMON所做的工作包括以下几种。
.清理临时空间:原先清理临时空间这样的杂事都要由我们来完成,随着引入了“真正”的临时表空间,这个负担已经减轻,但并不是说完全不需要清理临时空间。例如,建立一个索引时,创建时为索引分配的区段标记为TEMPORARY。如果出于某种原因CREATE INDEX会话中止了,SMON就要负责清理。其他操作创建的临时区段也要由SMON负责清理。
.合并空闲空间:如果你在使用字典管理的表空间,SMON要负责取得表空间中相互连续的空闲区段,并把它们合并为一个更大的空闲区段。只有当字典管理的表空间有一个默认的存储子句,而且pctincrease设置为一个非0值时,才会出现空闲空间的合并。
.针对原来不可用的文件恢复活动的事务:这类似于数据库启动时SMON的作用。在实例/崩溃恢复时由于某个文件(或某些文件)不可用,可能会跳过一些失败的事务(即无法恢复),这些失败事务将由SMON来恢复。例如,磁盘上的文件可能不可用或者未装载,当文件确实可用时,SMON就会由此恢复事务。
.执行RAC中失败节点的实例恢复:在一个Oracle RAC配置中,集群中的一个数据库实例失败时(例如,实例所在的主机失败),集群中的另外某个节点会打开该失败实例的重做日志文件,并为该失败实例完成所有数据的恢复。
.清理OBJ$:OBJ$是一个低级数据字典表,其中几乎对每个对象(表、索引、触发器、视图等)都包含珍上条目。很多情况下,有些条目表示的可能是已经删除的对象,???或者表示“not there”对象(“not there”对象是Oracle依赖机制中使用的一种对象)。要由SMON进程来删除这些不再需要的行。
.收缩回滚段:如果有设置,SMON会自动将回滚段收缩为所设置的最佳大小。
.“离线”回滚段:DBA有可能让一个有活动事务的回滚段离线(offline),或置为不可用。也有可能活动事务会使用离线的回滚段。在这种情况下,回滚段并没有真正离线;它只是标记为“将要离线”。在后台,SMON会定期尝试真正将其置为离线,直至成功为止。
除此之外,它还会做许多其他的事情,如将DBA_TAB_MONITORING视图中的监视统计信息刷新输出,将SMON_SCN_TIME表中的SCN-时间戳映射信息刷新输出,等等。随着时间的推移,SMON进程可能会累积地占用大量CPU时间,这应该是正常的,SMON会定期醒来(或者被其他后台进程唤醒),来执行这些维护工作。
http://www.52ij.com/jishu/5178.htmlOracle进程_笔记3:专用/共享服务器小结
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5179.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
