第10章Oracle体系结构10.1体系结构概述10.2存储结构10.3软件结构10.4数据字典第10章Oracle体系结构10.1体系结构概述-网络结构客户机侦听器服务器进程数据库数据库实例1243•侦听器接收客户连接请求•侦听器启动服务器进程•侦听器提供服务器进程的地址给客户•客户连接到服务器进程•服务器进程同数据库进行交互。10.1体系结构概述-数据库处理过程1、编译(PARSE)编译是SQL语句处理的第一步,Oracle数据库主要进行:①检查语法和根据字典来检查表名、列名。②确定用户执行语句的权限。③为语句确定最优的执行计划。④从SQL区中找出语句。2、执行(Execute)Oracle执行阶段执行的是被分析过的语句。对于UPDATE、DELETE语句,oracle先锁住有关的行。Oracle还要查找数据是否在数据缓冲区里。如果不在还得从数据文件中将数据读到数据缓冲区中。3、提取(Fetch)select语句处理。2019/7/31510.1体系结构概述-总体结构2019/7/31610.1体系结构概述-总体结构1.Oracle服务器有实例(Instance)和数据库(Database)两大部分组成。2.实例由内存和一组进程组成。3.数据库则有一系列物理文件组成,这些物理文件是数据库的载体。4.用户通过实例访问数据库。5.一般情况下,一个实例对应一个数据库,但在特殊情况下,并非一一对应,例如实时应用集群的并行系统中,一个数据库对应多个实例。数据库与实例每一个Oracle数据库都是一个数据的集合,这些数据包含在一个或多个文件中。数据库有物理和逻辑两种结构。Oracle实例由被称为系统全局区(systemglobalarea,SGA)的内存区域和相应的后台进程组成。这些后台进程负责SGA和数据库磁盘文件之间的交互系统全局区(SGA)SGA是ORACLE系统为实例分配的一组共享缓冲存储区,用于存放数据库数据和控制信息,以实现对数据库数据的管理和操作。后台进程为所有数据库用户异步完成各种任务。用于数据库的各种数据操作。DBWR数据库写进程LGWR日志写进程SMON系统监控进程PMON进程监控进程数据库结构ORACLE数据库中的数据逻辑存储在表空间中,物理存储在数据文件中。2019/7/311210.1体系结构概述-总体结构(1)Oracle实例实例又称为数据库服务器,有SGA(SystemGlobalArea,系统全局区)和一组后台进程组成,SGA和这组后台进程被所有用户共享。数据库实例在数据库启动时建立,建立时给数据库分配共享内存区SGA和一系列后台进程。SGA用于存放最近常从数据库中查询的数据和一些数据库控制信息。SGA主要包括共享池、数据缓冲区和日志缓冲区。Oracle中的后台进程可以看作是操作者,操作内存和磁盘I/O等资源。实例是Oracle服务器的核心,数据库的存取和控制都由实例来完成。2019/7/311310.1体系结构概述-总体结构(2)数据库数据库即存在磁盘上的物理文件,包括:①数据文件②控制文件③日志文件数据库安装完后,通过文件系统可以访问到这些物理文件。这些物理文件是数据库的载体,数据库中的所有数据(包括系统数据)都在这些物理文件中。表空间段区数据库块10.2存储结构-逻辑结构模式对象Oracle逻辑结构图表空间是数据库中的基本逻辑结构,一系列数据文件的集合。一个表空间可以包含多个数据文件一个数据文件只能属于一个表空间。表空间数据库Data1.Ora1MBData2.Ora1MBSYSTEM表空间Data3.Ora4MBUSER表空间数据文件•数据库的控制空间分配(例如表和索引)•为数据库用户设置空间配额•备份或恢复数据以下类型的表空间:(1)System表空间(2)回滚表空间(RollBackTableSpace)(3)临时表空间(TempTableSpace)(4)用户表空间1.表空间的分类在数据库中使用多个表空间具有如下优势:(1)能够将数据字典与用户数据分离开来,避免由于字典对象和用户对象保存在同一个数据文件中而产生的1/0冲突。(2)能够将回退数据与用户数据分离开来,避免由于硬盘损坏而导致永久性的数据丢失。(3)能够将表空间的数据文件分散保存到不同硬盘上,平均分布物理1/0操作。2.表空间的使用(4)能够将某个表空间设置为脱机状态或联机状态,以便对数据库的一部分进行备份和恢复。(5)能够将某个表空间设置为只读状态,从而将数据库的一部分设置为只读状态。(6)能够为某种特殊用途专门设置一个表空间,比如临时表空间等,以优化表空间的使用效率。(7)能够更加灵活地为用户设置表空间限额。查看表空间信息与表空间相关的视图段类型说明V$TABLESPACE控制文件中保存的所有表空间的名称和数量DBA_TABLESPACES所有表空间的描述信息USER_TABLESPACES所有用户可访问表空间的描述信息DBA_TABLESPACE_GROUPS所有表空间组及其所属的表空间信息DBA_SEGMENTS所有表空间中的区间信息USER_SEGMENTS所有用户表空间中的区间信息DBA_FREE_SPACE所有表空间中的空闲区间信息USER_FREE_SPACE所有用户表空间中的空闲区间信息V$DATAFILE所有数据文件信息V$TEMPFILE所有临时文件信息DBA_DATA_FILES显示所有属于表空间的数据文件信息DBA_TEMP_FILES显示所有属于临时表空间的临时文件信息查看表空间信息【例】查看视图V$TABLESPACE中表空间的内容和数量,代码及执行结果如下:SQLSELECT*FROMV$TABLESPACE;[结果为:]TS#NAMEINCBIGFLAENC----------------------------0SYSTEMYESNOYES1UNDOTBS1YESNOYES2SYSAUXYESNOYES4USERSYESNOYES3TEMPNONOYES6EXAMPLEYESNOYES7ORCLTBS01YESNOYES8ORCLTBS02YESNOYES已选择8行。查看表空间信息【例】通过视图DBA_TABLESPACES查看所有表空间的信息,代码及执行结果如下:SQLSELECTTABLESPACE_NAME,CONTENTS,STATUSFROMDBA_TABLESPACES;结果为:TABLESPACE_NAMECONTENTSSTATUS------------------------SYSTEMPERMANENTONLINEUNDOTBS1UNDOONLINESYSAUXPERMANENTONLINETEMPTEMPORARYONLINEUSERSPERMANENTONLINEEXAMPLEPERMANENTONLINEORCLTBS01PERMANENTONLINEORCLTBS02PERMANENTONLINE已选择8行。查看表空间信息“表空间管理”页面操作按钮创建表空间1.本地管理表空间【例】在CREATETABLESPACE语句中使用EXTENTMANAGEMENTLOCAL子句,可以创建一个本地管理表空间,代码如下:SQLCREATETABLESPACEMyTBS1DATAFILE'C:\oracle\product\10.2.0\oradata\bookstor\MyTBS1.dbf'SIZE50MEXTENTMANAGEMENTLOCALAUTOALLOCATE;显示结果:表空间已创建。创建表空间【例】在创建表空间OrclTBS02时,指定其最小区间为128KB,代码如下:SQLCREATETABLESPACEMyTBSDATAFILE'C:\oracle\product\10.2.0\oradata\bookstor\MyTBS.dbf'SIZE30MEXTENTMANAGEMENTLOCALUNIFORMSIZE128K;结果为:表空间已创建。创建表空间创建表空间页面删除表空间DROPTABLESPACE语句删除表空间。【例】删除表空间mytbs1:SQLDROPTABLESPACEmytbs1;表空间已删除。INCLUDINGCONTENTSANDDATAFILE子句可以在删除表空间的同时,删除包含的段和数据文件:SQLDROPTABLESPACEmytbsINCLUDINGCONTENTSANDDATAFILES;段•段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库存储的角度来看的。•一个段只能属于一个表空间,当然一个表空间可以有多个段。•表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的关系,段不直接和数据文件发生关系。•一个段可以属于多个数据文件,关于段可以指定扩展到哪个数据文件上面。段段基本可以分为以下四种:①数据段(DataSegment)②索引段(IndexSegment)③回滚段(RollbackSegment)④临时段(TemporarySegment)数据段中保存的是表中的记录。1.数据段在Oracle数据库中每个未分区索引都有一个索引段保存索引中的索引条目。对于一个分区索引,每个分区都有一个索引段保存它的数据。2.索引段当处理查询时,Oracle可能会需要使用到一些临时存储空间,用于临时保存解析过的查询语句以及在排序过程中产生的临时数据。Oracle会自动在专门用于存储临时数据的表空间为操作分配临时段。3.临时段回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的作用主要有以下几方面:(1)事务回滚(2)事务恢复(3)读一致性4.回滚段回滚段数据库操作老旧的数据产生新的数据回滚段表区是由很多连续的数据块组成的数据库存储空间。缺省情况下,数据库会使用表空间中默认的存储参数来管理他们的区。在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(MaxExtent)或没有可用的磁盘空间可以申请。多个区间对ORACLE是有性能影响的,ORACLE建议把数据分布在尽量少的区间上,以减少ORACLE的管理与磁头的移动。区数据库块也称逻辑块或Oracle块,它对应磁盘上一个或多个物理块,它的大小由初始化参数db_block_size(在文件init.ora中)决定,典型的大小是8k。ORACLE最基本的存储单位,是OS数据块的整数倍。ORACLE的操作都是以块为基本单位一个区间可以包含多个块(如果区间大小不是块大小的整数倍,ORACLE实际也扩展到块的整数倍)。数据库块Oracle存储结构2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb2Kb数据块扩展区扩展区段Oracle数据库的模式对象包括表、视图、序列、同义词、索引、触发器、存储过程等。模式对象数据文件日志文件控制文件参数文件10.2存储结构-物理结构Oracle物理存储结构2019/7/3148数据库文件PasswordfileParameterfileArchivedlogfilesControlfilesDatafilesRedologfilesDatabase数据库文件1.数据文件用来存储数据库中的全部数据,如数据库表中的数据和索引数据。通常为后缀名为.dbf格式的文件。2.其特点如下:①每一个数据文件只与一个数据库相联系。②一个表空间可包含一个或多个数据文件。数据文件//以管理员身份连接SQLconnsys/oracleassysdba;SQLselectnamefromv$datafile;NAME----------------