一、Oracle服务器主要组成
- 实例(系统全局区SGA、后台进程)
- 数据库
- 程序全局区(PGA)
- 前台进程
二、系统全局区SGA
1.高速数据缓冲区
用来存放Oracle系统最近访问过的数据块,经常或者最近被访问的数据块会被放置到高速数据缓冲区的前端,不经常被访问的会被放置到后端
2.共享池
存储最近执行过的SQL语句和最近使用过的数据定义
共享池的大小由SHARE_POOL_SIZE
决定
共享池包含:
库高速缓冲区:包含SQL语句文本,分析代码和执行计划
字典高速缓冲区:包含表,列和其他对象定义和权限
3.Redo buffer(重做日志缓冲区)
跟踪服务器和后台进程对数据库所做的更改,它的字节大小由LOG_BUFFER 参数定义。记录被更改的块、更改位置以及重做条目中的新值;重做条目不区分被更改块的类型,它只记录块中哪些字节发生了更改。重做日志缓冲区连续使用,而且一个事务处理所做的更改可能会与其它事务处理的更改交叉存取;它是在已满后可以重新使用的循环缓冲区,但是只有在所有旧的重做条目都记录在重做日志文件之后才能使用。
COMMIT提交处理:
服务器进程随同系统更改号(SCN)一起在重做日志缓冲区中放置一个提交记录。
LGWR 向重做日志文件中连续写入直到提交记录含提交记录的所有重做日志缓冲区条目。这之后,Oracle 服务器就能够保证即使存在实例失败也不会丢失更改。
通知用户COMMIT 命令已完成。
服务器进程记录信息以指出事务处理已完成并且可以释放资源锁。
4.大共享区
存储不与SQL语句处理直接相关的大型内存结构,如在备份和还原操作中复制的数据块。
5.固定SGA
存储Java代码
三、用户进程全局区-PGA
又称程序全局区,可以把代码、全局变量和数据结构都存储在其中,每个Oracle服务器进程只拥有自己的那部分PGA资源
PGA包含:
私有SQL区
会话区
四、服务器进程
处理用户会话过程中的SQL语句和SQL Plus命令
五、后台进程
1.数据库写入程序(DBW0)
数据库写入程序将灰数据缓冲区从数据库缓冲区高速缓存写入数据文件。它确保有足够数量的空闲缓冲区(即当服务器进程需要读取数据文件中的块时可以覆盖的缓冲区) 在数据库缓冲区高速缓存中可用。由于服务器进程只在缓冲区高速缓存中进行更改,因此数据库性能得到改善,而且DBW0 延迟写入数据文件直到发生下列事件之一:
- 灰数据缓冲区的数量达到阈值
- 当进行扫描而无法找到任何空闲缓冲区时进程扫描了指定数量的块
- 出现超时(每三秒)
- 出现检查点(检查点是使数据库缓冲区高速缓存与数据文件同步的一种方法)
2.日志写入程序(LGWR)
将重做日志缓冲区中注册的更改写入重做日志文件。
LGWR 在下列情况下执行从重做日志缓冲区到重做日志文件的连续写入:
当提交事务处理时
当重做日志缓冲区的三分之一已满时
当重做日志缓冲区中记录了超过1 MB 的更改时
在 DBW0 将数据库缓冲区高速缓存中修改的块写入数据文件以前因为恢复操作需要重做,所以LGWR 只在重做写入磁盘后确认COMMIT 命令
3.系统监控程序(SMON)
检查数据库的一致性.果Oracle 实例失败,那么SGA 中尚未写入磁盘的所有信息都会丢失。实例丢失后,后台进程SMON 在数据库重新打开时自动执行实例恢复。恢复实例需要进行以下步骤:
前滚以恢复尚未记入数据文件但已经记入联机重做日志中的数据。由于实例失败过程中SGA 的丢失,这些数据尚未写入磁盘。在这个进程中,SMON 读取重做日志文件并将重做日志中记录的更改应用到数据块中。由于所有提交的事务处理都已被写入重做日志,因此该进程完全恢复这些事务处理。
打开数据库以允许用户登录。未被未恢复事务处理锁定的任何数据都立即可用。
回退未提交的事务处理。它们由SMON 回退,或在访问锁定的数据时由单个服务器进程回退。
SMON 也执行一些空间维护功能:
联合或合并数据文件中空闲空间的邻近区域。
回收临时段将它们作为数据文件中的空闲空间返回。临时段用于在SQL 语句处理过程中存储数据。
4.过程监视器(PMON)
负责在一个Oracle 进程失败时清理资源,进程失败后,后台进程PMON 通过下面的方法进行清理:
- 回退用户的当前事务处理
- 释放当前保留的所有表锁或行锁
- 释放用户当前保留的其它资源
5.检查点进程(CKPT)
负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。