Oracle体系结构简要介绍 联系客服

发布时间 : 星期五 文章Oracle体系结构简要介绍更新完毕开始阅读6c9fa69676a20029bd642d67

Word模板样式

Oracle体系结构简要介绍

1. oracle数据库软件介绍

oracle数据库包括:oracle数据库和oracle实例两个东西。Oracle实例指的是:oracle启动后占用的内存和后台进程的总称;oracle数据库是实例和数据文件的总称。数据库关闭后数据库实例就不存在了,数据库文件一直存在。

Oracle是由oracle软件和oracle数据库组成,oracle数据库主要指的是三类文件,分别是控制文件(*.ctl)、日志文件(*.log)、数据文件(*.dbf)。

2. oracle中内存结构介绍

oracle数据库启动起来后有两大内存结构,一是SGA(系统全局区),二是PGA,其中SGA

是用来共享的,PGA是用来给进程使用的。

第 1 页/共 9页

Word模板样式

2.1 SGA介绍

Sga是就是oracle系统的全局区,在linux和nuix中用 ipcs -m命令来查看占用的共享内存。Sga包括:共享池(shared pool)、stream池(stream pool)、大型池(large pool)、java 池、数据库缓冲区高速缓存(buffer cache)、重做日志缓冲区(log buffer)。其中主要的缓冲区包括:共享池(shared_pool)、数据库高速缓存区(db_cache)、重做日志缓冲区(log_buffer),最容易出问题的也是这三个。

在plsql中可以通过 show parameters sga 或者 show sga 来查看sga的参数配置。

2.1.1 共享池(shard pool)

共享池(shard pool)主要用来缓存SQL语句以及所对应的SQL执行计划。参数是shared_pool_size。

SQL语句的执行计划存放在shard pool中,下次去执行的时候先到shard pool中去找,这样大大减少资源的消耗。

SQL语句的解析以及执行计划的缓存、shard pool的访问,都是有server process 来做的。

2.1.2 数据库缓冲区高速缓存(buffer cache)

数据库缓冲区高速缓存(buffer cache)主要用来缓存DBF的数据,这些数据通过SQL语句的执行计划得来的。参数是db_cache_size 。

数据库缓存区高速缓存对应的是数据库写进程(DBWN),数据库写进程(DBWN)对应的是数据文件和控制文件。

2.1.3 重做日志缓冲区(log buffer)

重做日志缓冲区(log buffer)主要用来存放日志的。参数是log_buffer。 重做日志缓冲区对应的是日志写进程(LGWR),日志写进程(LGWR)对应的数据文件是重做日志文件,也就是日志文件。

2.1.4 stream 池(stream pool)

stream 池(stream pool)是由oracle的stream来使用的。参数是streams_pool_size。

2.1.5 大型池(large pool)

大型池(large pool)用于为某些大型的进程提供大量的内存分配,如数据备份等。参数是:lorge_pool_size

第 2 页/共 9页

Word模板样式

2.1.6 java 池(java pool)

java 池(java pool)用于java虚拟机中特定会话的所有java代码和数据,参数是:java_pool_size。

2.1.7 修改SGA参数的语法:

在10g和11g这2个版本中,空间的大小一般都是oracle自动划分出来的,也可以手动设置,它们都是动态的,所以更改后不会立即生效,需要重启,使 用命令:alter system set sga_max_size=xxxM scope=spfile;和alter system set sga_target = xxxM scope=spfile;sga_max_size必须大于等于sga_target,并且在设置sga的值大小时候是根据总内存大小的60%的 70%-80%,pga的大小是根据总内存大小的60%的20-30%。

2.2 PGA介绍

Pga是用来个进程使用的,在oracle10g中不仅前台进程分配了PGA空间,后台进程也分配了PGA空间。它是私有全局区,主要用来存放每个进程来了后单独存放内存区域。

2.3 oracle 实例介绍

把oracle启动起来后分配的内存和进程统称为oracle实例,也就是说oracle启动起来后就会产生一个实例,当oracle数据库关闭后数据库实例就会消失了。一个数据库可以对应多个实例,如oracle,一般是双数,如2、4、6、8,8台机器用的很少。

3. oracle中进程介绍

oracle中有六大进程,分别是:检查点进程(CKPT)、系统监视器(SMON)、进程监视器(PMON)、数据库写进程(DBWN)、日志写进程(LGWR)、归档进程(ARCN)。 Oracle中进程共分为三类,分别是用户进程、服务进程、后台进程。其中后天进程伴随实例的启动而启动,他们主要是维护数据库的稳定,相当于一个企业中的管理者及内部服务人员,他们并不直接给用户提供服务。

3.1 数据库写进程(DBWN)

Database write(DBWN)数据库写进程,它的作用是把SGA中被修改的数据同步到磁盘文件中,保证Buffer cache 中有足够的空闲数据块的数量。用来处理数据库缓冲区的数据写到硬盘。

触发条件是:1.检查点;2.一个服务进程在设定的时间内没有找到空闲块;3、每隔三秒钟自动唤醒一次。

第 3 页/共 9页

Word模板样式

设置:DB_WRITER_PROCESSES用来定义DBWn进程数量。(commit命令只是把记录修改写入日志文件,不是把修改后的数据写入数据文件,下面还会提到。)

从buffer cache中将数据写入DBF的时候,是由DBWN进程来完成的。

3.2 日志写进程(LGWR)

Log write(LGWR)日志写进程,它的作用是把log buffer中的日志内容写入联机的日志文件中,释放log用户的buffer空间。

触发条件是:1.用户发出commit命令。(在oracle中称为快速提交机制(fast commit):把redo log buffer中的记录写入日志文件,写入一条已提交的记录);2.三秒钟定时唤醒;3.log buffer 超过1/3,或者日志数据量超过1M;4.DBWR进程触发:DBWR试图将脏数据写入磁盘先检查它的相关rode记录是否写入联机日志文件,如果没有就通知LGWR进程,在oracle中称为提交写机制(write ahead):redo记录先于数据记录被写入磁盘。

将rode log buffer中的日志写入到redo log日志文件里去,是由LGWR来完成的。

3.3 检查点进程(CKPT)

Checkpoint(CKPT)检查点进程,它的作用是维护数据库的一致性状态,检查点时刻检查数据文件盒SGA中的内容一致,这不是一个单独的进程,要和前面两个进程一起工作,DBWR写入脏数据,同事触发LGWR进程。用于将数据库当前的状态写在控制文件和数据文件的头部。

CKPT更新控制文件中检查点的记录。

触发条:日志切换(log switch)会触发检查点。

3.4 进程监视器(PMON)

Process monitor (PMON)维护用户进程或者进程监视器,它的作用是1、发现用户进程异常终止,并进行清理。释放占用资源。(清理异常终止用户使用的锁)。2、向监听程序动态注册实例。 触发条件是:定时被唤醒,其他进程也会主动唤醒它。

3.5 系统监视器(SMON)

System monitor(SMON)实例维护或者系统监视器,它的作用是1、负责实例恢复,

前滚(Roll Forward)恢复到实例关闭时刻的状态,使用最后一次检查点后的日志进行重做。这时包括提交和未提交的事务。打开数据库进行回滚(roll back),回滚未提交的事务。(oracle承诺commit之后的数据不会丢失,现在我们可以大致的了解oracle是如何实现这个承诺的,以及在数据安全性和数据库性能之间的平衡选择);2、负责清理临时段,已释放空间。

触发条件是:定期被唤醒或者被其他事务主动唤醒。

第 4 页/共 9页