第1章Oracle10g体系结构Oracle服务器由两部分组成Oracle数据库(OracleDatabase)Oracle例程(OracleInstance)1.1Oracle10g体系结构概述Oracle服务器是基于例程机制的服务器系统磁盘上(数据库):RDBMS、一组文件内存中(例程):内存结构、一组后台进程Oracle数据库是安装在磁盘上的Oracle数据库文件和相关的数据库管理系统(DBMS)的集合。数据文件(Datafiles)控制文件(Controlfiles)重做日志文件(Redologfiles)初始化参数文件(Parameterfile)口令文件(Passwordfile)归档重做日志文件(Archivedlogfiles)等1.Oracle数据库Oracle数据库物理存储结构Oracle例程后台进程数据库写入进程(DBWn)日志写入进程(LGWR)日志归档进程(ARCn)检查点进程(CKPT)系统监控进程(SMON)进程监控进程(PMON)等。2.Oracle例程Oracle例程内存结构组织称为系统全局区(SystemGlobalArea,SGA)。SGA是由所有用户进程共享的一块内存区域。数据库缓冲存储区(DatabaseBufferCache)重做日志缓冲区(RedoLogBuffer)共享池(SharedPool)Java池(JavaPool)大型池(LargePool)等2.Oracle例程可选内存结构用户进程发布并执行SQL语句的用户环境用户进程(Userprocess)服务器进程(Serverprocess)程序全局区(ProgramGlobalArea,PGA)3.Oracle用户环境当用户连接到Oracle服务器时,Oracle便创建一个服务器进程与之交互,并代表该用户进程完成与Oracle数据库间的交互。程序全局区PGA是用户专用的内存结构,存储该用户连接期间与SQL语句执行相关的信息Oracle数据库有两种内存结构系统全局区(SystemGlobalArea,SGA)程序全局区(ProgramGlobalArea,PGA)1.2Oracle服务器的内存结构系统全局区是一组共享内存结构,存放一个Oracle数据库例程的控制信息和各共享用户的数据。程序全局区是用户进程连接到数据库并创建一个会话时,由Oracle服务器进程分配的专门用于当前用户会话的内存区,该区域是私有的。(1)数据库缓冲存储区用于存放最近访问的数据块大小由初始化参数定义DB_BLOCK_SIZE用于定义标准块的尺寸DB_CACHE_SIZE用于定义标准块大小的数据库缓冲存储区DB_nK_CACHE_SIZE(n为2、4、8、16或32)定义非标准块大小的数据库缓冲存储区Oracle采用LRU算法管理数据库缓冲存储区1.系统全局区SGA(2)重做日志缓冲区存放数据库事务提交的操作信息,这些信息对数据库的恢复有着重要作用。当重做日志缓冲区被添满时,由日志写入进程把重做日志缓冲区的内容写到磁盘的重做日志文件中保存。重做日志缓冲区log_buffer的大小在参数文件中设置。值越大,重做日志缓冲区就可以存放更多的事务提交的记录,减少了数据被频繁写入到重做日志文件中的次数。1.系统全局区SGA(3)共享池主要包括共享SQL区、PL/SQL程序代码区(均包含在库高速缓存中)和数据字典存储区,保存最近使用过的SQL命令和数据字典信息。共享SQL区:包括许多可执行版本的SQL语句。可执行版本的SQL语句是指经过了语法检查、编译,并给出最佳执行步骤以便获得最优查询性能的SQL语句。这些可执行版本的SQL语句可以被多个用户所共享。数据字典存储区:存放系统中定义的数据库对象的信息,如表的名称、表结构描述、表拥有者的权限情况等。数据库服务器在运行期间,需要经常查询数据字典信息。1.系统全局区SGA(4)大型池大型池用于为大的内存需求提供内存空间,大小由初始化参数LARGE_POOL_SIZE定义如果使用RMAN(恢复管理器)执行备份、转储和恢复,或者需要执行并行复制,或者需要使用I/OSlaves提高I/O性能,则应该配置大(5)Java池用于存放Java代码、Java语句的语法分析表、Java语句的执行方案和支持Java程序开发大小由初始化参数JAVA_POOL_SIZE定义1.系统全局区SGA(1)排序区存放执行包含排序操作所产生的临时数据大小由初始化参数SORT_AREA_SIZE设置SORT_AREA_RETAINED_SIZE保留不释放的内存大小(2)会话区存储该会话所具有的权限、角色、性能统计等信息。(3)游标状态区存储用户会话中当前使用的各游标所处的状态。(4)堆栈区堆栈区存储该会话中的绑定变量(BindVariable)和会话变量(SessionVariable)及SQL运行时的内存结构信息。2.程序全局区PGA1.数据库写入进程(DBWn)数据库写入进程的作用是将已更改的数据块从内存写入数据文件。默认情况下,启动例程时只启动了一个数据库写入进程,即为DBW0初始化参数DB_WRITER_PROCESSES最多定义20个数据库写入进程执行写入操作每个数据库写入进程都分配了0~9或a~j编号1.3Oracle服务器的进程结构1.3.1服务器端后台进程日志写入进程负责把重做日志缓冲区的数据写入重做日志文件中永久保存。数据库写入进程在工作之前,需要了解日志写入进程是否已经把相关的日志缓冲区中记载的数据写入硬盘中,如果相关的日志缓冲区中的记录还没有被写入,DBWR会通知LGWR完成相应的工作,然后DBWR才开始写入。2.日志写入进程(LGWR)日志归档进程是一个可选进程该后台进程只有在ARCHIVELOG(归档日志)模式下才有效默认情况下只有两个归档日志进程(ARC0和ARC1)设置LOG_ARCHIVE_MAX_PROCESSES初始化参数最多可定义30个日志归档进程每个日志归档进程都分配了0~9或a~t的编号在ARCHIVELOG模式下,当进行日志切换时会自动生成归档日志文件3.日志归档进程(ARCn)检查点进程是一个可选进程作用是发出检查点(Checkpoint),实现同步数据库的数据文件、控制文件和重做日志确保数据文件、控制文件和重做日志文件的一致性4.检查点进程(CKPT)系统监控进程(SMON)在数据库系统启动时执行恢复工作合并空间碎片并释放临时段进程监控进程(PMON)监控服务器进程的执行,并在服务器进程失败时清除该服务器进程用于恢复失败的数据库用户的强制性进程可在V$BGPROCESS中查询当前启动的后台进程5.其它后台进程CONN/@orclASSYSDBACOLUMNdescriptionFORMATA30SETPAGESIZE200SELECTpaddr,pserial#,name,descriptionFROMv$bgprocessORDERBYname;1.专用服务器模式Oracle为每一个连接到例程的客户进程启动一个专门的前台服务进程专用服务器模式一般只用在密集的批操作,能让服务器进程大部分时间保持繁忙当预期客户机连接总数较少,或客户机向服务器发出的请求持续时间较长时,应采用专用服务器模式局域网环境开发的C/S结构应用系统,采用专用服务器模式有较好的性能1.3.2服务器进程结构少数共享服务器进程执行了许多连接客户的数据访问操作,很少的进程开销就可以满足大量的用户群组件包括调度器(接收客户端请求并将它们放入服务器的请求队列中)共享服务器进程(执行在服务器请求队列中的请求并将相应结果返回给服务器响应队列)队列初始化参数SHARED_SERVERS设置启动实例时需要创建的服务器进程数2.共享服务器模式1.4Oracle数据库的物理结构Oracle数据库的存储结构,包括数据的物理存储结构和逻辑存储结构,两者是互相关联的。物理存储结构是实际的数据存储单元,如文件或数据块逻辑存储结构是数据概念上的组织,如数据库或表数据文件(Datafiles)用于存储数据库数据,包括系统数据(数据字典)、用户数据(表、索引、簇等)、撤销(Undo)数据、临时数据等。系统数据是用来管理用户数据和数据库本身的数据用户数据是用于应用软件的数据,带有应用软件的所有信息,是用户存放在数据库中的信息撤销数据包含事务的回退信息临时数据是排序、分组、游标操作等生成的中间过程数据,一般由系统自动管理1.数据文件在Oracle数据库中,至少要包含一个数据文件,一个数据文件包括多个OS物理磁盘块。数据库逻辑上是由一个或多个表空间(Tablespace)组成,而表空间物理上则是由一个或多个数据文件组成,如下图所示。1.数据文件数据文件一般位于ORACLE_BASE\oradata\ORACLE_SID表空间对应的数据文件1.数据文件用于记录数据库变化在出现例程失败或介质故障时恢复数据库Oracle需要至少两个重做日志文件组循环使用重做日志文件组重做日志文件的配置和大小将会影响到系统性能Windows下默认创建3个组,每组一个文件ORACLE_BASE\oradata\orcl\REDO01.LOGORACLE_BASE\oradata\orcl\REDO02.LOGORACLE_BASE\oradata\orcl\REDO03.LOG2.重做日志文件ARCHIVELOG(归档日志)模式所有的事务重做日志都将保存在一个重做日志被覆盖前为其建立一个副本在重做日志归档工作完成之前,Oracle不对其进行覆盖数据库运行在ARCHIVELOG模式时可能增加系统开销并成为系统的瓶颈Oracle数据库有两种运行模式2.重做日志文件NOARCHIVELOG(非归档日志)模式为系统默认模式系统不保留旧的重做日志有限的恢复能力Oracle数据库有两种运行模式用于记录和维护数据库的物理结构一个例程只能访问一个数据库,通过控制文件在例程和数据库之间建立关联Oracle启动时通过控制文件查找数据文件的位置和联机重做日志。数据库运行时,控制文件被不断更新数据库至少要包含一个控制文件控制文件对数据库至关重要,应联机保存多个备份,存储在不同的磁盘上3.控制文件归档日志文件在ARCHIVELOG模式下才会生成归档日志件4.其它文件参数文件(Parameterfile)用于定义启动例程所需要的初始化参数文本格式的参数文件(PFILE)二进制服务器参数文件(ServerParameterFile,SPFILE)参数文件的默认位置:ORACLE_HOME\database文本参数文件的名称格式:initSID.ora服务器参数文件的名称格式为:SPFILESID.ora口令文件(Passwordfile)存放具有SYSDBA或SYSOPER权限的用户信息初始特权用户为SYS口令文件的默认位置:ORACLE_HOME\database口令文件名称格式:PWDSID.ora4.其它文件警告文件(Alertfile)连续的消息和错误信息组成查看Oracle内部错误也可以监视特权用户的操作应从文件尾部开始查看文件位置由初始化参数background_dump_dest确定名称格式为alert_SID.log4.其它文件后台进程跟踪文件用于记载后台进程的警告或错误信息文件位置由初始化参数background_dump_dest确定名称格式为SID_processname_SPID.trc服务器进程跟踪文件主要用于跟踪SQL语句用于诊断SQL语句的性能,并做出相应的调整文件位置由初始化参数user_dump_dest等确定名称为SID_ora_SPID.trc1.5Oracle数据库的逻辑结构数据库的逻辑结构是面向用户的,描述了数据库在逻辑上是如何组织和存储数据数据库的逻辑结构