Oracle体系结构之物理结构

来源:互联网 发布:gamestop it 编辑:程序博客网 时间:2024/06/02 12:35

Oracle体系结构之物理结构

以前对Oracle的了解少之又少,仅仅停留在最简单的使用层面,最近看《收获,不止Oracle》,对Oracle的整体结构有了大致的了解后再去看其他知识可能会更加容易理解一些。

一、首先Oracle是由数据库本身和其生成的实例组成,实例包括SGA(共享内存区)和一些进程。除了SGA,还有一块内存区域叫做PGA(私有内存区),其作用如下:

1、 保存用户连接信息,如会话属性、绑定变量。

2、 保存用户权限等信息。

3、 排序(order by)是在此区域完成的,如果内存区域不够,则会在临时表空间完成,也就是磁盘。

 

二、然后是SGA,其分为共享池、数据缓冲区和日志缓冲区几部分。

    当执行一条SQL语句时,会先在共享池这片区域里查找一些信息判断此条SQL是否被执行过,如果没有执行过,会花费大量时间进行语法分析、语义分析、分析执行计划等操作,然后把这些分析结果保存到共享池,这样在第二次执行同一条SQL时,代价会小很多(为了避免对相同语法的SQL进行重复的执行计划分析,可以使用绑定变量的方式进行操作,如在一些框架中使用preparedStatement设置SQL参数)。

    数据缓冲区大家都很熟悉了,其主要目的是对数据进行缓存,减少IO操作。DBWR进程负责将缓冲区中的数据写入到磁盘,在执行Commit命令后,缓存区的数据不一定会被DBWR进程立即写入磁盘,而是Oracle判断缓存区数据积累到一定程度后,批量写入,提高效率(由CKPT进程处理)。大家可能会担心突然断电造成内存数据丢失,不用担心,Oracle还有日志缓冲区。

    日志缓冲区:保存数据库相关操作的日志,便于出现异常情况时进行数据恢复或重做,保护数据安全。LGWR进程负责将日志缓冲区数据写进磁盘的日志文件里。在执行Commit时,会立即将日志缓冲区的数据写入到日志文件中。数据库中的日志文件的几块都被写满后,会由ARCH进程写入归档文件中。

 

三、大家发现图中还有两个文件没有提到,那就是参数文件和控制文件,这涉及到Oracle的启动过程。

    Oracle的启动有三个阶段:nomount、mount和open。

1、 Oracle首先读取参数文件,根据参数文件上的内存分配策略分配内存,并启动相应的后台进程(也就是创建了instance)。

2、 实例创建后,根据参数文件上描述的控制文件的名称和位置找到控制文件并锁定,控制文件中记录了数据库中数据文件、日志文件等重要信息。

3、 根据控制文件的信息,定位到数据库文件、日志文件等,正式开通了实例和数据库之间的桥梁。

 

以上便是对Oracle物理结构的一个大致总结,欢迎指正。

 

2014.03.24 by zhangjy

0 0