1、1.1 ORACLE系统结构任何硬件平台或操作系统下的ORACLE体系结构是相同的,包括如下三个方面:(1) 物理结构:数据文件,日志文件,控制文件,参数文件。(2) 系统全局区(SGA):共享池,数据缓冲区,日志缓冲区,字典缓冲区。(3) 进程:用户进程,服务器进程,后台进程。具体结构如图1-1所示。图1-1 ORACLE数据库体系结构oracle的体系结构网络结构:单层结构、客户机/服务器结构、浏览器/服务器结构存储结构:1、物理存储结构(oracle数据库管理系统由以下文件组成:数据文件、控制文件、日志文件、初始化参数文件)2、逻辑存储结构(它包括表空间、段、区、数据块它们之间的关系是:
2、多个数据块组成区,多个区组成段,多个段组成表空间,多个表空间组成逻辑数据库表空间是在oracle中用户可以使用的最大的逻辑存储结构,数据库中的所有内容都被存储在表空间中。表空间在物理上与数据文件对应,每一个表空间由一个或多个数据文件组成。)软件结构:1、内存结构(oracle内存结构包括两类:系统全局区、程序全局区在SGA中含有以下组件:数据高速缓冲区、重做日志缓冲区、共享池、大池)2、进程(用户进程oracle进程(服务器进程、后台进程)1. 数据文件数据文件是物理存储ORACLE数据库数据的文件,每一个ORACLE数据库有一个或多个物理的数据文件(data file)。一个数据库的所有数据
3、文件包含了全部数据库数据。逻辑数据库结构(如表、索引)的数据物理地存储在数据库的数据文件中。数据文件有下列特征: 每一个数据文件只与一个数据库联系 一个表空间可包含一个或多个数据文件2. 日志文件每一个数据库有两个或多个日志文件(redo log file)的组,每一个日志文件组用于收集数据库日志。日志的主要功能是记录对数据所做的修改,所以对数据库做的全部修改是记录在日志中。日志文件的主要作用是保护数据库以防止故障。为了防止日志文件本身的故障,ORACLE允许镜象日志(mirrored redo log),可以在不同磁盘上维护两个或多个日志副本。日志文件中的信息仅在系统故障或介质故障时用来恢复
4、数据库。3. 控制文件每一个ORACLE数据库有一个控制文件(control file),它记录数据库的物理结构,包含下列信息类型: 数据库名。 数据库数据文件和日志文件的名字和位置。 数据库建立日期。为了安全起见,允许控制文件被镜象。每一个ORACLE数据库的实例启动时,它的控制文件用于标识数据库和日志文件,当着手数据库操作时它们被打开。当数据库的物理组成更改时,ORACLE自动更改该数据库的控制文件。数据恢复时,也要使用控制文件。4. 参数文件是一个文本文件,可直接使用文本编辑器对其内容进行修改,该文件只在建立数据库和启动实例时被访问,修改该文件后必须重启实例才生效。系统初始参数文件:in
5、it .ora生成的参数文件为:initSID.ora参数文件作用如下: 设置SGA的大小。 设置数据库的全部缺省值。 设置数据库的范围。 在数据库建立时定义数据库的物理属性。 指定控制文件名和路径。 通过调整内存结构,优化数据库性能。系统全局区SGA分为以下几个部分:(4) 共享池。(5) 数据块缓冲区。(6) 日志缓冲区。(7) 字典缓冲区。1. 共享池(Shared Pool)由共享SQL区和数据字典区组成,参数shared_pool_size确定共享池大小,共享SQL区包括:SQL或PL/SQL语句的文本。SQL或PL/SQL语句的语法分析形式。SQL或PL/SQL语句的执行方案。2.
6、 数据块缓冲区用于存储从数据文件中读出的数据,其大小由以下两个参数决定: DB_BLOCK_SIZE确定数据块的大小,一般为2K或4K。 DB_BLOCK_BUFFERS确定数据块的数目。DB_BUFFERS=DB_BLOCK_BUFFERSDB_BLOCK_SIZE=物理内存(1525)%, 对于OPS取上限。该值应尽量大。3. 日志缓冲区以记录项的形式备份数据库缓冲区中被修改的缓冲块,这些记录项将被写到日志文件中。日志缓冲区大小由参数LOG_BUFFER确定4. 字典缓冲区用于存放数据字典信息行。5. SGA设置大小总原则在设置各参数调整SGA大小时,应保证其小于物理内存的一半。SGA的计
7、算方法如下:SGA=DB_BLOCK_BUFFERSDB_BLOCK_SIZE+SHARE_POOL_SIZE+SORT_AREA_SIZE+1M+3DB_BLOCK_SIZE(CPUs+2)PARALELL_MAX_SREVERS1.1.2 进程进程是操作系统中的一种机制,它可执行一系列的操作步骤(在有些操作系统中使用作业(JOB)或任务(TASK)的术语来表示进程)。一个进程通常有它自己的专用存储区。ORACLE实例有两种类型:单进程实例和多进程实例。通常用的是多进程实例。单进程ORACLE(又称单用户ORACLE)是一种数据库系统,一个进程执行全部ORACLE代码。由于ORACLE部分和
8、客户应用程序不能分别以进程执行,所以ORACLE的代码和用户的数据库应用是单个进程执行。在单进程环境下的ORACLE 实例,仅允许一个用户可存取。例如在MS-DOS上运行ORACLE 。多进程ORACLE实例(又称多用户ORACLE)使用多个进程来执行ORACLE的不同部分,对于每一个连接的用户都有一个进程。在多进程系统中,进程分为两类:用户进程和ORACLE进程。当一用户运行一应用程序,如PRO*C程序(Pro*C是一种开发工具, 它把过程化语言C和非过程化语言SQL最完善地结合起来, 具有完备的过程处理能力,又能完成任何数据库的处理品任务,使用户可以通过编程完成各种类型的报表。)或一个OR
9、ACLE工具(如SQL*PLUS),为用户运行的应用建立一个用户进程。ORACLE系统进程又分为服务器进程和后台进程。1. 服务器进程用于处理用户请求的进程。处理过程如下:分析SQL命令并生成执行方案。从数据缓冲区或磁盘中读取数据。将执行结果返回给用户。2. 后台进程为所有数据库用户异步完成各种任务,主要包括如下进程(ora817表示实例名):ora_reco_ora817恢复进程:该进程是在具有分布式选项时所使用的一个进程,自动地解决在分布式事务中的故障。一个结点RECO后台进程自动地连接到包含有悬而未决的分布式事务的其它数据库中,RECO自动地解决所有的悬而不决的事务。任何相应于已处理的悬
10、而不决的事务的行将从每一个数据库的悬挂事务表中删去。当一数据库服务器的RECO后台进程试图建立同一远程服务器的通信,如果远程服务器是不可用或者网络连接不能建立时,RECO自动地在一个时间间隔之后再次连接。RECO后台进程仅当在允许分布式事务的系统中出现,而且DISTRIBUTED TRANSACTIONS参数是大于0。ora_dbw0_ora817数据库写进程:该进程执行将缓冲区写入数据文件,是负责缓冲存储区管理的一个ORACLE后台进程。当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,此进程的主要任务是将“弄脏”的缓冲区写入磁盘,使缓冲区保持“干净”。ora_pmon_ora817进程监控进
11、程:该进程在用户进程出现故障时执行进程恢复,负责清理内存储区和释放该进程所使用的资源。例:它要重置活动事务表的状态,释放封锁,将该故障的进程的ID从活动进程表中移去。PMON还周期地检查调度进程(DISPATCHER)和服务器进程的状态,如果已死,则重新启动(不包括有意删除的进程)。PMON有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。ora_lgwr_ora817日志写进程:该进程将日志缓冲区写入磁盘上的一个日志文件,它是负责管理日志缓冲区的一个ORACLE后台进程。ora_ckpt_ora817检查点写进程:该进程在检查点出现时,对全部数据文件的标题进行修改,指示该检查点
12、。ora_smon_ora817系统监控进程:该进程实例启动时执行实例恢复,还负责清理不再使用的临时段。在具有并行服务器选项的环境下,SMON对有故障CPU或实例进行实例恢复。SMON进程有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。1.2 存储管理前面已经提到过,ORACLE数据库都将数据存储在数据文件中,在其内部,数据库结构提供了数据对数据文件的逻辑映射,允许不同类型的数据分开存放。这些逻辑划分称为表空间,图1-4给出了详细的ORACLE数据库存储结构图。1.2.1 逻辑结构ORACLE的逻辑结构是由一个或多个表空间组成,一个数据库划分为一个或多个逻辑单位,该逻辑单位称为
13、表空间(tablespace)。一个表空间可将相关的逻辑结构组合在一起。 一个表空间由一组分类段组成。 一个段由一组范围组成。 一个范围由一批数据库块组成。 一个数据库块对应一个或多个物理块。1. 数据库块数据库块(database block)是ORACLE逻辑分配空间的最底层,又称逻辑块、页或ORACLE块。数据库块是数据库使用和分配空间的最小单元,也可以说是使用的最小I/O单元,一个数据块与磁盘上指定的物理空间大小相一致,一个数据库块对应一个或多个物理块,块的大小由参数db_block_size确定。PCTFREE和PCTUSED是开发人员用来控制数据块中可用插入和更新数据的空闲空间大小的参数。 PCTFREE:设置数据块中保持空闲的百分比。 PCTUSED:当数据块空闲空间达到PCTFREE时,此块不允许插入数据,只能修改或删除块中的行,更新时可能使数据块空闲空间变大,已用数据空间变小,当已用空间低于PCTUSED时,则可以重新插入数据。PCTFREE及PCTUSED的选择: 经常做查询(select)的表,应使PCTFREE小些,尽量减少存储空间浪费。 经常做插入(insert)的表,应使PCTUSED大一些。 经常做更新(update)的表,应使PCTFREE大一些,给更新留出更大的空间,减少行移动
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1