第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页12020/2/7第1章Oracle体系结构1.1OracleServer1.2系统全局区(SGA)1.3后台进程1.4Oracle物理结构1.5Oracle逻辑结构1.6OracleServer工作原理1.7小结开始返回目录第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页22020/2/71.1OracleServer1.1.1OracleServer的发展1.1.2OracleServer的特点1.1.3OracleServer的组成第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页32020/2/71.1.1OracleServer的发展经历的阶段:1、主机系统(HOST)2、C/S体系结构(客户机/服务器)3、N-层体系结构今天的OracleServer不仅保持了对主机系统、C/S体系结构的支持,而且还提供了对N-层体系结构的支持。OracleServer123客户客户终端第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页42020/2/71.1.2OracleServer的特点第一个面向对象的关系数据库管理系统。具备传统关系数据库的所有基本特征;可管理和存储字符、数字、日期、文本和图像数据。从Oracle8开始,提供了对对象类型的支持。可管理和存储多媒体、空间、XML等数据类型。第一个基于Internet的数据库系统。Oracle8i开始,在数据库中集成了JavaVM,可用JAVA语言开发JAVA存储过程、CORBA(CommonObjectRequestBrokerArchitecture)组件和EJB(EnterpriseJavaBeans)组件。Oracle9i开始,在数据库中集成了ApacheServer和XML,开发人员可以不借助任何其他开发工具使用PL/SQL、JavaServlet、XML开发简单的WEB应用。第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页52020/2/71.1.2OracleServer的组成组成:例程(instance)和数据库(database)两部分组成。例程:一组内存结构(SGA)和后台进程的集合。SGA(SystemGlobalArea)主要包括:数据高速缓存、重做日志缓冲区、共享池三部分。后台进程主要包括:SMON、PMON、DBWR、CKPT、LGWR、ARCH等。数据库:一组OS文件的集合,由数据文件和重做日志组成。后台进程SGA控制文件数据文件重做日志数据库例程数据高速缓存重做日志共享池SMONDBWRPMONCKPTLGWRARCH第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页62020/2/71.2系统全局区(SGA)1.2.1共享池1.2.2数据高速缓存1.2.3重做日志缓冲区第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页72020/2/71.2.1共享池共享池(sharedpool)作用:存放最近执行的SQL语句和数据字典信息;大小:尺寸由初始化参数SHARED_POOL_SIZE定义。组成:由库高速缓存、数据字典高速缓存两部分组成。库高速缓存数据字典高速缓存共享池第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页82020/2/71.库高速缓存(LibraryCache)作用:存放最近执行的SQL语句信息,包括语句文本及其执行计划。执行计划:SQL语句的内部执行步骤。例:selectename,salfromwhereempno=7788;如果在empno列上无索引,则采用全表扫描;否则采用索引和ROWID定位数据。组成:包括许多上下文区(ContextArea)—共享游标。1.2.1共享池上下文区二Select语句2Select语句1Select语句1上下文区一库高速缓存工作原理:当客户端运行SQL语句时,服务器进程先检查共享游标是否存在,若存在则按照其执行计划直接执行语句,否则生成SQL语句执行计划,并将执行计划放到相应的上下文区中,然后执行该SQL语句。用途:通过共享游标,可以最小化SQL语句解析次数。第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页92020/2/72.数据字典高速缓存作用:存放数据字典信息,有表、列定义和权限信息。注意:库高速缓存和数据字典高速缓存的尺寸是动态变化的。1.2.1共享池第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页102020/2/71.2.2数据高速缓存(DatabaseBufferCache)作用:存放最近访问的数据块。组成:由许多小缓冲区(缓冲区尺寸=数据块尺寸)组成。符号:DB_BLOCK_SIZE定义标准块的尺寸;DB_CACHE_SIZE定义标准数据高速缓存尺寸。使用非标准块的规则:必须使用初始化参数DB_Nk_CACHE_SIZE(n为2、4、8、16或32)定义非标准数据高速缓存。例:假定参数DB_BLOCK_SIZE的值为4096,则:2K数据块将使用由参数DB_2K_CACHE_SIZE定义的非标准数据高速缓存;8K数据块将使用由参数DB_8K_CACHE_SIZE定义的非标准数据高速缓存;4K数据块将使用标准数据高速缓存。第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页112020/2/71.2.2数据高速缓存(DatabaseBufferCache)1.数据高速缓存工作原理Oracle采用LRU(LeastRecentlyUsed)算法管理数据高速缓存。类似于先入队先出队,后进后出队。其工作过程示意图如下。B1B1B2B3B4B5B6B7B8B9B10B11第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页122020/2/71.2.2数据高速缓存(DatabaseBufferCache)2.数据高速缓存结构读取与修改,都是在数据高速缓存中完成的。数据高速缓存的划分:(1)脏缓冲区(DirtyBuffer):指内容与相应数据块不一致的缓冲区。执行DML操作时,服务器进程修改缓冲区数据,使缓冲区和数据块不一致。(2)空闲缓冲区(FreeBuffer):指内容与数据块一致或不包含数据的缓冲区。执行SELECT操作时,缓冲区与数据块内容一致。(3)忙缓冲区(PrintedBuffer):指服务器进程正在存取的缓冲区。……LRU列表脏列表第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页132020/2/71.2.3重做日志缓冲区(RedologBuffer)作用:记载例程变化。其尺寸由初始化参数LOG_BUFFER定义。组成:由一条条重做记录(RedoRecord)组成,并且每条重做记录记载了被修改数据块的位置以及变化后的数据。如图所示。工作过程:当执行DDL或DML时,服务器进程先将变化记载到重做日志缓冲区,然后再修改数据高速缓存。B12000U11000UPDATEempSETsal=2000WHEREempno=7788;重做日志缓冲区第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页142020/2/71.2.3重做日志缓冲区(RedologBuffer)例:如图所示。当执行UPDATE操作时,新数据2000被存放到EMP段所对应的缓冲区B1中,而旧数据1000则被存放到UNDO段所对应的缓冲区U1中。在修改这两个缓冲区之前,先将它们的变化写到重做日志缓冲区中,然后再修改它们的数据。B12000U11000UPDATEempSETsal=2000WHEREempno=7788;重做日志缓冲区①②第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页152020/2/71.2.4大缓存池和Java池大缓存池(LargePool)和Java池(JavaPool):是SGA提供的两个可选的内存结构。大缓存池:为大的内存需求提供内存空间,其尺寸由初始化参数LARGE_POOL_SIZE定义;Java池:存放Java代码,其尺寸由初始化参数JAVA_POOL_SIZE定义。第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页162020/2/71.3后台进程1.3.1DBWR1.3.2LGWR1.3.3CKPT1.3.4SMON1.3.5PMON1.3.6ARCH第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页172020/2/7作用:将数据高速缓存的脏缓冲区数据写入到数据文件中。进程:默认1个DBW0进程,最多定义10个DBWR进程(DBW0~DBW9)。由设置初化参数db_write_procdsses定义进程个数。工作过程:执行DML操作时,服务器进程修改缓冲区,并将这些缓冲区标识为“脏缓冲区”。在特定情况下,这些脏缓冲区的数据被写入到数据文件中。如图所示。后台进程SGA数据高速缓存重做日志共享池在出现以下情况时,DBWR进程开始工作:系统发出检查点(checkpoint)。脏缓冲区个数达到初始化参数fast_start_io_target的值。服务器进程不能找到空闲缓冲区。数据文件控制文件重做日志1.3.1DBWR(DatabaseWrite)将脏缓冲区的数据写入到数据文件中SMONDBWRPMONCKPTLGWRARCH第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页182020/2/7作用:将重做日志缓冲区的内容写入到重做日志中。工作过程:Oracle“先日志后修改”。在将脏缓冲区数据写入到数据文件之前,LGWR先将事务变化写入到重做日志文件。即,在DBWR之前,LGWR先将事务变化写入到重做日志。如图所示。后台进程SGA数据高速缓存重做日志共享池在以下情况,LGWR进程开始工作:提交事务(COMMIT)。每隔三秒钟。在DBWR进程将缓冲区写入到数据文件之前。重做日志缓冲区已有三分之一填满。SMONDBWRPMONCKPTLGWR数据文件控制文件重做日志1.3.2LGWR(LogWrite)LGWR将事务变化写入到重做日志ARCH第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页192020/2/7作用:用于发出检查点(Checkpoint),用于同同步数据库的数据文件、控件文件和重做日志。工作过程:当发出检查点时,后台进程CKPT将检查点时刻的SCN(SystemChangNumber)写入到控制文件和数据文件头部,同时促使后台进程DBWR将所有脏缓冲区写入到数据文件中。如图所示。说明:发出检查点时,不仅后台进程CKPT和DBWR要开始工作,而且LGWR也会将重做日志缓冲区写入到重做日志,从而确保了数据文件、控制文件和重做日志的一致性。SGA数据高速缓存重做日志共享池在以下情况,CKPT进程开始工作:日志切换。关闭例程(SHUTDOWNABORT除外)。手工检查点操作。由初始化参数LOG_CHECKPOINT_INTERVAL和LOG_CHECKPOINT_TIMEOUT强制发出。DBWRCKPTPMONSMONLGWR数据文件控制文件重做日志1.3.3CKPT(CheckpointProcess)LGWR将事务变化写入到重做日志ARCH后台进程第二部分系统管理第1章Oracle体系结构上一页下一页返回本章首页202020/2/7作用:用于执行例程恢复、合并空间碎片并释放临时时段。CKPT进程工作:假定在数据库运行过程中出现了例程失败(断电、内存故障、后台进程例外),此时SGA的信息尚未被写到磁盘(数据文件、重做日志)。当重新打开数据库时,后台进程SMON会自动执行例程恢复:REDO。重新应用那些被记载到重做日志,但尚未记载到数据文件中的数据。打开数据库。在打一数据库时,既包含了被提交的数据,也包含了未被提交