高速缓存区存放着oracle系统最近访问过的数据块,用户发起请求时会首先在高速缓存区中查找,找不到时会将数据从数据文件中读出来,放入高速缓存区中,再返回给用户,高速缓存区包括前端和后端,将那些经常被访问的数据库放在前端,而不太活跃的就放在后端,当缓存区空间不够时,则首先会将后端的数据库清除出去。高速缓存区包含下面几部分:脏数据区,空闲区和保留区,脏数据区存放被修改过的数据,这些数据通过DBWR进程写入数据文件,空闲区的数据不包含任何数据,这些数据块可以别写入数据,用来存放从数据文件读出的数据。保留区则存放着那些正在被用户访问的数据块和明确保留以作为将来使用的数据库。
重做日志缓存区用于存放记录oracle系统进行修改操作的日志信息,这些日志信息由LGWR写入重做日志组,重做日志缓存区的大小由LOG_BUFFER参数决定。
共享池:包括库高速缓冲区和字典高速缓冲区。库高速缓冲区分为共享SQL区和私有SQL区,共享SQL区存放每条被缓存的sql语句中的语法分析结果和执行结果,私有SQL区存放用户信息,包括sql语句的绑定变量,环境和会话等信息,这些属于用户私有的信息,不能被共享访问。字典高速缓冲区则存放着系统内部管理所需要的数据字典信息,例如用户名,数据对象和权限等。共享池的大小由SHARED_POOL_SIZE参数决定
程序全局区(PGA)又称用户进程全局区,它是不共享的,包含私有SQL区和会话区,私有SQL区用于存储变量和SQL语句运行时的内存结构信息,该区域和SGA中的共享SQL区共同组成SQL语句的完整缓存数据,私有SQL区又分为静态区和动态区,静态区的信息在会话中保持不变,会话结束被释放,动态去的信息是不断变化的,在sql语句执行完成就被释放。会话区用于存放用户的会话信息,比如登入用户名等,注:在共享服务器模式下,会话区位于SGA区域而不是PGA区域
前台进程由用户进程和服务进程组成,用户进程指的是那些能够产生或者执行sql语句的应用程序,它有连接和会话两种状态。服务进程是处理用户会话过程中发出的sql语句或者sql*plus命令,服务进程分专有服务器模式和共享服务器模式。专有服务器的每个用户都有对应的服务进程,而共享服务模式这是有分派程序来处理这些用户进程的连接,每个分派程序可以连接多个用户进程。
后台进程主要的是:DBWR,CKPT,LGWR,PMON,SMON这5个,实例启动,这5个进程就必须启动,如果有进程没能成功起来则实例也启动失败。(里面补充介绍了ARCH进程)
DBWR:数据写入进程,负责将脏数据写入数据文件,当缓冲区满了或者CKPT进程启动,或者数据在缓冲区存放超过3秒钟都会触发DBWR进程,spfile的DB_WRITER_PROCESSES参数可以控制DBWR进程的数量
CKPT:检查点进程,CKPT是一个事件当其发生触发DBWR,当发生日志切换时会触发CKPT,spfile的CHECKPOINT_PROCESS参数可以设置CKPT的状态
LGWR:日志写入进程,用户修改会产生日志信息,这些信息会先写入重做日志缓冲区,当发生提交命令或者重做日志缓冲区的信息满1/3或者日志信息存放超过3秒钟或者DBWR正要执行写之前时由LGWR将其从重做日志缓冲区读出并写入重做日志文件中,LGWR写满一个日志组会切换下一个日志组并覆盖其中的内容,
ARCH:归档进程,归档模式下,当日志组写满被覆盖前,先由ARCH进程将其读出写入归档日志文件中(数据文件),可以调整LOG_ARCHIVE_MAX_PROCESSES参数启动多个ARCH进程,来避免因写入速度慢而倒是LGWR进程处于等待状态。
PMON:进程监控进程,监控其他进程状态,当有进程启动失败时,PMON会清除失败的用户进程,释放资源
当然oracle系统启动的时候会启动200多个后台进程,可以通过查看V$bgprocesses表来查看这些进程的信息。