1第3章Oracle体系结构2数据库和实例Oracle数据库服务器由数据库和实例组成。在Oracle中,数据库是静态的,是以文件的形式存在的,是文件的集合。实例是有关数据库管理和控制的一系列进程,以及他们共享的系统全局区SGA3Oracle结构图Oracle数据库服务器实例数据库Oracle进程SGA区后台进程物理存储逻辑存储数据文件控制文件日志文件初始化文件密码文件归档文件表空间段区块服务进程4访问Oracle数据库当客户应用或工程程序要访问Oracle数据库时,必须首先连接到OracleServer,然后才能访问数据库数据。当在Sql*Plus中键入用户名、口令和网络连接串之后,就可以连接到OracleServer了,此时会在客户端启动对应于Sql*Plus应用进程,该进程称为“用户进程”,同时在服务器端OracleServer会自动为该用户进程派生一个新的进程,该进程为服务器进程。5当客户端运行SQL语句时,用户进程会通过网络将该SQL语句发送到对应的服务器进程,并且由服务器进程执行该SQL语句,服务器进程在执行了SQL语句之后,会将SQL语句的结果通过网络发送到用户进程。客户端的所有SQL操作都是由服务器进程来执行的。后台进程6数据库操作模式专用服务器为每个连接到实例的用户进程启动一个专门的服务进程。共享服务器当用户程序向系统发出请求时,监听器分配一个负荷最轻的调度进程来处理用户请求。7Oracle结构图Oracle数据库服务器实例数据库Oracle进程SGA区后台进程服务进程物理存储逻辑存储数据文件控制文件日志文件初始化文件密码文件归档文件表空间段区块8请大家看一下书上§2.2Oracle内存结构9Oracle内存结构内存是Oracle重要的信息缓存和共享区域,主要存储执行的程序代码、连接的会话信息以及程序执行期间所需数据和共享的信息等。Oracle使用的主要内存结构包括系统全局区SGA和程序全局区PGA。10SGA区11数据高速缓存保存最近从数据文件中读取的数据块。分为脏缓存块、空闲缓存块和命中缓存块三类。脏缓冲块:当执行INSERT、UPDATE以及DELETE操作时,服务器进程修改数据高速缓存的相应数据,此时缓冲区的内容与数据文件中的内容不一致。12当用户第一次提出数据查询请求时,Oracle会首先在数据高速缓存中寻找该数据。如找到,系统就直接对它们进行处理。如找不到,系统首先在数据高速缓存中查找空闲数据块,然后将数据库文件中的数据读入空闲块处理,如搜索了一定的数据块后仍找不到空闲块,由后台进程DBWR将内存中部分修改过的数据写入文件,以腾出空间。数据高速缓存13重做日志缓冲区重做日志缓冲区用于缓存数据库重做日志记录,以便数据库损毁时可以进行必要的恢复。重做日志缓存是一个循环缓存区,在使用时从顶端向低端写入数据,然后再返回到缓冲区的起点循环写入。14共享池共享池相当于程序高速缓冲区,所有的用户程序都放在共享池中。当用户将SQL指令发送至Oracle,系统首先解析语法是否正确。解析时所需的系统信息,以及解析后的结果将存放在共享池内。所以当不同用户执行相同SQL指令时,可以共享已解析好的结果。15共享池共享池=库缓存+数据字典缓存库缓存=共享SQL区+PL/SQL域+锁+闩数据字典缓冲区存放数据字典信息。16程序全局区PGA:ProgramGlobalAreaPGA是单个Oracle进程(包括服务器进程和后台进程)使用的内存区域,不属于实例的内存结构。PGA含有单个进程工作时需要的数据和控制信息,PGA是非共享的,只有服务进程本身才能够访问它自己的PGA区。17PGAPGA为指定进程专用.当用户连接服务器并建立会话时,Oracle为其分配一个PGA。18PGAPGA包括私有SQL区会话内存区排序区19Oracle结构图Oracle数据库服务器实例数据库Oracle进程SGA区后台进程服务进程物理存储逻辑存储数据文件控制文件日志文件初始化文件密码文件归档文件表空间段区块20后台进程数据库写进程DBWR(DatebaseWriter)日志写进程LGWR(LogWriter)检查点进程CKPT(CheckpointProcess)系统监控进程SMON(SystemMonitor)进程监控进程PMON(ProcessMonitor)21请大家看一下书上§2.3Oracle进程22数据库写进程(DBWn/DBWR)DBWn进程负责将数据库缓存中的脏缓存块写入数据文件中。在出现以下情况时,DBWn开始工作系统发出检查点(checkpoint)。脏缓冲区个数达到指定阈值。服务器进程不能找到自由缓冲区。23DBWnDBWR24日志写进程(LGWR)当运行DML(INSERT、UPDATE、DELETE)或DDL(CREATE、ALTER、DROP)语句时,服务器进程首先将事务变化记载到重做日志缓冲区,然后才会将数据写入到数据高速缓存的相应缓冲区,并且重做日志缓冲区的内容将会被写入到重做日志文件中,以避免系统出现意外所带来的数据损失。25LGWR重做日志缓存循环使用。LGWR在以下几种情况下发生:在DBWR将脏数据写入数据文件之前。重做日志缓冲区已有三分之一填满。每隔3秒钟。提交事务。重做日志记录大小到1M.26思考Oracle总是尽量将用户“最常使用的数据”保留在缓冲区内,以提高数据存取的效率。那么,如果仅将最不常用的数据写至数据文件,那么这些“经常使用”的数据反而没机会存回硬盘?Oracle系统使用检查点进程(CKPT)定时触发一次更新数据文件的操作。27检查点进程(CKPT)CKPT进程负责向数据库发出检查点,检查点用于同步数据库的所有数据文件、控制文件和重做日志。28SCN(SystemChangeNumber)当运行Insert、Update、Delete以及其他涉及到数据库变化的语句时,Oracle会针对任何修改生成顺序递增的SCN值,并将该SCN值连同事务变化一起记载到重做日志缓冲区。SCN是用于记载数据库变化的唯一标识号,永远不会用尽。假定Update之前的SCN为100000,当执行了Update之后有三个数据块发生变化,则SCN会增加为100003。29CKPT工作原理当Oracle发出检查点时,系统会将检查点时刻的SCN值写入到控制文件和数据文件头部,同时还会促使DBWR进程将所有脏缓冲区写入到数据文件中。30检查点工作机制在DBWR进程工作之前,LGWR进程首先将重做日志缓冲区内容写入到重做日志文件,即该时刻的SCN值会被写入重做日志。当CKPT进程工作的时候,会将当前时刻的SCN值写入数据文件和控制文件。在发出检查点时刻,数据文件、控制文件和重做日志的SCN值完全一致。31系统恢复当运行OracleServer时,在访问数据文件、控制文件和重做日志时,Oracle会定期检查并比较每种文件的SCN值,确定文件是否损坏、系统是否出现异常,最终确定系统是否需要进行恢复。32思考假定某用户执行了“insertintoDEPTvalues(50,’SALES’,’BeiJing’)”和”COMMIT”操作后,突然意外断电,那么事务变化记载到了哪种文件中?控制文件和数据文件的SCN值是否一致?控制文件和重做日志的SCN值是否一致?33分析在执行COMMIT操作时,后台进程LGWR要开始工作,所以事务变化被记载到重做日志中。因为只有在发出检查点时,才会将SCN值写入控制文件和数据文件头部,所以控制文件和数据文件的SCN值保持一致,并且存放的是先前检查点的SCN值。控制文件和数据文件的SCN值一致,与重做日志不一致!34SMON如果数据库未正常关闭,文件中数据不同步。因为最近检查点SCN到COMMIT时间点SCN之间的事务变化都被记载到了重做日志中,所以在重新打开数据库之前,Oracle会自动执行这两个时间点之间的事务操作,并同步所有数据文件、控制文件和重做日志文件,然后才会打开数据库。该过程被称为应急恢复,正是由SMON完成的,SMON还负责在启动实例时清理临时段和合并区碎片。35一致性处理如果数据文件、控制文件、重做日志的当前SCN值完全一致,则系统会直接打开所有数据文件和重做日志。如果控制文件和数据文件的当前SCN值完全一致,并小于重做日志的当前SCN值,则需要进行实例恢复。如果控制文件和数据文件的当前SCN值不匹配,则表示数据文件或控制文件存在损坏,此时需要进行介质恢复,以恢复损坏文件。36思考假定你在客户端运行SQL*PLUS访问OracleServer,那么Oracle将在服务器端分配相应的服务器进程。假如你正常退出了SQL*PLUS或该进程出现了意外情况,那么Oracle会如何处理服务器进程呢?系统当然要释放服务器进程所占用的资源。37PMONOracle如何确定用户进程是处于连接状态、断开连接还是异常状态?这个任务由PMON来完成。资源回收(锁、SGA、PGA)状态恢复(将用户的操作回退到最近一次事务提交时的状态)38一个典型的独立型Oracle实例39一个并行的Oracle服务器实例(OracleParallelServer)40Oracle结构图Oracle数据库服务器实例数据库Oracle进程SGA区后台进程服务进程物理存储逻辑存储数据文件控制文件日志文件初始化文件密码文件归档文件表空间段区块41请大家看一下书上§3.1Oracle数据库的物理结构42Oracle数据库物理存储结构Oracle数据库在物理上是存储于硬盘的各种文件。它是活动的,可扩充的,随着数据的添加和应用程序的增大而变化。43数据文件Oracle数据库模式对象中的所有数据均存储在数据文件中,也就是说,数据文件是Oracle数据库的唯一物理存储对象,所以每个Oracle数据库至少由一个数据文件组成。数据文件用来存储数据库中的全部数据,如数据库表中的数据和索引数据。数据文件通常是后缀名为.dbf格式的文件。44数据文件数据文件实际上是一个操作系统文件,这些文件中的数据格式是只有Oracle数据库系统才能够正确识别的二进制格式。45数据文件Oracle数据库至少要包含一个数据文件,并且数据文件是表空间的物理组成元素,一个表空间可以包含多个数据文件,并且每个数据文件只能唯一地属于某个表空间。数据库SYSTEM表空间表空间一表空间二数据文件逻辑组成物理组成46重做日志文件重做日志是用于记录数据库变化的物理文件,其目的是为了在出现意外时恢复Oracle数据库,数据库至少要包含2个重做日志组,并且这些重做日志组是循环使用的。日志组一日志组二日志组三47归档当数据库处于ARCHIVELOG(自动归档)模式时,在进行日志切换时,Oracle会自动将重做日志内容复制到归档日志中。48多元化重做日志用户可以为相同的日志文件建立一个文件组,将同一个文件组中的文件放在不同的磁盘上建立一些副本。LOG1ALOG2ALOG1BLOG2B磁盘A磁盘BLGWR日志组1日志组249控制文件每个Oracle数据库都有一个控制文件(名字通常为Ctr*.ctl格式),用以记录与描述数据库的物理结构,包括以下信息:Oracle数据库名称与建立时间。数据文件与重做日志文件名称及所在位置。日志记录序列号(logsequencenumber)。数据库检查点信息。50数据库的数据文件和重做日志文件均是一些操作系统文件,Oracle在操作数据库时,怎样将指定数据库中的这些文件同普通的操作系统文件和其他数据库文件区分开来,这正是数据库控制文件的功能。如果把数据文件比作一个仓库,那么重做日志文件就相当于该仓库的货物进出记录账本,控制文件就是该仓库的管理中心。控制文件51Oracle结构图Oracle数据库服务器实例数据库Oracle进程SGA区后台进程服务进程物理存储逻辑存储数据文件控制文件日志文件初始