Oracle Server由例程(Instance)和数据库(Database)两部分组成。
数据库是一组OS文件的集合,它由数据文件、控制文件和重做日志组成。
例程是由一组内存结构和后台进程的集合;
内存结构主要包括数据高速缓存、重做日志缓冲区和共享池3部分,这些内存结构总称SGA(System Global Area);后台进程主要包括:SMON、PMON、DBWR、CKPT、LGWR、ARCH等。
2 SGA
2.1共享池(shared pool)用于存放最近执行的SQl语句和数据字典信息。共享池主要由库高速缓存(Library Cache)和数据字典高速缓存(Dictionary Cache)两部分组成。
2.1.1库高速缓存:用于存放最近执行的SQL语句信息,包括SQL语句文本、解析代码值及其执行计划。
2.1.2 数据字典高速缓存:用于存放数据字典的信息,包括表、列的定义以及权限信息。
2.2数据高速缓存(DatabaseBuffer Cache)用于存放最近访问的数据块信息,它由许多小缓冲区(缓存区尺寸=数据块尺寸)组成。无论是读数据还是修改数据,都是在数据高速缓存中完成的。
2.2.1数据高速缓存工作原理:采用LRU算法(LeastRecently Used)最少使用算法,最少使用最先出,最先入队最先出队,最后入队最后出队。
2.3 重做日志缓冲区(Redo LogBuffer)用于记载例程变化。执行DDL或DML语句时,服务器进程首先将事务变化记载到重做日志缓冲区,然后才会修改数据高速缓存。当执行UPDATE操作时,新数据2000将被存放到emp段所对应的缓冲区B1中,旧数据1000将被存放到UNDO(撤消/回滚)段对应的缓冲区U1中。在修改这两个缓冲区之前,首先将它们的变化写到重做日志缓冲区,然后在修改它们的数据。
2.4PGA(Program Global Area)用于存放服务器进程的数据和控制信息,它是独立于SGA的一块内存区域。PGA由排序区(Sort Area)、会话信息(Session Information)、游标状态(Cursor State)以及堆栈空间(Stack Space)等4部分。
3 后台进程:是指由Oracle Server隐含执行的进程。启动例程时,Oracle不仅会分配SGA,还会启动后台进程;关闭例程时,Oracle不仅会释放SGA所占用的内存空间,而且还会释放后台进程所占用的Cpu和内存资源。Oracle提供了很多后台进程,在这介绍常用后台进程SMON、PMON、DBWR、LGWR、CKPT、ARCH。
3.1 SMON(System Monitor)用于执行例程回复、合并空间碎片并释放临时段。
3.2 PMON(Process Monitor)用于监视服务器进程的执行,并且在服务器进程失败时清除该服务器进程。
3.3 DBWR(Database Writer)用于将数据高速缓存的脏数据缓冲区数据写入到数据文件中。
当系统发出检查点checkpoint、服务器进程不能找到空闲缓冲区、删除后截断表、使表空间正常脱机、开始表空间备份 时,DBWR进程会开始工作。
3.4 LGWR(Log Writer)用于将重做日志缓冲区所记载的全部内容写入到重做日志文件中。当执行DML或DDl语句时,服务器进程首先将事务变化写到重做日志缓冲区,然后修改数据高速缓存。注意:Oracle总是“先日志后修改”(先记载变化然后修改数据)。因此,将脏缓冲区数据写入到数据文件之前,Oracle首先将事务变化写入到重做日志文件,也就是说,在DBWR工作之前,LGWR首先将事务变化写到重做日志。出现以下情况时,LGWR进程开始工作:提交事务(commit)、每隔3秒、当重做信息超过1M时、重做日志缓冲区已有三分之一填满。在DBWR进程将脏缓冲区数据写入到数据文件之前。
3.5 CKPT(Checkpoint Process)用于发出检查点(Checkpoint),检查点会同步数据库的数据文件、控制文件和重做日志,当发出检查点时,后台进程CKPT将检查点时刻的SCN(System Change Number)写入到控制文件和数据文件头部,同时促使后台进程DBWR将所有脏缓冲区写入到数据文件中。当发出检查点时,不仅后台进程CKPT和DBWR要开始工作,LGWR也会将重做日志缓冲区写入到重做日志,从而确保数据文件、控制文件和重做日志的一致性。出现以下情况时CKPT开始工作:日志切换、关闭例程、手工检查点操作、由初始化参数fast_start_mttr_target强制发出的检查点。
3.6 ARCH(Archive Process)用于将重做日志的事务变化复制到归档日志中,该后台进程只有在ARCHIVELOG模式下才有意义。在此模式下,进行日志切换时会自动生成归档日志。
4数据库物理结构
4.1数据文件(Data File)用于存档数据库数据,包括系统数据(数据字典)、用户数据(表、索引、簇)、UNDO数据等。当建立数据库或表空间时,数据文件是由DATAFILE选项指定的。数据库逻辑上由一个或多个表空间(Tablespace)组成,而表空间物理上则有一个或多个数据文件组成。
当建立临时表空间时,使用TEMPFILE选项可以指定临时文件。临时文件(Temporary File)用于存放排序操作产生的临时数据。当执行排序操作时,如果临时数据超过排序区尺寸,服务器进程会将临时数据放到临时表空间中。
4.2重做日志(Redo Log)用于记录数据库变化,当进行例程恢复或介质恢复时需要使用重做日志。执行DDL和DML操作时,事务变化会被写到重做日志缓冲区,而在特定时刻LGWR会将重做日志缓冲区内容写入重做日志。数据库至少含有3个重做日志组,并且这些重做日志组是循环使用。
4.3控制文件(Control File)用于记录和维护数据库的物理结构,并且每个Oracle数据库至少包含一个控制文件。每当使用Oracle Server时。一个例程只能访问一个数据库,Oracle正是通过控制文件在例程和数据库之间建立联系的。当装载数据库时,Oracle会根据初始化参数control_files定位控制文件,打开数据库时,Oracle会根据控制文件所记载的信息打开所有数据文件和重做日志。控制文件记载如下信息:
5 数据库逻辑结构
数据库数据(表、索引、簇)物理上存放在数据文件中,而逻辑上存放在表空间中,Oracle是使用表空间、段、区、数据块等逻辑存储结构管理对象空间的,它们的关系如图:
5.1表空间
表空间(Table Space)是数据库的逻辑组成部分。Oracle建议将不同类型的数据部署到不同表空间,一方面可以提高数据访问性能,另一方面便于数据管理、备份和恢复等操作。Oracle数据库中应该包含SYSTEM表空间(用于存放系统数据:数据字典信息)、SYSAUX表空间(用于存放数据库辅助系统信息)、临时表空间、UNDO表空间、数据表空间(存放表数据)、索引表空间(用于存放索引数据)。
5.2段(segment)用于存放特定逻辑 对象(表、簇、索引等)的所有数据,它是由一个或多个区组成的。常用段:表段,用于存放表的所有数据。索引段,存放索引的所有数据。临时段。UNDO段,用于存放事务所修改数据的旧值。
5.3区(Extent)是Oracle进行空间分配的逻辑单元,它是由相邻的数据块组成的。例如,建立新表时,Oracle会为此表段分配一定初始尺寸的空间,当数据占满空间时,再插入新数据时,Oracle会自动扩展此表段,为其分配一个区,一次类推。
4.Oracle块 也称为数据块,是Oracle在数据文件上执行I/O操作的最小单位,其尺寸因该设置为OS块的整数倍。