Oracle体系结构全面介绍(1)(2)
2.程序全局区(PGA)。
程序全局区(PGA,ProgramGlobalArea)是存储区中的一个区域,由一个Oracle用户进程所使用,PGA中的内存不能共享。
3.环境区
4.后台进程
数据库拥有多个后台进程,其数量取决于数据库的配置。这些进程由数据库管理,它们只需要进行很少的管理。每个后台进程创建一个跟踪文件。在实例操作期间保存跟踪文件。后台进程跟踪文件的命名约定和位置随操作系统和数据库版本而不同。一般来说,跟踪文件含有后台进程名或后台进程的操作系统进程ID。可以设置初始化参数文件的BACKGROUND_DUMP_DEST参数来规定后台进程跟踪文件的位置,但是有些版本的Oracle忽略这种设置。排除数据库故障时,跟踪文件就显得非常重要。影响后台进程的严重问题通常记录在数据库的警告日志上。警告日志通常位于BACKGROUND_DUMP_DEST目录下。一般来说,这个目录是ORACLE_BASE目录下的/ADMIN/INSTANCE_NAME/BDUMP目录。
1)SMON
当启动一个数据库时,SMON(SystemMonitor,系统监控程序)进程执行所需的实例恢复操作(使用联机重做日志文件),它也可以清除数据库,取消系统不再需要的事务对象。SMON的另一个用途是:将邻接的自由盘区组成一个较大的自由盘区。对于某些表空间,数据库管理员必须手工执行自由空间合并;SMON只合并表空间中的自由空间,这些表空间的缺省pctincrease存储值为非零。
2)PMON
PMON(进程监控程序)后台进程清除失败用户的进程,释放用户当时正在使用的资源。当一个持有锁的进程被取消时,其效果是显而易见的,PMON负责释放锁并使其可以被其他用户使用。同SMON一样,PMON周期性地唤醒检测它是否需要被使用。
3)DBWR
DBWR(数据库写入程序)后台进程负责管理数据块缓存区及字典缓存区的内容。它以批方式把修改块从SGA写到数据文件中。
尽管每一个数据库实例只有一个SMON和一个PMON进程在运行,但是根据平台和操作系统的不同,用户可以同时拥有多个DBWR进程。使用多个DBWR进程有助于在进行大的操作期间减少DBWR中的冲突。所需DBWR进程的数量由数据库的init.ora文件中的DB_WRITER_PROCESSES参数决定。如果系统支持异步I/O,可以用多个DBWRI/O从(slave)进程创建一个DBWR进程。DBWRI/O从进程的数量由init.ora文件的DBWR_I/O_SLAVES参数设置。
如果创建多个DBWR进程,这些进程就不叫做DBWR,它们将有一个数字分量。例如,如果创建5个DBWR进程,进程的操作系统名就可能是DBW0、DBW1、DBW2、DBW3和DBW4。
4)LGWR
LGWR(日志写入程序)后台进程负责把联机重做日志缓冲区的内容写入联机重做日志文件。LGWR分批将日志条目写入联机重做日志文件。重做日志缓冲区条目总是包含着数据库的最新状态,这是因为DBWR进程可以一直等待到把数据块缓冲区中的修改数据块写入到数据文件中。
LGWR是数据库正常操作时唯一向联机重做日志文件写入内容并从重做日志缓冲区直接读取内容的进程。与DBWR对数据文件执行的完全随机访问相反,联机重做日志文件以序列形式写入。如果联机重做日志文件是镜像文件,LGWR同时向镜像日志文件中写内容。
对于Oracle8,可以创建多个LGWRI/O从进程以改善向联机重做日志文件的写入性能,其个数由数据库的init.ora文件的LGWR_IO_SLAVES参数决定。
在Oracle8i中,这个参数已不能用,LGWRI/O从进程由DBWR_IO_SLAVES设置值派生
而来。
5)CKPT
CKPT(检查点进程)用来减少执行实例恢复所需的时间。检查点使DBWR把上一个检查点以后的全部已修改数据块写入数据文件,并更新数据文件头部和控制文件以记录该检查点。
当一个联机重做日志文件被填满时,检查点进程会自动出现。可以用数据库实例的init.ora文件中的LOG_CHECKPOINT_INTERVAL参数来设置一个频繁出现的检查点。
CKPT后台进程把早期数据库版本中LGWR的两个功能(向检查点发信号及复制日志内容)分成两个后台进程。当数据库实例的init.ora文件中的CHECKPOINT_PROCESS参数被设置为TRUE时,就可以建立CKPT后台进程。
6)ARCH
LGWR后台进程以循环方式向联机重做日志文件写入;当填满第一个日志文件后,就开始向第二个日志文件写入;第二个日志文件填满后,再向第三个日志文件写入。一旦最后一个重做日志文件填满,LGWR就开始重写第一个重做日志文件的内容。
当Oracle以ARCHIVELOG(归档日志)模式运行时,数据库在开始重写重做日志文件之前先对其进行备份。这些归档的重做日志文件通常写入一个磁盘设备中。也可以直接写入磁带设备中,但是这往往要增加操作员的劳动强度。
这种归档功能由ARCH(归档进程)后台进程完成,利用该性能的数据库在处理大数据事务时将遇到重做日志磁盘冲突问题,这是因为当LGWR准备写入一个重做日志文件时,ARCH正准备读取另一个。如果归档日志目标磁盘写满,数据库还将遇到数据库锁定问题。此时,ARCH冻结,禁止LGWR写入;从而禁止在数据库中出现进一步的事务处理;这种情况一起延续到归档重做日志文件的空间清空为止。
对于Oracle8,可以创建多个ARCHI/O从进程以改善对归档重做日志文件的写入功能。在Oracle8.0中,ARCHI/O从进程的个数由数据库的init.ora文件中的ARCH_IO_SLAVES参数决定。在Oracle8i中,这个参数已不能用,ARCH_IO_SLAVES设置值由DBWR_IO_SLAVES设置值派生。
7)RECO
RECO(恢复进程)后台进程用于解决分布式数据库中的故障问题。RECO进程试图访问存在疑问的分布式事务的数据库并解析这些事务。只有在平台支持DistributedOption(分布式选项)且init.ora文件中的DISTRIBUTED_TRANSACTIONS参数大于零时才创建这个进程。
8)SNPn
Oracle的快照刷新及内部作业队列调度依赖于它们执行的后台进程(快照进程)。这些后台进程的名字以字母SNP开头,以数字或字母结束。为一实例所创建的SNP进程的个数由数据库的init.ora文件中的JOB_QUEUE_PROCESSES参数决定(在Oracle7中,该参数名为SNAPSHOT_REFRESH_PROCESSES)。
9)LCKn
当采用Oracle并行服务器选项时,多个LCK(锁定进程)后台进程(命名为LCK0~LCK9)用于解决内部实例的锁定问题。LCK进程的个数由GC_LCK_PROCS参数决定。
10)Dnnn
Dnnn(调度程序进程)是MTS结构的一部分;这些进程有助于减少处理多重连接所需要的资源。对于数据库服务器支持的每一个协议必须至少创建一个调度程序进程,调度程序进程根据SQL*Net(或Net8)的配置在数据库启动时创建,在数据库打开后可以创建或取消。
11)Snnn
创建Snnn(服务器进程)来管理需要专用服务器的数据库连接。服务器进程可以对数据文件进行I/O操作。
12)Pnnn
如果启动数据库中的并行查询选项,一个查询的资源要求可以分布在多个处理器中。当实例启动由init.ora文件的PARALLEL_MIN_SERVERS参数确定时,指定数目的并行查询服务器进程就启动。每一个这样的进程都将出现在操作系统级。需要并行操作的进程越多,启动的并行查询服务器进程就越多。每个并行查询服务器进程在操作系统级将有一个P000、P001、P002这样的名字。并行查询服务器进程的最大数量由init.ora文件的PARALLEL_MAX_SERVERS参数确定。



