业精于勤 荒于嬉 行成于思 毁于随!
最近忙着杂七杂八的事情,也就给自己找了借口不来更新,特此用这句话作为警示语。
好了,废话不多说,今天就主要来学习下Oracle的几个重要的后台进程的作用。
这个,顺序就随便写了,按照我的记忆来吧。
SMON:系统监视进程----system monitor
两个主要的功能
1. 用于整理各个表空间在DML操作时所产生的碎片,跟表空间的参数PCTINCREASE有关,如果这个值为0,那么smon则无法对该表空间进行随便整理,那么此表空间里面的对象会因为没有足够连续可用的空间而无线扩大,但是整个对象里面的剩余空间很多只是不连续,这样会造成很大的浪费,而smon则用于整理这些碎片,在DML,DDL操作的时候smon会被唤醒。
2.用于在数据库启动的时候检测数据库的状态以决定数据库是否需要恢复。
这个也是smon最重要的一个功能了.
ARCH:归档进程
说到归档进程,首先要说下数据库的两个模式
非归档(NO ARCH)和归档(ARCH)
我们知道,数据库有一个或者多个联机日志组,用以记录对数据库所进行的修改操作,每一次commit或者rollback视为一次事务的结束,其对应的数据块并不一定在事务完成后被写入数据文件,但是所进行的修改日志一定会被写入联机日志文件,这样不管什么时候数据库崩溃,你对数据库所做的操作都能通过联机日志来进行恢复。
在非归档模式下,所有的联机日志在进行了一个大循环下,第一个日志组会被覆盖,理论上,非归档模式下,数据库只能进行实例恢复而不能进行介质恢复,也就是跨越联机日志组的恢复。一般只有不太重要的数据库才会运行在非归档模式下。
在归档模式下,当数据库从一个日志组切换到另外一个日志组时,除了会把该日志组对应的脏数据写入数据文件之外,还会把该联机日志复制到归档目录下,只是在arch没有完成归档前,数据库会暂时hung住,不过这个可以通过增加归档日志来解决,一般也就是几十秒左右的事。
在归档模式下,通过rman备份,理论上可以进行不完全恢复到当前数据库之前的任意一个时间点,这个正是Oracle的强大之处。
DBWR:数据块写进程
用于将内存中的脏数据写入数据文件中,以更新数据文件,使得内存中的数据与物理文件中的数据一致,在以下的情况中被调用:
1.完全检查点进程发生(数据库除abort的其他三种关闭,以及联机日志组切换)
2.buffer_cache中脏数据块达到一定的比例
3. 3秒等待超时
4.当需要空闲块时,在LRU list上查找了1/N链的长度后还没找到空闲块
5. alter tablespace xxx read only;
6.alter tablespace offline;
7.alter tablespace backup on;
LGWR:日志文件写进程
用于将内存里面的redo_buffer写入到联机日志文件中,用以保证用于所进行的提交不丢失数据。
以下情况会触发LGWR:
1.每隔3秒
2.redo_buffer 1/3满
3.redo_buffer达到1MB
4. DBWR触发
5.检查点进程触发
6. 3秒超时
7. commit
CKPT:检查点进程
用于更新控制文件的各种重要信息以及数据文件头的SCN,使得数据库一致。
其分为增量检查点和完全检查点。
其中增量检查点只更新控制文件的信息,每3秒触发一次,如果有信息需则更新,没有则进入睡眠。
完全检查点除了更新控制文件的当前SCN外,还会更新数据文件头部的SCN使得整个数据库一致,可以说只要完全检查点触发,那么数据库就会一致。
在日志切换以及除shutdown abort外的其他三种关机模式下会触发完全检查点。
PMON:程序监视进程
用于恢复失败的用户连接,通过用户进程的ID,来释放该进程所持有的资源。
最近忙着杂七杂八的事情,也就给自己找了借口不来更新,特此用这句话作为警示语。
好了,废话不多说,今天就主要来学习下Oracle的几个重要的后台进程的作用。
这个,顺序就随便写了,按照我的记忆来吧。
SMON:系统监视进程----system monitor
两个主要的功能
1. 用于整理各个表空间在DML操作时所产生的碎片,跟表空间的参数PCTINCREASE有关,如果这个值为0,那么smon则无法对该表空间进行随便整理,那么此表空间里面的对象会因为没有足够连续可用的空间而无线扩大,但是整个对象里面的剩余空间很多只是不连续,这样会造成很大的浪费,而smon则用于整理这些碎片,在DML,DDL操作的时候smon会被唤醒。
2.用于在数据库启动的时候检测数据库的状态以决定数据库是否需要恢复。
这个也是smon最重要的一个功能了.
ARCH:归档进程
说到归档进程,首先要说下数据库的两个模式
非归档(NO ARCH)和归档(ARCH)
我们知道,数据库有一个或者多个联机日志组,用以记录对数据库所进行的修改操作,每一次commit或者rollback视为一次事务的结束,其对应的数据块并不一定在事务完成后被写入数据文件,但是所进行的修改日志一定会被写入联机日志文件,这样不管什么时候数据库崩溃,你对数据库所做的操作都能通过联机日志来进行恢复。
在非归档模式下,所有的联机日志在进行了一个大循环下,第一个日志组会被覆盖,理论上,非归档模式下,数据库只能进行实例恢复而不能进行介质恢复,也就是跨越联机日志组的恢复。一般只有不太重要的数据库才会运行在非归档模式下。
在归档模式下,当数据库从一个日志组切换到另外一个日志组时,除了会把该日志组对应的脏数据写入数据文件之外,还会把该联机日志复制到归档目录下,只是在arch没有完成归档前,数据库会暂时hung住,不过这个可以通过增加归档日志来解决,一般也就是几十秒左右的事。
在归档模式下,通过rman备份,理论上可以进行不完全恢复到当前数据库之前的任意一个时间点,这个正是Oracle的强大之处。
DBWR:数据块写进程
用于将内存中的脏数据写入数据文件中,以更新数据文件,使得内存中的数据与物理文件中的数据一致,在以下的情况中被调用:
1.完全检查点进程发生(数据库除abort的其他三种关闭,以及联机日志组切换)
2.buffer_cache中脏数据块达到一定的比例
3. 3秒等待超时
4.当需要空闲块时,在LRU list上查找了1/N链的长度后还没找到空闲块
5. alter tablespace xxx read only;
6.alter tablespace offline;
7.alter tablespace backup on;
LGWR:日志文件写进程
用于将内存里面的redo_buffer写入到联机日志文件中,用以保证用于所进行的提交不丢失数据。
以下情况会触发LGWR:
1.每隔3秒
2.redo_buffer 1/3满
3.redo_buffer达到1MB
4. DBWR触发
5.检查点进程触发
6. 3秒超时
7. commit
CKPT:检查点进程
用于更新控制文件的各种重要信息以及数据文件头的SCN,使得数据库一致。
其分为增量检查点和完全检查点。
其中增量检查点只更新控制文件的信息,每3秒触发一次,如果有信息需则更新,没有则进入睡眠。
完全检查点除了更新控制文件的当前SCN外,还会更新数据文件头部的SCN使得整个数据库一致,可以说只要完全检查点触发,那么数据库就会一致。
在日志切换以及除shutdown abort外的其他三种关机模式下会触发完全检查点。
PMON:程序监视进程
用于恢复失败的用户连接,通过用户进程的ID,来释放该进程所持有的资源。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22166274/viewspace-667366/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22166274/viewspace-667366/