Oracle11gR2数据库体系结构

一 .Oracle体系结构概述
体系结构是对一个系统框架的描述,是设计一个系统的宏观工作。就如建造一座大楼的设计图一样,根据建筑框架图的要求,“严格”施工就可以建造一座功能完善,质量可靠的建筑。即使大楼建好以后,我们依然可以根据设计图来找到几乎每一个功能部件。
数据库系统结构设计了整个数据库系统的组成部分和各部分组件的功能,这些组件各负其职,相互协调完成数据库的管理和数据库的维护工作。

二.Oracle数据库体系结构
为了满足生产数据库需求,Oracle设计了如下图所示的体系结构,该体系结构包括实例(instance),数据文件(datafiles),用户进程(User process),服务器进程(Server process)以及其他文件,如参数文件(Parameter file),密码文件(Password file)和归档日志文件(Archived log file)等等。
Oracle数据库体系结构
其中,数据库实例包括SGA(系统全局区)和一系列后台进程,监控进程,数据库包括三种文件:数据文件(Data files),控制文件(Control files)和重做日志文件(Redo log files)。数据库实例和数据库是Oracle数据库体系结构的核心部分,DBA很重要的工作就是维护数据库实例和数据库本身的正常工作。

2.1.Oracle服务器和实例
Oracle服务器和实例是非常重要的两个概念,这里的服务器不仅仅是物理概念,还包括系统进程,而实例则是DBA经常维护的对象。

  • Oracle实例(instance)
    Oracle实例就是由一些内存区和后台进程组成。实例的组成如图所示,从实例的组成图可以看出实例由SGA和一些后台进程组成,这些内存区包括数据库高速缓存,重做日志缓存,共享池,流池以及其他可选内存区(如java池),这些池也称为数据库的内存结构。后台进程包括系统监控进程(SMON),进程监控(PMON),数据库写进程(DBWR),日志写进程(LGWR),检查点进程(CKPT),其他进程(如归档进程(ARCH),RECO进程等),这些数据库系统进程相互协调完成数据库管理任务。
    在这里插入图片描述
    要访问数据库必须先启动实例,实例启动时分配内存区,然后再启动后台进程,后台进程执行数据库的输入,输出以及监控其他Oracle进程。在数据库启动过程中有五个进程是必须启动的,它们是系统监控进程(SMON),进程监控(PMON),数据库写进程(DBWR),日志写进程(LGWR),检验点进程(CKPT),否则实例无法创建。数据库启动过程我们可以在警告日志(alertSID。ora)中看到详细过程。

注意:
在实践中,为了方便会通过数据库工具实现数据库在计算机重启时自动启动,如果用户安装了其他占用大量内存的应用软件,可能会造成数据库启动失败,此时往往是因为内存不足,操作系统无法为Oracle分配SGA。必须的五个进程也无法启动。

  • Oracle服务器(server)
    Oracle服务器由数据库实例和数据文件组成,它就是我们经常说的数据库管理系统(DBMS).数据库服务器组成如图
    在这里插入图片描述
    数据库服务器除了维护实例和数据文件外,还在用户建立与服务器的连接时启动服务器进程并分配PGA。

2.2.Oracle数据库物理结构(文件组成)
我们都知道,数据库是运行在操作系统之上的,数据库的最终目的就是存储和获取相关的数据,这些数据实际存储在操作系统文件中,这些操作系统文件组成Oracle数据库物理结构。
Oracle数据库的物理结构就是数据库中的一系列操作系统文件,Oracle数据库由3类文件组成。

  • 数据文件(data files):数据文件包含数据库中的实际数据,是数据库操作中数据的最终存储位置。
  • 控制文件(control files):包含维护数据库和验证数据库完整性的信息,它是二进制文件。
  • 重做日志文件(redo files):重做日志文件包含数据库发生变化的记录,在发生故障时用于数据恢复。

2.3参数文件,密码文件和归档日志文件
虽然参数文件,密码文件和归档日志文件不是Oracle的数据文件,但是Oracle数据库不可少的3个文件。

  • 参数文件(parameter file):参数文件中定义了数据库实例的特性。在参数文件中包含为SGA中内存结构分配空间的文件,如分配数据库高速缓冲区的大小等,参数文件是正文文件,可以使用操作系统文本编辑器查看。
  • 密码文件(password file):密码文件授予用户启动和关闭数据库实例,在刚安装数据库时,Oracle的默认用户名和密码就存储在密码文件中,Oracle可以借此判断用户的操作权限。
  • 归档日志文件(archive log files):归档日志文件是日志文件的脱机备份,在发生故障后进行数据恢复时可能使用该文件。

三.数据库连接与会话
连接与会话是Oracle数据库容易混淆的两个概念,它们是紧密相关的两个概念。

3.1数据库连接(connection)
连接指用户进程与数据库服务器之间的通信途径,一个连接就可以有多个对话。Oracle提供了3种数据库连接方式,如下

  • 基于主机的方式(Host-Based):此方式中,服务器和客户端运行在同一台计算机上,用户可以直接连接数据库服务器。
  • 基于客户机-服务器方式(Client-Server):该方式中数据库服务器和客户端运行在不同的计算机上,客户通过网络连接至服务器,在DBA的日常维护中,会经常使用这种方法访问数据库,实现远程维护。
  • 客户-应用服务器-数据库服务器方式(Client-Application Server-Server):这种方式叫作三层访问模式,用户首先访问应用服务器,然后由应用服务器连接数据库服务器,应用服务器就如一个中介,完成客户和数据库的交互。在很多应用系统中,客户的应用程序往往通过三层方式访问数据库,如应用服务器为IIS或Apache服务器等。

3.2会话(session)
会话指一个明确的数据库连接。用户一旦采用三种连接方式之一去连接数据库,就叫一个会话。
如果用户通过某种工具(如SQL*Plus)在专用连接的情况下访问数据库,在输入用户名和密码经服务器验证后,服务器就会自动创建一个与该用户进程相对应的服务器进程,二者是一对一的关系,这里服务器进程就像用户进程的代理,代替用户进程向数据库服务器发出各种请求,并把从数据库服务器获得的数据返回给用户进程。
但用户退出或发生异常时(操作系统重启)会话结束。

注意:
刚才指出“专有连接”的概念,专有连接是一种连接类型,指用户和服务器进程之间是一对一的关系。而在共享服务器配置的情况下,多个用户进程可以同时共享服务器进程,此时就不是专有连接,而是多对一的关系。

一个用户可以并发建立多个会话,如下图就是用户	SYS同时在专有连接的情况下建立两个会话的例子:

在这里插入图片描述
在上图中的例子,我们同时使用两个SQLPLUS工具连接数据库,并且使用同一个用户SYS,我们看到最后两行显示有两个活跃(ACTIVE)的会话,一个是使用sqlplus.exe程序建立的,一个是使用sqlplusw.exe建立的。
说明:在上述查询中,只是演示一个用户可以建立多个连接,使用相同或者不同的工具登录。至于v$session(数据字典视图),我们暂且可以将它看作是一张表,表中存储了当前会话的信息,如属性USERNAME是用户登录名,属性PROGRAM是用户登录工具(一个用户进程)。
如图展示了连接与会话之间的区别和联系
在这里插入图片描述
一个连接可以对应多个会话,连接仅仅是一种通信途径,如果通过Socket建立通信,但是一个用户可以启动多个进程通过一个连接建立多个会话,这里服务器进程就像是用户进程的代理一样,与服务器交互完成数据的各种操作。

四Oracle数据库内存结构
Oracle的内存结构有两大部分组成,一个是SGA,一个是PGA。PGA称为程序全局区,程序全局区不是实例的一部分,当服务器进程启动时,才分配PGA。而SGA称为系统全局区,它是数据库实例的一部分,当数据库启动时,会首先分配系统全局区,在系统全局区中包含几个重要的内存区,数据库高速缓冲区(Database buffer cache),重做日志缓存(Redo log buffer cache),共享池(Shared pool),大池(Large pool)和Java池(Java pool)。

4.1共享池(Shared pool)
Oracle引入共享池的目的就是共享SQL或PL/SQL代码,把解析得到的SQL代码的结果在这里缓存,其中PL/SQL代码不仅在这里缓存,同时在这里共享。共享池由两部分组成,库高速缓存(Library cache)和数据字典高速缓存(Data dict cache),如下图所示:
在这里插入图片描述

  • 库高速缓存
    库高速缓存存储了最近使用过的SQL和PL/SQL语句。当然它的容量是有限的,Oracle采用一种LRU(least recently used)算法管理库高速缓存,算法的基本思想是把一段时间内没有被使用过的语句清除,一旦缓冲区填满,算法把最近最少使用的执行计划和解析树从库高速缓存中清除。显然库高速缓存设置得越大,就可以共享更多的SQL和PL/SQL代码,但是Oracle并没有设计直接设置库高速的指令,只能通过设置共享池的大小间接地修改,而共享池是SGA的一部分,所以共享池不能超过SGA的大小。

设置共享池的大小:

SQL> alter system set shared_pool_size = 16M;

查看共享池的大小

SQL>show parameter shared_pool_size;
  • 数据字典高速缓存
    顾名思义,该缓存是与数据字典相关的一段缓冲区。在数据字典高速缓冲区中存储了数据文件,表,索引,列,用户,权限信息和其他一些数据库对象的定义。在SQL语句的解析阶段,数据库服务器需要这些信息来解析用户名和用户的访问权限。如果Oracle缓存了这些信息,无疑缩短了查询响应时间。数据字典缓存也叫作字典缓存或者行缓存。
    同样,数据字典高速缓存的大小取决于共享池尺寸的大小。如果设置太小,在查询需要需要数据字典信息时,Oracle将不断访问数据字典表来获得所需的信息,由于数据字典也是存储在磁盘上的一类数据文件,频繁的磁盘I/O无疑降低了数据库的查询速度。如果需要设置数据字典高速缓存的大小,需要通过设置参数shared_pool_size间接实现。

4.2数据库高速缓冲区(Database buffer cache)
数据库高速缓冲中存储了最近从数据库文件读入的数据块信息或用户更改后需要写回数据库的数据信息,此时这些没有提交给数据库的更改后的数据称为脏数据。当用户执行查询语句如select * from dept时,如果用户查询的数据块在数据库高速缓冲区中,Oracle就不必从磁盘读取,而是直接从数据库高速缓存中读取,显然内存读取的速度比物理读取的速度快很多,这些缓存的数据由LRU算法管理。可见Oracle设计的各种缓存目的基本相同,就是提高查询的响应速度。Oracle使用LRU算法管理数据库缓冲区,把最近没有使用的数据库从高速缓存中删除,为其他的查询数据块保留空间。
Oracle使用参数DB_BLOCK_SIZE和DB_BLOCK_BUFFERS设置库高速缓存的大小,DB_BLOCK_SIZE是Oracle数据块的大小,而DB_BLOCK_BUFFERS是数据库的个数,二者的乘积就是库高速缓存的大小。

查询数据库块的大小

SQL>show parameter db_block_size;

注意:用这种方式设置数据库高速缓存的大小需要重启数据库才能生效,db_block_size的值是8192B。

在Oracle9i及以上版本中提供了一个DB_CACHE_SIZE参数来设置Oracle数据库高速缓存区的大小,该参数可以动态更改,之后可以通过查询指令查看更改后的参数。

查询数据库高速缓存的大小

SQL>show parameter db_cache_size;l

因为在Oracle11g中,SGA为数据库服务器自动管理,所以该参数值为0,当然在运行Oracle11g数据库时,数据库高速缓存一定已分配好,我们可以使用show sga指令查看数据库高速缓冲区的分配的内存大小。

查询数据库高速缓存的的大小

SQL>show sga;

虽然在Oracle11g中数据库高速缓存的大小自动管理,但是用户可以设置该数据库组件的大小
动态设置数据库高速缓冲区大小

SQL>alter system set db_cache_size = 200M;

在Oracle中引入了Buffer Cache Advisory Parameter参数,其目的是让Oracle对于数据库缓冲区的内存分配提供一些建议。
下面介绍缓冲区顾问参数的作用,缓冲区顾问用于启动或关闭统计信息,这些信息用于预测不同缓冲区大小导致的不同行为特性。对于DBA可以参考这些统计信息,基于当前的数据库工作负载设置优化的数据库高速缓存。

缓存顾问通过初始化参数DB_CACHE_ADVICE启动或关闭顾问功能,该参数有3个状态。

  • OFF:关闭缓存顾问,不分配缓存顾问的工作内存。
  • ON:打开缓存顾问,分配工作内存。
  • READY:打开缓存顾问,但不分配缓存顾问的工作内存。

关闭数据库高速缓存顾问的状态

SQL>alter system set db_cache_advice = off;

查看数据库高速缓存顾问的状态

SQL>show parameter db_cache_advice;

在设置缓存顾问为开启状态时,Oracle开始统计与设置数据库缓存相关的建议信息,可以通过动态性能视图v$DB_CACHE_ADVICE查看缓冲区的建议信息。

查看与设置数据库高速缓冲区相关的信息

SQL>col id for 99
SQL>SELECT id,name,block_size,size_for_estimate,buffers_for_estimate from v$db_cache_advice;

4.3重做日志高速缓冲区(Redo buffer cache)
当用户执行了如INSERT,UPDATE;DELETE,CREATE,ALTER或DROP操作后,数据发生了变化,这些变化了的数据在写入数据库高速缓存之前会先写入重做日志缓冲区(日志写优先原则),同时变化之前的数据也放入重做日志高速缓存,这样在数据恢复时Oracle就知道哪些需要前滚哪些需要后滚了。
重做日志缓冲区的大小是可以动态调节的,在数据运行期间修改这块内存的大小,Oracle提供了一个初始化参数LOG_BUFFER,在数据库实例启动时就分配好重做日志缓冲区的大小。

查看重做日志缓冲区

SQL>show parameter log_buffer;

注意:重做日志缓冲区参数log_buffer是静态参数,不能动态修改,如果尝试修改会报错ORA-02095。

4.4大池(Large pool)和Java池(Java pool)
大池是SGA的一段可选内存,只在共享服务器环境中配置大池。在共享服务器环境下,Oracle在共享池中分配额外的空间用于存储用户进程和服务器进程之间的会话信息,但是用户进程区域UGA(可理解为PGA在共享服务器中另一个称呼)的大部分将在大池中分配,这样就减轻了共享池的负担。在大规模输入,输出及备份过程中也需要大池作为缓存空间。
Oracle提供了参数large_pool_size参数设置大池的尺寸。

查看大池的大小

SQL>show parameter large_pool_size;

参数large_pool_size是动态参数,也可以通过alter system指令修改该参数的值,语句格式为:

SQL>alter system set large_pool_size = 48M;

Java池也是可选的一段内存区,但是在安装完Java或者使用Java程序时则必须设置Java池,它用于编译Java语言编写的指令。Java语言与PL/SQL语言在数据库中有相同的存储方式。Oracle提供了参数JAVA_POOL_SIZE设置Java池大小。、

查看java池的大小

SQL>show parameter java_pool_size;

说明:在Oracle11g中,Java池大小由数据库服务器在SGA中自动分配,当然用户也可以使用alter system指令修改该参数值,如果该参数值为0,则说明开启自动管理。

4.5流池(Streaming pool)
流池也称为流内存,它是Oracle流专用的内存池,流(stream)是Oracle数据库中的一个数据共享,其大小可以通过参数stream_pool_size动态调整。

4.6进程全局区(PGA)和用户全局区(UGA)
进程全局区是服务器进程专用的一块内存,它是操作系统进程专用的内存,系统中的其他进程是无法访问这块内存的。PGA独立于SGA,PGA不会在SGA中出现,它是由操作系统在本地分配。

1.PGA(进程全局区)
PGA中存储了服务器进程或单独的后台进程的数据信息和控制信息。它随着服务器进程的创建而分配内存,随着进程的终止而释放内存。PGA与SGA不同,它不是一个共享区域,而是服务器进程专有区域。在专有服务器配置中包括如下组件:

  • 排序区:对某些的SQL语句执行结果进行排序。
  • 会话信息:包含本次会话的用户权限和性能统计信息。
  • 游标状态:标明当前会话执行的SQL语句的处理阶段。
  • 堆栈区:包含其他会话变量。

注意:在共享服务器配置中,多个用户进程共享一个服务器进程,上述的一些内存区可能在SGA中分配。如果创建了大池,这些内存结构就存储在大池中,否则它们存储在共享池中。

专有服务器模式下的PGA结构
在这里插入图片描述
共享服务器模式下的PGA结构
在这里插入图片描述
注意:在共享服务器结构中,会话信息是存储在SGA中的,两种模式下堆栈区(Stack space)都存储在PGA中。

2.用户全局区(UGA)
在共享服务器模式下有一个重要的概念即UGA(用户全局区),它是用户的会话状态,这部分内存会话总可以访问,UGA存储在每个共享服务器都可以访问的SGA中,这样任何服务器都可以使用用户会话的数据和其他信息。而在专有服务器模式下,用户会话状态不需共享,用户进程与服务器进程是一一对应的关系,所以UGA总是在PGA中进行分配。

3.PGA内存管理
从Oracle9i开始,Oracle提供了两种方法管理PGA,即手动PGA管理和自动PGA管理。采用手动管理时,必须告诉Oracle一个特定的进程需要的排序区,允许使用多少内存,而在自动PGA管理中,则要求告诉Oracle在系统范围内可以为PGA中的特定功能如排序区分配多少内存。

查询PGA中排序区的大小

SQL>show parameter sort_area_size;

在服务器进程最初查询时,会用512KB内存实现数据排序,在Oracle将排序数据处理完毕之前,数据排序区的大小就由参数sort_area_size决定。

注意:在Oracle10g和Oracle11g中可实现共享服务器连接时PGA的自动管理,而在Oracle9i中,使用共享服务器连接时只能使用手动PGA管理。

4.7如何获取内存缓冲区的信息
SGA是Oracle中所有进程共享的一段内存区,其中共享了数据库信息如数据库高速缓冲区中的数据,共享池中的库高速缓存中的SQL语句等。了解这些内存缓冲区的大小有助于理解Oracle的内存分配情况。

查看SGA中内存的分配情况
在这里插入图片描述
在上述输出中可以看到,SGA,Database Buffers和Redo Buffers的大小,前面已经了解了这些内存组件的作用。你或许注意到Fixed Size和Variable Size两个参数,它们和两个内存区有关,下面解释这两个内存区:

  • 固定SGA(和fixed size相关):在固定SGA中,存储一组指向SGA中其他组件的变量。它的内存大小用户无法控制,因平台不同而有差异。但通常固定SGA区很小。Oracle使用这个内存区来寻找其他SGA区,可以理解为数据库的自举区。
  • 和Variable Size相关的内存区。该部分内存区包括共享池,Java池和大池,其中Variable Size的大小要高于上述3个内存结构之和,因为在Total SGA中除去db_cache_size部分也包括在Variable Size中。

查看SGA的大小

SQL>show parameter sga_max_size;

说明:在Oracle11g中该参数的值得到修正而使用MB作为单位,更利于识别,而在Oracle10g版本中参数sga_max_size的值使用字节为单位。

4.5Oracle服务器进程和用户进程
服务器进程和用户进程,是用户使用数据库连接工具同数据库服务器建立连接时,涉及的两个概念。

  • 服务器进程:服务器进程犹如一个中介,完成用户的各种数据服务请求,而把数据库服务器返回的数据和结果返回给用户端。在专有连接中,一个服务器进程对应一个用户进程,二者是一一对应关系。当用户连接中断,则服务器程序中断,则服务器程序退出;在共享连接中,一个服务器进程对应几个用户进程,此时服务器进程通过OPI(Oracle Program Iterface)与数据库服务器通信。
  • 用户进程:当用户使用数据库工具如SQLPlus与数据库服务器建立连接时,就启动了一个用户进程,即SQLPlus软件进程。

使用SCOTT用户连接数据库

SQL>conn scott/tiger@orcl

此时,用户和数据库服务器建立了连接,数据库服务器产生一个服务器进程,负责与数据库服务器的直接交互。

4.6Oracle数据库后台进程
后台进程是在实例启动时,在数据库服务器端启动的管理程序,它使数据库的内存结构和数据库物理结构之间协调工作。从功能上考虑,在数据库内存结构,后台进程和数据库物理结构之间的关系如图所示:
在这里插入图片描述
数据库后台进程有五个是必须启动的,否则数据库实例无法启动。它们是DBWR,LGWR,PMON,SMON,和CKPT。
1.系统监控进程(SMON)
系统监控进程的主要作用就是数据库实例恢复。当数据库发生故障时,如操作系统重启,此时实例SGA中的所有没有写到磁盘的信息都将丢失。当数据库重新启动后,系统监控进程自动恢复实例。实例的恢复包括如下3个步骤:

  • 前滚所有没有写入数据文件而记录在重做日志文件中的数据。此时,系统监控进程读取重做日志文件,把用户更改的数据重新写入数据块。
  • 打开数据库,此时或许系统监控进程的前滚操作还没完成,Oracle这样做的目的就是方便用户登录,以免前滚时间太长,影响用户的行为,这样用户就可以操作那些没有被事务恢复锁住的数据。
  • 回滚未提交的事务

除此之外,系统监控进程执行某些空间维护的作用。

  • combine,coalesces,adjacent数据文件中的自由空间。
  • 回收数据文件的临时段。

2.进程监控进程(PMON)
进程监控负责服务器进程的管理和维护工作,在进程失败或连接异常发生时该进程负责一些清理工作。

  • 回滚没有提交的事务
  • 释放所持有的当前的表或行锁。
  • 释放进程占用的SGA资源。
  • 监视其他Oracle的后台进程,在必要时重启这些后台进程。
  • 向OracleTNS监听器注册刚启动的实例。如果监听器在运行,就与这个监听器通信并传递如服务名和实例的负载等参数;如果监听器没有启动,进程监控(PMON)会定期地尝试连接监听器来注册实例。

3.数据库写进程(DBWR)
在介绍高速缓冲区时,提到了脏数据的概念,脏数据就是用户更改了的但没有提交的数据库中的数据,因为在数据库的数据文件与数据库高速缓存中的数据不一致,故称作脏数据,这种脏数据必须在特定的条件下写到数据文件中,这就是数据库写进程的作用。
数据库写进程负责把数据库高速缓冲区中的脏数据写到数据文件中。或许您会问为什么不立即提交脏数据,这样就不需要复杂的数据库写进程来管理。其实,Oracle这样设计的思路很简单,就是减少磁盘I/O次数,但脏数据量达到一定程度或者某种其他条件满足时,就提交一次脏数据。因为磁盘的输入,输出会花费系统时间,使得Oracle系统的效率不高。
下图是数据库写进程“实体”关系
在这里插入图片描述
当一个事件发生时,会触发数据库写进程把脏数据写到数据库的数据文件中:

  • 发生检查点事件。
  • 脏数据量达到了门限值。
  • 数据库缓冲区没有足够的缓存为其他事务提供足够的空间。
  • 表空间处于热备份状态。
  • 表空间被置为离线状态。
  • 表空间备置为只读状态。
  • 删除表或者截断表。
  • 超时。

注意:数据库写进程的性能很重要,如果它写脏数据到数据文件很慢,使大量缓冲区无法释放,就会出现一些等待事件,如Free Buffer Waits等。实际在Oracle数据库上,一个数据库实例可以启动多个数据库写进程,在多CPU系统可以使用多个数据库写进程来分担单个写进程的工作负载。

4.重做日志写进程(LGWR)
重做日志写进程负责将重做日志缓冲区中的数据写到重做日志文件。此时重做日志缓冲区中的内容是恢复事务所需的信息,比如用户使用UPDATE语句更新了某行数据,恢复事务所需的信息就是更新的数据和更新后的数据,这些信息用于该事务的恢复。
重做日志写进程在满足一个条件时,会启动进程工作:

  • 当事务提交时。
  • 当重做日志缓冲区的1/3被占用时。
  • 当重做日志缓冲区有1MB的数据时。
  • 当数据库进程把脏数据写到数据文件之前。

下图展示重做日志写进程工作流程:
在这里插入图片描述
注意:从上图可以看出,日志写进程会通知数据库写进程将脏数据写到数据文件,但是数据库写进程不会把脏数据写到在线重做日志,也不会通知日志写进程做任何事。

数据库写进程是离散写到不同数据库文件上的,在执行一个更新时,数据库写进程会修改不同空间中存储的数据块和索引块,所以数据库写进程的离散写的速度很慢。而重做日志写进程是顺序写,它比离散写的效率高,把每个事务的重做信息全部放在重做日志中。通过在数据库高速缓存中缓存脏数据块,而由重做日志写进程完成大规模顺序写,从整体上提高系统的性能。

5.归档日志进程(ARCH)
归档日志进程是可选进程,该进程并不在实例启动时自动启动。它的作用是把写满的重做日志文件的数据写到一个归档日志中,这个归档日志用作介质故障时的数据库恢复。
在这里插入图片描述
重做日志文件负载实例失败时的数据恢复,因为SGA中没有被保存的数据会全部丢失,这样使用重做日志文件就可以完全恢复事务。而归档日志进程用于介质恢复,比如磁盘损坏,可以使用以前备份的数据文件,使用归档日志和重做日志可以完全恢复数据库。
归档进程不在实例启动时自动启动,在生产数据库中必须使用归档模式,以防止灾难性的数据损坏。

查看系统的归档模式
在这里插入图片描述
如果没有启动归档模式,需要先关闭数据库,以MOUNT参数启动数据库,更改后再启动到OPEN状态即可。
在这里插入图片描述
查看当前数据库的归档模式
在这里插入图片描述
数据库的日志模式改为归档模式,自动存档已启动,归档日志的存储目录即存档终点是数据库恢复文件目录。

查看数据库恢复目录的位置
在这里插入图片描述
参数db_recovery_file_dest的value为F:\app\Administrator\flash_recovery_area,说明了数据库恢复文件目录的位置,而参数db_recovery_file_dest_size的value值为2GB说明该存储目录分配的磁盘空间大小。

6.检验点进程(Checkpoint process)
检验点是一个事件,当数据库写进程把SGA中所有被修改了的数据库高速缓冲中的数据写到数据文件上时产生,这些被修改的数据包括提交的和未提交的数据。由于引入了检验点,使得所有的检验点的所有变化了的数据都写到数据文件中,在实例恢复时,就不必恢复检验点之前的重做日志中的数据,加快了系统恢复效率。

  • 检验点进程要将检验点号码写入相关的数据文件的头文件中。
  • 检验点进程把检验点号码,SCN号,重做日志序列号,归档日志名字等都写入控制文件。
    下图展示检验点进程工作流程
    在这里插入图片描述
    Oracle提供一个指令,用户可以强制产生检验点,使得用户可以干预检验点的产生

强制产生检验点

SQL>alter system checkpoint;
发布了57 篇原创文章 · 获赞 85 · 访问量 9999

猜你喜欢

转载自blog.csdn.net/qq_41944882/article/details/103404008
今日推荐