Oracle工艺结构
这个过程是动态创建,完毕任务后就消亡;而程序是静态的实体,程序是能够复制、编辑的。进程强调的是运行过程,而程序不过指令的有序集合;进程在内存中,程序在外存中。
ORACLE分为用户进程和ORACLE进程。
l 用户进程
当用户执行一个基于ORACLE数据库的应用程序时,client就会创建一个ORACLE的用户进程(如执行的sqlplus、OEM都叫用户进程)。
用户进程通过连接登录到ORACLEserver,ORACLEserver上就产生一个相应的server进程(Oracleserver的“外交部”);该server进程代表执行在client的用户进程与server通信。
l ORACLE进程
Oracle进程能够分为server进程和后台进程server进程。
² server进程
主要是服务于client的用户进程。server进程又能够分为:专用server进程(仅仅为一个用户进程提供服务)和共享server进程(能够为多个用户进程提供服务)。
² server进程的任务:
A. 解析并运行用户所提交的SQL语句;
B. 搜索SGA区的数据库缓存,决定是否读取数据文件。
假设数据块不在SGA区的数据库缓存中,就将其从数据文件里读入;
C. 将查询运行的结构数据返回给用户。
² 后台进程(BackgroundProcess)
server进程是由后台进程提供支持的。后台进程主要完毕的任务是:
A. 在内存和外存之间进行I/O操作;
B. 监视各个进程的状态;
C. 协调各个进程的任务。
D. 维护系统的性能;
E. 保证系统的可靠性;
可使用下面查询来检查数据库中启动的后台进程个数及其名称
SQL> SELECT * FROM V$BGPROCESS
经常使用的后台进程:
n SMON(SystemMonitor) 系统监视进程:
ü 启动条件:随ORACLE数据库系统启动;执行期间ORACLE能够唤醒SMON进程,以检查是否须要执行它所负责的工作;假设其它不论什么进程须要使用SMON进程的功能时,将随时唤醒SMON进程。
ü 作用:
A、在例程启动时负责对数据库进行恢复。
假设是非正常关闭数据库,则当下次启动例程时。SMON进程会自己主动读取重做日志文件。对数据库进行恢复(即运行将已提交的事务写入数据文件里、回退未提交的事务等操作)。
B、清除已经分配但不再使用的表空间中的暂时段(假设表空间中有大量的盘区。则清除就会花费大量时间,就会影响数据库启动时的性能)
。
C、合并基于数据字典管理的各个表空间中位置相邻的空暇盘区。使之更easy分配。
ü 备注说明:假设某个表空间的存储參数 PCTINCREASE
,则SMON进程就不会对该表空间中的空暇盘区进行合并操作。
n PMON(Process Monitor) 进程监视进程。
ü 启动条件:
A、 须要启动、清除中断或失败的用户进程时(即对ORACLE数据库的连接发生崩溃、挂起或其它非正常终止等);清除操作还包含非正常中断的用户进程留下的孤儿会话。回退未提交的事务。释放会话所占用的锁、SGA区、PGA区的资源。
B、 执行期间ORACLE能够唤醒PMON进程,以检查是否须要执行它所负责的工作;假设其它不论什么进程须要使用PMON进程的功能时,将随时唤醒PMON进程。
C、PMON是在单独的数据库中启动的。而分布式数据库中是RECO
恢复进程来完毕PMON进程的任务的。
ü 作用:
A、 恢复中断或失败的用户进程、server进程;
B、 清除非正常中断的进程留下的孤儿会话;
C、回退未提交的事务。重置活动事务的状态。从系统活动进程中删除用户进程标识号(ID)
;
D、释放进程所占用的各种资源,并通过自己主动回退事务来解决死锁,释放用户所拥有的表和行上的锁;
E、 定期检查server进程和调度进程。假设它们因失败而被异常挂起。则自己主动又一次启动它们。
n DBWn(Database Writer)
数据库写进程。
ü 启动条件
A、当DIRTY列表中的脏缓存块达到一定数量(即初始化參数db_block_write_batch指定值的一半),DBWn进程将脏缓存块写入数据文件(同一时候ORACLE将对控制文件和数据文件的头部的同步序号SCN进行改动,记录下当前数据库的结构和状态,以保证数据库中物理文件之间的同步);
B、当在LRU列表中找到一定数量(即初始化參数db_block_max_scan指定的值)的空暇缓存块,但还不够时,为获得很多其它的空暇缓存块,DBWn进程将脏缓存块写入数据文件;
C、当出现检查点LGWR进程通知DBWn进程进行写操作。
D、一个表空间被置于备份模式、脱机或仅仅读状态时;
秒未启动时。
ü 作用:
A、管理快速缓冲区,保证server进程总能找到空暇缓存块,以便保存从数据文件里读取的数据块;
B、将DIRTY列表中的脏缓存块写入到数据文件里。获取很多其它的空暇缓存块;
C、使用LRU算法将近期正在使用的缓存块即命中块,继续保留在LRU列表中。不必又一次读取数据文件;
D、DBRn进程通过延迟写入来优化磁盘I/O操作,而server进程仅仅在数据快速缓存区中做改动。
ü 备注说明:
个DBWn进程;
B、ORACLE默认启动一个DBWn进程,启动受初始化參数(DB_WRITER_PROCESS)的限制。能够设置初始化參数
DB_BLOCK_CHECKPOINT_BATCH来设置每当出现检查点时。DBWn进程写入的脏缓存块的最大数量。增大该值,能够延长启动DBWn进程的时间间隔。
n LGWR(Log Writer) 日志写进程;
ü 启动条件:
A、用户进程通过COMMIT语句提交当前事务;
B、重做日志快速缓存被写满1/3时,或含有1MB的重做信息时;
C、DBWn进程须要为检查点清除脏缓存块,即将脏缓存块写入数据文件时;
秒为启动LGWR进程时。
ü 作用:
A、负责管理重做日志快速缓冲区,即将重做日志记录从快速缓存区写入到重做日志文件;
B、假设例程没有启动CKPT检查点进程,则LGWR进程就来完毕检查点运行任务。
ü 备注说明:
A、 每一个例程仅仅有一个LGWR进程;
B、 LGWR进程先于DBWn进程启动。
n CKPT (CheckPoint)
检查点进程
ü 启动条件:
A、 关闭数据库时;
B、 一个重做日志文件被写满而产生日志切换时;
C、满足參数 LOG_CHECKPOINT_TIMEOUT(指定检查点之间的时间间隔(以秒为单位));
D、參数 LOG_CHECKPOINT_INTERVAL(指定当一定数量的操作系统数据块(非ORACLE数据块)被写入重做日志文件时,将触发一个检查点)
ü 作用:
A、 触发DBWn进程。使其将自上一个检查点之后的所有已经改动的数据块(脏缓存块)写入数据文件里。
B、 保持数据库快速缓冲区与数据文件之间数据同步(用最新的检查点信息更新控制文件和数据库文件的文件头);
C、检查点信息会在恢复数据库期间使用。当SMON进程恢复数据库时,SMON会决定最后在数据文件里的检查点。(必须将数据文件的文件头和控制文件里最后记录的检查点之后的联机重做日志文件里的事务编号又一次提交到数据文件里。)
ü 备注说明:
A、不要设置不必要的检查点,或迫使不须要的检查点发生。
B、缩短检查点运行的间隔,能够缩短数据库恢复时所需的时间。
C、假设检查点运行的间隔短。将会产生过多的I/O操作;
D、应该使LOG_CHECKPOINT_INTERVAL
设置的操作系统块数与重做日志文件的大小相匹配。
ü ORACLE在不同的时刻运行不同级别的检查点。故检查点有可分为 4
种:
A、 数据库检查点:每一次重做日志文件切换时都运行数据库检查点。使用NORMAL\TRANSACTIONAL\IMMEDIATE选项关闭数据库时,会运行一个检查点;此时DBWn进程将数据快速缓存区中的全部脏缓存块都写入数据文件里。
B、 表空间检查点:将一个表空间设置为脱机状态或备注为BACKUP模式,会运行一个表空间检查点。此时DBWn仅仅会将快速缓存区中的与该表空间相关的脏缓存块写入数据文件里。
C、手动检查点:使用 ALTER SYSTEM CHECKPOINT
语句来手动设置一个检查点。
D、时间检查点:即每隔多久运行一次检查点。能够通过调整(LOG_CHECKPOINT_TIMEOUT和LOG_CHECKPOINT_INTERVAL)參数来改变检查点实行的间隔。
n ARCn(Archiver)
归档进程。
ü 启动条件:
发生重做日志切换时(必须是归档模式下,而且初始化參数 LOG_ARCHIVE_START
为 TRUE
,假设在归档模式下该參数是FALSE当重做日志文件所有写满,数据库将会被挂起。
)
ü 作用:避免数据库崩溃无法恢复。
ü 备注说明:
A、一个例程默认仅仅会启动一个归档进程ARCn,当ARCn正在归档一个重做日志文件时,不论什么其它进程都不能訪问这个重做日志文件。
个ARCn。
C、初始化參数 LOG_ARCHIVE_DEST
指定了归档日志文件所在的位置;LOG_ARCHIVE_FORMAT指定了归档日志文件的命名格式规则。
n RECO(Recoverer)
恢复进程
n LCKn(Lock)
锁进程
n RVWR(Recovery Writer)
闪回恢复进程
n CTWR(Change Tracking Writer)
闪回变化跟踪写进程
n CJQn(Job Queue Monitor)
作业队列监视进程
n Jnnn(Job Queue)
作业队列进程
n Dnnn(Dispatcher)
调度进程
n Snnn(Shared Server) 共享server进程
² 综合案例
案例:查询后台进程的编号。名称和描写叙述。
col spid format a10;
col name format a10;
col description formata30;
select p.spid, b.name,b.description from v$bgprocess b, v$process p where p.addr=b.paddr;
案例:查询
col spid format a10;
col username formata10;
col terminalformat a10;
col program format a10;
select spid, username,terminal, program from v$process;
案例:查看用户进程情况。
Username表示username,process记录操作系统进程号。
1) 执行cmd,输入sqlplus/nolog。输入conn / as sysdba;建立连接1。
2) 在sqlplus中运行以下命令:
col username formata10;
col process format a10;
col machine format a10;
col program format a10;
select username,process, machine, program from v$session where username is not null;
3) 执行cmd,输入sqlplus/nolog。输入conn scott/tiger as sysdba。建立连接2。
4) 在第一步建立的连接1中再运行以下的命令:
select username,process, machine, program from v$session where username is not null;
5) 控制以上两个查询的结果。