Oracle9i数据库体系结构.ppt
Oracle9i数据库体系结构,Oracle9i数据库体系结构,Oracle9i 物理结构,SGA(System Global Area),Background Processes,Servers,Users,Data Files,Redo Log Files,Control Files,Parameter File,Server Parameter File,5,日志文件(Redo Log Files),Redo Log 文件记录对于数据库的所有修改,用于数据库的恢复 如果对于日志文件进行镜像,则相同的 Redo Log 信息被写入多个联机的 Redo Log文件中Oracle运行NOARCHIVELOG时只有历史日志,没有归档日志,6,日志文件(Redo Log Files),每个Oracle数据库至少有两个Redo Log日志文件组,每组有一个或多个日志文件建议对Redo Log 文件进行镜像,以保证数据库安全运行建议使用四个Redo Log文件组,每组2或3个日志文件组内Redo Log 文件位于不同磁盘Redo Log文件是循环使用的,Servers,Users,Data Files,Redo Log Files,Database Buffer Cache,Shared Pool,Redo Log Buffer,SGA(System Global Area),DBWR,ARCH,LGWR,日志产生过程,1,2,3,8,Redo Log 文件镜像,一个日志组中 Redo Log 文件具有相同的信息选择合适的日志文件大小组中的成员同时被更新每组应包含与其他组中数目相同的日志成员镜像的 Redo Log文件可以防止 Redo Log文件丢失,Oracle9i Database(Windows NT),Oracle9i Database(Unix),11,日志切换,当ORACLE从一个Redo Log文件切换到另一个日志文件时发生日志切换当LGWR写满一组日志文件时发生日志切换DBA可强制日志切换数据库关闭时发生日志切换日志切换时,当前日志文件被赋予一个新的日志序列号,用于标识其中的信息日志切换时产生检查点CKPT(Checkpoint),Redo Log文件组,Group1 Member A,Group2 Member A,Group3 Member A,Group1 Member B,Group2 Member B,Group3 Member B,Group1 Member C,Group2 Member C,Group3 Member C,Log File 1,Log File 2,Log File 3,Oracle9i for Unix 日志文件结构(Sun Solaris),redo01.log,redo02.log,redo03.log,三个日志文件组,每组一个日志成员,Oracle9i 日志文件结构(Windows NT),Redo01.log,三个日志文件组,每组一个日志成员,Redo02.log,Redo03.log,Oracle9i数据库参数文件,服务器参数参数spfile,Server Parameter File,文本参数pfile,Parameter File,16,控制文件(Control Files),控制文件是描述数据库结构的二进制文件控制文件所有必须的数据文件和日志文件在控制文件中标识数据库名存储在控制文件中控制文件用于打开和存取数据库数据库恢复所需的同步信息存储在控制文件中控制文件数据库的物理组成与控制文件中的记录不同时,系统则不能正常启动或发生down机现象,17,控制文件(Control Files),建议设置:至少使用两个控制文件,并存放于不同磁盘参数 Control_Files指明控制文件控制文件的镜像可以在数据库创建或创建完成后进行,Oracle9i Database(Windows NT),Oracle9i Database(Unix),Oracle9i 逻辑结构,Database,Tablespace,Segment,Data,Index,Temp,Rollback,Extent,Free,Used,Data Block,Part of,Part of,Oracle9i数据库的逻辑结构,表空间,Oracle表空间类型,数据字典管理表空间(Oracle7,8,8i),本地化管理表空间(Oracle8i,9i),Uniform,AutoAllocate,Oracle表空间类型,24,Oracle9i临时段管理,Oracle9i的缺省临时表空间(Default Temporary Tablespace)用于用户排序时SQL的Order by语句使用,在创建用户时指定用户缺省的临时表空间。在Oracle9i中,允许数据库管理员重新创建并设置系统临时表空间,而不使用系统表空间作为排序、汇总等临时表空间使用。如果系统设置了系统缺省临时表空间,则用户不得使用其他表空间作为临时表空间使用。,25,回退段(Rollback Segments),为什么要设回退段?回退段是数据库的一部分,是Oracle 数据库的一个重要参数,其设计是否正确直接影响到数据库的动态性能。Rollback 段的使用用于保存一个事务的操作,以便在某些情况下回退或取消操作。每个Oracle数据库都有多个回退段回退段的作用并发操作时,保证数据的读一致性使用 SQL语句rollback回退一个事务的操作,26,回退段(Rollback Segments),事务恢复的需要回退段操作举例由于语句错误回退一个事务回退一个事务、或回退事务到一个保存点(SavePoint)由于异常进程中断而回退在例程恢复中回退所有没未完成的事务,Oracle9i自动Undo空间管理在Oracle8i以前的数据库中,对于回退段的设置与管理已一直是一个十分复杂的工作,其正确的设置既困难又费时。对于大的事务往往产生回退段不足的错误,或在RBS表空间回退段中消耗过大。Oracle9i 引如了一个新的概念,即Automatic Undo Management,Undo空间自动管理。在Oracle9i中,可以使用传统的回退段,也可以使用Undo表空间,Oracle9i对Undo空间自动管理,使回退段的管理变的十分容易。在 Oracle9i 中,可以使用自动Undo管理代替回退段,Oracle9i使用Undo表空间,并对Undo空间自动管理。,Oracle9i自动Undo空间管理在Oracle8i中,私通使用手动管理Undo空间,使用在RBS表空间中创建大的回退段的方法处理大的事务,由于一个事务只可以使用一个回退段,当一个回退段动态扩展超过区最大值、或超过数据文件的允许扩展范围时,将产生回退段不足的错误,事务被进行过程被终止。在Oracle9i中,一个事务可以使用多个回退段。使用Oracle9i的Undo空间自动管理特点,当一个回退段不足时,Oracle会自动使用其他回退段,不终止事务的运行。在Oracle9i中,数据库管理员只需了解Undo表空间是否有足够的空间即可。,自动Undo空间管理,Oracle9i 内存结构,Servers,Users,Data Files,Redo Log Files,Database Buffer Cache,Shared Pool,Redo Log Buffer,SGA(System Global Area),DBWR,ARCH,LGWR,系统全局区SGA,Servers,Users,Data Files,Redo Log Files,Database Buffer Cache,Shared Pool,Redo Log Buffer,SGA,DBWR,ARCH,LGWR,数据缓冲区(Database Buffer Cache),DB数据缓冲区,Dirty list,.,LRU list,.,Datafiles,Data files,数据缓冲区(Database Buffer Cache),Server,DBWR,SGA,Free,Dirty,Pinned,Oracle9i动态内存管理Oracle7、Oracle8、Oracle8i数据库中,整个数据库使用统一的数据块大小,并且在所有的数据库结构中都是相同的。数据块的大小由参数DB_BLOCK_SIZE确定,在数据库创建后不得修改。由于使用了统一的数据块大小的数据结构,在所有的存储对象中数据组织单元都是相同的。如果两个数据库使用的数据块不同,则表空间的移动受到了限制。在Oracle9i中,允许不同的数据段使用不同数据块。对于大表可以存储在大数据块的表空间,小表存储在小的数据块表空间,对于系统表空间、临时表空间及其他缺省设置的表空间使用标准的数据块DB_BLOCK_SIZE(该参数在参数文件中设置,非标准数据块在创建表空间时由参数 BLOCKSIZE确定)。,Oracle9i 内存参数改变,DB_BLOCK_SIZE与BLOCKSIZE,Oracle9i动态内存管理使用BLOCKSIZE与DB_nK_CACHE_SIZE,实现缓冲区的动态管理,例如:DB_BLOCK_SIZE=4096 DB_CACHE_SIZE=12M DB_2K_CACHE_SIZE=8M DB_8K_CACHE_SIZE=4M BLOCKSIZE不得用于标准块:如DB_BLOCK_SIZE=2048,则不得设置参数 DB_2k_CACHE_SIZE,标准块必须使用 DB_CACHE_SIZE设置,DB_BLOCK_SIZE与BLOCKSIZE,DB_BLOCK_SIZE与BLOCKSIZE,SQL select tablespace_name,block_size 2 from dba_tablespaces;TABLESPACE_NAME BLOCK_SIZE-SYSTEM 4096SYS_UNDOTS 4096TEMP_TBS 4096USERS 4096SALES_DATA 8192,Servers,Users,Data Files,Redo Log Files,Database Buffer Cache,Shared Pool,Redo Log Buffer,SGA,DBWR,ARCH,LGWR,日志缓冲区(Redo Log Buffer),Servers,Users,Data Files,Database Buffer Cache,Shared Pool,SGA,DBWR,共享池(Shared Global Area),Servers,Servers,Users,Users,Shared Global Area,共享池SHARED_POOL_SIZE包括:1.库缓冲(Library cache)2.数据词典缓冲(Data dictionary cache)3.用户全局区(UGA),Database buffer cache,Redo log buffer,Shared pool,Library cache,Data dictionary cache,User global area,共享池(The Shared Pool),1.大小由参数SHARED_POOL_SIZE确定2.库缓冲(Library cache)含有 SQL语句、分析码、执行计划。3.数据字典缓冲(Data dictionary cache)含有从 数据字典中得到的表、列定义、权限。4.UGA含有用户的MTS会话信息。,Librarycache,UGA,Datadictionarycache,Oracle9i 实例的进程结构,43,Oracle启动时,将分配系统全局区SGA并启动Oracle后台进程(Background Processes)。内存区域和后台进程合称为一个Oracle实例(Instance)。SGA是由Oracle为一个实例分配的一组共享内存区域后台进程异步地为所有的数据库用户执行不同的任务参数文件决定了实例的特征及大小不正确的参数文件,会导致实例启动失败Oracle数据库的Instance决定了动态运行的数据库的ORACLE_SID,Oracle实例(Instance),System Global Area,Background Processes,Servers,Users,Data Files,Redo Log Files,Control Files,Oracle数据库进程结构,Oracle可以在多进程和单进程配置下工作。多进程配置多个进程执行Oracle代码的不同部分多进程允许多个用户同时使用单进程配置所有的Oracle代码由一个进程执行单进程实例只允许单个用户使用主要用于单任务的机器上通常使用的Oracle都是多进程实例结构,Database Buffer Cache,Shared Pool,SGA,Oracle数据库单进程结构,ORACLE RDBMS SERVER,应用软件,Database Buffer Cache,Shared Pool,SGA,LISTENER,Oracle数据库多进程结构,DBWR,LGWR,Dnnn,USER,RECO,CKPT,SMON,PMON,ARCH,用户进程与服务器进程,Servers,Users,Data Files,Database Buffer Cache,Shared Pool,SGA,DBWR,User与Server进程,Servers,Servers,Users,Users,50,用户进程与服务器进程,用户进程(User Process)在用户运行应用程序时自动产品产生系统创建服务器进程(Server Process)处理用户进程的请求Server进程和User进程通信并为所连接的User进程请求服务,51,Server进程工作过程:,分析、编译、执行用户的SQL语句确定执行计划,形成分析树从磁盘数据文件将数据读入SGA的共享数据库缓冲区将SQL语句的结果返回给用户进程相同的SQL代码只编译一次存在SQL优化问题,DBWR进程,53,DBWR进程,在存储数据之前,服务器进程必须将数据放入数据缓冲区快存中修改后的数据块通过后台进程:数据库写(Database Writer-DBWR)写回磁盘为处理SQL语句,Server进程使用了SGA中的共享内存,54,DBWR 进程,DBWR管理Database Buffer Cache以便user进程总能找到空闲的缓冲区将所有修改后的缓冲区数据写入数据文件使用LRU算法来将最近使用过的块保留在内存中通过延迟写来优化磁盘I/O读写可以启动多个数据写入进程参数DB_WRITER_PROCESSES决定DBWR启动的个数进程名称分别为DBW0、DBW1、DBWj,55,DBWR 进程,DBWR在下面情况将dirty缓冲区写入磁盘:dirty队列达到一定长度某个进程在LRU队列中扫描指定数目的缓冲区仍没有找到空闲缓冲区超时(Time_Out)发生检验点(checkpoint)发生,LGWR进程,Servers,Users,Data Files,Redo Log Files,Database Buffer Cache,Shared Pool,Redo Log Buffer,SGA,DBWR,ARCH,LGWR,日志产生过程,1,2,3,58,LGWR进程,LGWR在下面情况将Redo Log缓冲区的信息写入Redo Log文件:发生数据提交Redo Log缓冲区池达到总数的三分之一时超时(Time_Out)发生DBWR需为检验点(checkpoint)清除缓冲区块时,59,LGWR 进程,每一个例程(instance)只有一个Redo Log写进程直到事务已被写入redo log文件,提交确认才被执行并发提交使每次提交的平均 I/O数小于1,PMON与SMON,PMON,LCKn,RECO,SMON,CKPT,ARCH 进程,归档进程(ARCH,Archiver Process)在联机Redo Log 文件存满时将它们存储到指定的存储设备。,62,归档进程(ARCH),将Redo Log 文件写到磁盘或磁带机上用于介质失败时的数据库恢复ARCH只有当日志文件组切换时才工作ARCH是可选的,由参数LOG_ARCHIVE_START启动ARCH可写到磁带或磁盘上,Servers,Users,Data Files,Redo Log Files,Database Buffer Cache,Shared Pool,Redo Log Buffer,SGA,DBWR,ARCH,LGWR,CKPT进程,CKPT,64,检验点,在检验点(checkpoint),DBWR将database buffer cache 中的所有的dirty 缓冲区写入磁盘,以保证上一个检验点以来修改过的所有数据块都被真正写到磁盘。,65,检验点产生条件:,在每个日志切换上一个检验点之后,又经过了指定的时间从上一个检验点之后,当预定义数量的Redo Log块被写入磁盘之后例程关闭DBA强制产生当表空间置为offline时,66,检验点:,在检验点发生时和日志切换之后,LGWR将更新数据库头和控制文件参数LOG_CHECKPOINT_TIMEOUT决定一个检验点发生的时间间隔参数LOG_CHECKPOINT_INTERVAL决定执行一个检验点需要填充的Redo Log文件块的数目,67,CKPT进程,数据库检验点保证所有修改过的数据库缓冲区都被写入数据库文件。在给定的时间,数据库文件作上“当前”标记并将检验点记录在控制文件。检验点:例程恢复时只需提供从上一个点验点以来的修改。在保证在该文件中的信息已被写入相应的数据文件后,允许重用一个Redo Log文件。检验点既不中断活动,也不影响当前事务。检验点完成后更新数据库头和控制文件。增加检验点次数可以减少例程失败时恢复所需的时间,但降低了数据库动态性能。,RECO与LCKN进程,PMON,LCKn,RECO,SMON,CKPT,69,RECO与LCKN进程,调度进程Dnnn:MTS结构中对于用户进程的调度。恢复进程RECO:RECO(Recovery Process)解决涉及分布式事务处理的失败。封锁进程LCKn:LCKN(Lock,Process)在并行服务器系统中执行例程间的封锁。,