Oracle9i数据库体系结构Oracle9i数据库体系结构Oracle9i物理结构SGA(SystemGlobalArea)BackgroundProcessesServersUsersDataFilesRedoLogFilesControlFilesParameterFileServerParameterFileE_mail:tengyc@263.net5日志文件(RedoLogFiles)RedoLog文件记录对于数据库的所有修改,用于数据库的恢复如果对于日志文件进行镜像,则相同的RedoLog信息被写入多个联机的RedoLog文件中Oracle运行NOARCHIVELOG时只有历史日志,没有归档日志E_mail:tengyc@263.net6日志文件(RedoLogFiles)每个Oracle数据库至少有两个RedoLog日志文件组,每组有一个或多个日志文件建议对RedoLog文件进行镜像,以保证数据库安全运行建议使用四个RedoLog文件组,每组2或3个日志文件组内RedoLog文件位于不同磁盘RedoLog文件是循环使用的ServersUsersDataFilesRedoLogFilesDatabaseBufferCacheSharedPoolRedoLogBufferSGA(SystemGlobalArea)DBWRARCHLGWR日志产生过程123E_mail:tengyc@263.net8RedoLog文件镜像一个日志组中RedoLog文件具有相同的信息选择合适的日志文件大小组中的成员同时被更新每组应包含与其他组中数目相同的日志成员镜像的RedoLog文件可以防止RedoLog文件丢失Oracle9iDatabase(WindowsNT)Oracle9iDatabase(Unix)E_mail:tengyc@263.net11日志切换当ORACLE从一个RedoLog文件切换到另一个日志文件时发生日志切换当LGWR写满一组日志文件时发生日志切换DBA可强制日志切换数据库关闭时发生日志切换日志切换时,当前日志文件被赋予一个新的日志序列号,用于标识其中的信息日志切换时产生检查点CKPT(Checkpoint)RedoLog文件组Group1MemberAGroup2MemberAGroup3MemberAGroup1MemberBGroup2MemberBGroup3MemberBGroup1MemberCGroup2MemberCGroup3MemberCLogFile1LogFile2LogFile3Oracle9iforUnix日志文件结构(SunSolaris)redo01.logredo02.logredo03.log三个日志文件组,每组一个日志成员Oracle9i日志文件结构(WindowsNT)Redo01.log三个日志文件组,每组一个日志成员Redo02.logRedo03.logOracle9i数据库参数文件服务器参数参数spfileServerParameterFile文本参数pfileParameterFileE_mail:tengyc@263.net16控制文件(ControlFiles)控制文件是描述数据库结构的二进制文件控制文件所有必须的数据文件和日志文件在控制文件中标识数据库名存储在控制文件中控制文件用于打开和存取数据库数据库恢复所需的同步信息存储在控制文件中控制文件数据库的物理组成与控制文件中的记录不同时,系统则不能正常启动或发生down机现象E_mail:tengyc@263.net17控制文件(ControlFiles)建议设置:至少使用两个控制文件,并存放于不同磁盘参数Control_Files指明控制文件控制文件的镜像可以在数据库创建或创建完成后进行Oracle9iDatabase(WindowsNT)Oracle9iDatabase(Unix)Oracle9i逻辑结构DatabaseTablespaceSegmentDataIndexTempRollbackExtentFreeUsedDataBlockPartofPartofOracle9i数据库的逻辑结构表空间Oracle表空间类型数据字典管理表空间(Oracle7,8,8i)本地化管理表空间(Oracle8i,9i)UniformAutoAllocateOracle表空间类型E_mail:tengyc@263.net24Oracle9i临时段管理Oracle9i的缺省临时表空间(DefaultTemporaryTablespace)用于用户排序时SQL的Orderby语句使用,在创建用户时指定用户缺省的临时表空间。在Oracle9i中,允许数据库管理员重新创建并设置系统临时表空间,而不使用系统表空间作为排序、汇总等临时表空间使用。如果系统设置了系统缺省临时表空间,则用户不得使用其他表空间作为临时表空间使用。E_mail:tengyc@263.net25回退段(RollbackSegments)为什么要设回退段?回退段是数据库的一部分,是Oracle数据库的一个重要参数,其设计是否正确直接影响到数据库的动态性能。Rollback段的使用用于保存一个事务的操作,以便在某些情况下回退或取消操作。每个Oracle数据库都有多个回退段回退段的作用并发操作时,保证数据的读一致性使用SQL语句rollback回退一个事务的操作E_mail:tengyc@263.net26回退段(RollbackSegments)事务恢复的需要回退段操作举例由于语句错误回退一个事务回退一个事务、或回退事务到一个保存点(SavePoint)由于异常进程中断而回退在例程恢复中回退所有没未完成的事务Oracle9i自动Undo空间管理在Oracle8i以前的数据库中,对于回退段的设置与管理已一直是一个十分复杂的工作,其正确的设置既困难又费时。对于大的事务往往产生回退段不足的错误,或在RBS表空间回退段中消耗过大。Oracle9i引如了一个新的概念,即AutomaticUndoManagement,Undo空间自动管理。在Oracle9i中,可以使用传统的回退段,也可以使用Undo表空间,Oracle9i对Undo空间自动管理,使回退段的管理变的十分容易。在Oracle9i中,可以使用自动Undo管理代替回退段,Oracle9i使用Undo表空间,并对Undo空间自动管理。Oracle9i自动Undo空间管理在Oracle8i中,私通使用手动管理Undo空间,使用在RBS表空间中创建大的回退段的方法处理大的事务,由于一个事务只可以使用一个回退段,当一个回退段动态扩展超过区最大值、或超过数据文件的允许扩展范围时,将产生回退段不足的错误,事务被进行过程被终止。在Oracle9i中,一个事务可以使用多个回退段。使用Oracle9i的Undo空间自动管理特点,当一个回退段不足时,Oracle会自动使用其他回退段,不终止事务的运行。在Oracle9i中,数据库管理员只需了解Undo表空间是否有足够的空间即可。自动Undo空间管理Oracle9i内存结构ServersUsersDataFilesRedoLogFilesDatabaseBufferCacheSharedPoolRedoLogBufferSGA(SystemGlobalArea)DBWRARCHLGWR系统全局区SGAServersUsersDataFilesRedoLogFilesDatabaseBufferCacheSharedPoolRedoLogBufferSGADBWRARCHLGWR数据缓冲区(DatabaseBufferCache)DB数据缓冲区Dirtylist....LRUlist....DatafilesDatafiles数据缓冲区(DatabaseBufferCache)ServerDBWRSGAFree,Dirty,PinnedServersUsersDataFilesRedoLogFilesDatabaseBufferCacheSharedPoolRedoLogBufferSGADBWRARCHLGWR日志缓冲区(RedoLogBuffer)ServersUsersDataFilesDatabaseBufferCacheSharedPoolSGADBWR共享池(SharedGlobalArea)ServersServersUsersUsersOracle9i实例的进程结构E_mail:tengyc@263.net37Oracle启动时,将分配系统全局区SGA并启动Oracle后台进程(BackgroundProcesses)。内存区域和后台进程合称为一个Oracle实例(Instance)。SGA是由Oracle为一个实例分配的一组共享内存区域后台进程异步地为所有的数据库用户执行不同的任务参数文件决定了实例的特征及大小不正确的参数文件,会导致实例启动失败Oracle数据库的Instance决定了动态运行的数据库的ORACLE_SIDOracle实例(Instance)SystemGlobalAreaBackgroundProcessesServersUsersDataFilesRedoLogFilesControlFilesOracle数据库进程结构Oracle可以在多进程和单进程配置下工作。多进程配置多个进程执行Oracle代码的不同部分多进程允许多个用户同时使用单进程配置所有的Oracle代码由一个进程执行单进程实例只允许单个用户使用主要用于单任务的机器上通常使用的Oracle都是多进程实例结构DatabaseBufferCacheSharedPoolSGAOracle数据库单进程结构ORACLERDBMSSERVER应用软件DatabaseBufferCacheSharedPoolSGALISTENEROracle数据库多进程结构DBWRLGWRDnnnUSERRECOCKPTSMONPMONARCH用户进程与服务器进程ServersUsersDataFilesDatabaseBufferCacheSharedPoolSGADBWRUser与Server进程ServersServersUsersUsersE_mail:tengyc@263.net44用户进程与服务器进程用户进程(UserProcess)在用户运行应用程序时自动产品产生系统创建服务器进程(ServerProcess)处理用户进程的请求Server进程和User进程通信并为所连接的User进程请求服务E_mail:tengyc@263.net45Server进程工作过程:分析、编译、执行用户的SQL语句确定执行计划,形成分析树从磁盘数据文件将数据读入SGA的共享数据库缓冲区将SQL语句的结果返回给用户进程相同的SQL代码只编译一次存在SQL优化问题DBWR进程E_mail:tengyc@263.net47DBWR进程在存储数据之前,服务器进程必须将数据放入数据缓冲区快存中修改后的数据块通过后台进程:数据库写(DatabaseWriter-DBWR)写回磁盘为处理SQL语句,Server进程使用了SGA中的共享内存E_mail:tengyc@263.net48DBWR进程DBWR管理DatabaseBufferCache以便user进程总能找到空闲的缓冲区将所有修改后的缓冲区数据写入数据文件使用LRU算法来将最近使用过的块保留在内存中通过延迟写来优化磁盘I/O读写可以启动多个数据写入进程参数DB_WRITER_PROCESSES决定DBWR启动的个数进程名称分别为DBW0、DBW1、、、DBWjE_mail:tengyc@263.net49DBWR进程DBWR在下面情况将dirty缓冲区写入磁盘:dirty队列达到一定长度某个进程