Oracle体系结构
1:ORACLE由实例和数据库组成。
2:实例由SGA和一系列的进程完成的。 SGA又叫共享内存区。
3:数据库是由数据文件(.dbf),日志文件(.log),参数文件(.pfile),控制文件(.ctl)归档日志文件等。
其中归档日志最终可能会被转移到新的存储介质中,用于备份恢复使用。
4:PGA是私有不共享内存区。当查询数据或者更新数据的时候,都是在这里进行预处理的。然后进入实例中。由SGA和系列的进程共同完成用户的请求。
PGA的作用:
1:用户连接的保存。如会话属性,绑定连接等。
2:用户权限的保存。当用户进程和数据库进行会话的时候,系统会将这个用户的权限查询出来,保存在这个会话中。
3:当发起排序的指令的时候,PGA就是这个排序区,如果内存中可以放下排序的尺寸,就在内存PGA区中完成,如果放不下,超出的那部分在临时表空间中完成排序。也就是在磁盘中。
-----------------------------------八大进程-------------------------------------
PMON :Processes Monitor 进程监视。
1:如果在执行某些更新语句,未提交时进程崩溃了,这个时候PMON会自动回滚该操作,不用人工的rollback了。
2:干预后台进程,比如RECO异常失败了,这个时候PMON会重启RECO进程,如果遇到LGWR进程失败的严重问题,PMON会做出终止实例这个激烈的动作,用于防止数据错乱。
1:如果在执行某些更新语句,未提交时进程崩溃了,这个时候PMON会自动回滚该操作,不用人工的rollback了。
2:干预后台进程,比如RECO异常失败了,这个时候PMON会重启RECO进程,如果遇到LGWR进程失败的严重问题,PMON会做出终止实例这个激烈的动作,用于防止数据错乱。
SMON:System Monitor 系统监视器。
关注的是系统级的操作。重点工作在于intance recovery ,除此还有清理临时表空间,清理回滚段表空间,合并空闲空间等。
LCKn :
仅用于RAC数据库,最多有10个进程(LCK0,LCK1....LCK9),用于实例间的封存。
RECO:
RECO用于数据库的恢复,适用于两阶段提交的应用场景。比如有A,B,C三个数据库,某个应用跨越三个数据库,在发起的过程需要A,B,C都提交成功,事务才会成功,只要有一个失败,就必须全部回滚。
CKPT:
由Oracle的FAST_START_MTTR_TARGET参数控制,用于触发DBWR从数据缓冲区中写到数据到磁盘。CKPT执行越频繁,DBWR写出越频繁,DBWR写出越频繁越不能显示批量特性,性能就越低,但是数据库异常恢复的时候会越迅速。
DBWR :
Oracle中最核心的进程了,负责把数据从数据缓存区写到磁盘里,该进程和CKPT相辅相成,因为CKPT促成DBWR去写的,不过DBWR和LGWR也密切相关。因为DBWR想将数据缓存区数据写到磁盘的时候,必须通知LGWR先完成日志缓冲区写到磁盘的动作后,才能工作。
Oracle中最核心的进程了,负责把数据从数据缓存区写到磁盘里,该进程和CKPT相辅相成,因为CKPT促成DBWR去写的,不过DBWR和LGWR也密切相关。因为DBWR想将数据缓存区数据写到磁盘的时候,必须通知LGWR先完成日志缓冲区写到磁盘的动作后,才能工作。
LGWR:
把日志缓存区的数据从内存写到磁盘的REDO文件里,完成数据库对象创建,更新数据等操作过程的记录,不要小看REDO的记录,可以用来做数据库的异常恢复,只要保护好这些REDO文件和后续对应的归档文件,从理论上来说,即使数据文件被删除光了,还是可以让数据库根据这些日志记录,把所有的数据库中曾经发生的事情全部重做一遍,保证数据库的安全。
LGWR必须记录下所有从数据缓存区写进数据文件的动作,工作任务相当繁重,由于要顺序记录情况下保留的日志才有意义,多线程难以保证顺序,但是单线程可以啊。所以规定了5条严格的制度来要求自己适应高强度的工作。
1:每个三秒,LGWR运行一次。
2:任何COMMIT触发LGWR运行一次。
3:DBWR要把数据从数据缓存写到磁盘,触发运行一次。
4:日志缓冲区满三分之一或记录满1MB,触发运行一次。
5:联机日志文件切换也将触发LGWR。
1:每个三秒,LGWR运行一次。
2:任何COMMIT触发LGWR运行一次。
3:DBWR要把数据从数据缓存写到磁盘,触发运行一次。
4:日志缓冲区满三分之一或记录满1MB,触发运行一次。
5:联机日志文件切换也将触发LGWR。
ARCH:
在LGWR写日志写到需要覆盖重写的时候,触发ARCH进程去转移日志文件,复制出去形成归档日志文件。