Oracle由实例和数据库组成,上半部的直角方框为实例instance,下半部的圆角方框为数据库Database。
实例是由一个共享内存区SGA(System Global Area)和一系列后台进程组成的,其中SGA主要被划分为共享池(shared pool)、数据缓存区(db cache)和日志缓存区(log buffer)三类。
后台进程包括PMON、SMON、LCKn、RECO、CKPT、DBWR、LGWR、ARCH等系列进程。
数据库是由数据文件、参数文件、日志文件、控制文件、归档日志文件等一系列文件组成的,其中归档日志最终可能会被转移到新的存储介质中,用于备份恢复使用。
PGA(Program Global Area)区,这也是一块内存区,和SGA最明显的区别在于,PGA不是共享内存,是私有不共享的。用户对数据库发起的无论查询还是更新的任何操作,都先在PGA进行预处理,然后才进入实例区域,由SGA和后台进程共同完成。
PGA 起到的具体作用主要有三点:
第一,保存用户的连接信息,如会话属性、绑定变量等;
第二,保存用户权限等重要信息,当用户进程与数据库建立会话时,系统会将这个用户的相关权限查询出来,然后保存在这个会话区内;
第三,当发起的指令需要排序的时候,PGA(Program Global Area)正是这个排序区,如果在内存中可以放下排序的尺寸,就在内存PGA区内完成,如果放不下,超出的部分就在临时表空间中完成排序,也就是在磁盘中完成排序。