系统全局区又称SGA(SGA)等一定的内存和ORACLE后台进程组成了ORACLE实例(Instance) ,而数据库(Database)指的是数据库物理文件。oracle五个必须的ORACLE后台进程有是什么?以及什么是SGA?下面做如下详细介绍。
(1)五个必须的ORACLE后台进程:SMON、PMON、DBWn、CKPT、LGWR
系统监控进程(System Monitor SMON) 在数据库系统启动时执行恢复工作的强制性进程
进程监控进程(Process Monitor PMON) 用于恢复失败的数据库用户的强制性进程,它先获取失败用户的标识,释放该用户占有的所有数据库资源。
数据库写入进程(Database Writer, DBWn) 它将修改后的数据块写回数据库文件。日志写入进程(Log Writer , LGWR) 一个专门用于将重做项写入重做日志的进程。
校验点进程(Checkpoint Process CKPT ) ORACLE把内存中脏数据块中的信息写回磁盘的判断进程。
(2)什么是SGA?
系统全局区又称SGA (System Global Area 也称 Shared Global Area) 是Oracle Instance的 基本组成部分,在实例启动时分配。是一组包含一个Oracle实例的数据和控制信息的共享内存结构。主要是用于存储数据库信息的内存区,该信息为数据库进程所共享(PGA不能共享的)。它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
SGA重要组成的三部分
共享池(Shared Pool) 主要用来存储最近执行过的SQL语句和最近使用过的数据字典的数据;它主要通过INIT.ORA文件中的shared_pool_size和shared_pool_reserved_size两个参数来设置。
数据高速缓存区(Data Buffer Cache) 主要用来存储最近使用过的数据,可能是要写到数据文件的,也可能是从数据文件读取的;它主要通过INIT.ORA文件中db_block_buffers参数来设置;Data Buffer的大小=db_block_buffers* db_block_size;
重做日志缓存区(Redo Log Buffer) 主要存储服务进程和后台进程的变化信息;它主要通过INIT.ORA文件中的log_buffer参数来设置; Redo Log Buffer的大小=log_buffer* db_block_size;
当然,SGA不仅仅只是上面的三部分,还包括如Java pool(用来存储java代码)、Large pool(供不是和SQL直接相关的进程使用,如:当数据备份或恢复操作时,RMAN backup 用作磁盘I/O缓存器;Parallel时用作消息缓存器;MTS回话内存)等部分,我们可以通过v$sysstat、v$rowcache、v$librarycache等系统视图来监控SGA。