Oracle 9i网络环境里共有两大类进程。
1. 用户进程
用户进程是在客户机内存上运行的程序,如客户机上运行的【SQL Plus】、【企业管理器】等。用户进程向服务器进程提出操作请求。
2. 服务器进程
系统监控进程(SMON):SMON(System Monitor,系统监控进程)
系统监控进程为一个Oracle实例维护其整体安全性。在一个实例失败后重新启动时,SMON执行紧急灾难恢复;在Oracle并行服务器/实时应用集群中,当有多个实例同时访问同一数据库时,SMON为其中一个失败的实例进行协调并执行恢复操作。SMON还可以把数据文件中相邻的空闲内存合并为一块,并且对用于记录排序的空间,如果不需要还可以将此空间释放。
进程监控进程(PMON):PMON进程监控数据库所有用户进程。如果一个用户进程非正常中断,PMON负责释放其余所有资源(如:内存),并且释放失败进程所加的锁。
数据库写入进程(DBWR): DBWR将数据库块从SGA中的数据库高速缓存写入磁盘的数据文件中。每个Oracle实例最多可以拥有10个DBWR进程,即从DBWR0到DBWR9,用于处理多个数据文件的I/O操作。大多数实例只运行一个DBWR进程。若需要DBWR进程从缓存把数据块写到磁盘中,往往有两个主要原因:
·如果Oracle需要执行一个检查点(例如,修改数据文件的数据块以便与日志的记录一致)。当一个事务提交时,Oracle先写日志,稍后才写实际的数据块。Oracle定期地执行检查点,以保证数据文件的内容符合日志为提交事务所做的记录。
·在响应用户的请求时,Oracle需要将数据块读到高速缓存内,但是缓存内没有富余的空间,这个时候根据最近最少使用原则将某些数据块写入磁盘。
这种顺序执行写数据块可以极大地减少在高速缓存中丢失数据的可能。
日志写入进程(LGWR): LGWR把日志信息从SGA中的日志缓冲区写到当前日志所有的复本中。当事务在进行是,相关的日志信息存放在SGA的日志文件缓冲区内。事务提交时,Oracle通过调用LGWR将日志信息写到磁盘作为永久保存。
归档进程(ARCH): 一旦Oracle写好日志文件,归档进程将读出日志文件,并且为所有使用的日志文件建立复本,写入到指定归档日志的目录中,采用ARCn的记法,Oracle8i可支持的多达10个归档进程。LGWR可能会根据负载的需要启动其他的归档进程,启动的进程数目受初始化参数LOG_ARCHIVE_MAX_PROCESSES所限。
检查点进程(CKPT): 同步数据文件,日志文件和控制文件,由于DBWR/LGWR的工作原理,造成了数据文件,日志文件,控制文件的不一至,这就需要CKPT进程来同步。CKPT会更新数据文件/控制文件的头信息。
CKPT工作的主要条件如下
·在日志切换的时候
·数据库用immediate,transaction,normal选项shutdown数据库的时候
·根据初始话文件LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的设置的数值来确定
·用户触发
恢复进程(RECO): 负责解决分布事物中的故障。Oracle可以连接远程的多个数据库,当由于网络问题,有些事物处于悬而未决的状态。RECO进程试图建立与远程服务器的通信,当故障消除后,RECO进程自动解决所有悬而未决的会话。
3 内存结构
3.1. 系统全局区(SGA)
3.2. 程序全局区(PGA)
PGA是数据库服务器内存中为单个用户进程分配的专用的内存区域,是用户进程私有的,不能共享。
4 数据库的逻辑结构
Oracle 9i数据库的逻辑结构主要指从数据库使用者的角度来考查的数据库的组成,逻辑结构共有6层。
1. 数据块(Data Block): ORACLE最基本的存储单位,他是OS数据块的整数倍。ORACLE的操作都是以块为基本单位,一个区间可以包含多个块(如果区间大小不是块大小的整数倍,ORACLE实际也扩展到块的整数倍)。
2. 数据区间(Data Extent): 在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(Max Extent)或没有可用的磁盘空间可以申请。 在ORACLE8i以上版本,理论上一个段可以无穷个区间,但是多个区间对ORACLE却是有性能影响的,ORACLE建议把数据分布在尽量少的区间上,以减少ORACLE的管理与磁头的移动。
3. 数据段(Data Segment)段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库存储的角度来看的。一个段只能属于一个表空间,当然一个表空间可以有多个段。
表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的关系,段不直接和数据文件发生关系。一个段可以属于多个数据文件,关于段可以指定扩展到哪个数据文件上面。
段基本可以分为以下四种
·数据段(Data Segment)
·索引段(Index Segment)
·回滚段(Rollback Segment)
·临时段(Temporary Segment)
4. 逻辑对象(Logic Object): Oracle数据库数据对象中最基本的是表和视图,其他还有约束、序列、函数、存储过程、包、触发器等。对数据库的操作可以基本归结为对数据对象的操作。
5. 表空间(Tablespace)表空间是数据库中的基本逻辑结构,一系列数据文件的集合。一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。
Oracle 9i安装完毕后自动建立9个默认的表空间
名称 | 主要作用 |
CWMLITE | 用于联机分析处理(OLAP) |
DRSYS | 用于存放与工作空间设置有关的信息 |
EXAMPLE | 实例表空间,存放实例信息 |
INDEX | 索引表空间,存放数据库索引信息 |
SYSTEM | 系统表空间,存放表空间名称、所含数据文件等管理信息 |
TEMP | 临时表空间,存储临时表 |
TOOLS | 工具表空间,存放数据库工具软件所需的数据库对象 |
UNDOTBS | 回滚表空间,存放数据库恢复信息 |
USERS | 用户表空间,存放用户私有信息 |
5. 数据库(Database)
5.1 数据库的存储结构
数据库的存储结构指逻辑结构在物理上是如何实现的,共有3层
1. 物理块
2. 物理文件
每个物理文件由若干个物理块组成,主要包括数据文件、控制文件和日志文件3类。
数据文件:用于存放所有的数据,以DBF为扩展名。
日志文件:记录了对数据库进行的所有操作,以LOG为扩展名。
控制文件:记录了数据库所有文件的控制信息,以CTL为扩展名。
以笔者的安装环境为例,【全局数据库名】为“myoracle.mynet”的数据库的主要物理文件存放在c:oracle/oradata/myoracle下。
6 数据库服务器的总体结构
Oracle 9i数据库服务器的总体结构