RMAN预备知识

整理自《Oracle database 11g RMAN备份与恢复

001 备份与恢复概要
    在精心制订计划来应对数据库可能出现的故障时,通常需要处理两个不同的问题:一个有关体系结构方面的问题是高可用性,该问题与随之而来的另一个问题备份和恢复具有松耦合关系。     
001-1 高可用性
    高可用性(High Availability,HA)指的是一种防止用户发现部分或整个系统(如数据库、网络和硬件等)出现故障的体系结构。HA解决方案包括的要素可以是镜像驱动器、RAID体系结构、数据库群集、数据库故障切换(failover)模式,当然还包括备份和恢复。
    HA增加了整个数据库体系结构解决方案的开销,且超过了所选的备份和恢复解决方案的花费。虽然RMAN不是一个HA解决方案,但它是整个数据库解决方案的一部分,而该解决方案可以包括HA。HA解决方案不能取代数据库备份与恢复,但是如何对和数据库备份与恢复的策略构成了您制定高可用决策的基础。必须明确的是,如何备份和恢复数据库是HA决策的一部分。
001-2 基本术语
    警告日志(alert log):一个文本日志文件,记录数据库的错误和状态消息。警告日志是判断数据库故障种类的一个关键结构。通常情况下,警告日志位于后台转储目标目录中,该目录是由数据库参数BACKGROUND_DUMP_DEST定义的,其中警告日志称为alert<sid>.log。
    归档的重做日志(archived redo log):数据库在archivelog模式下时,每次Oracle通过了LGWR进程切换联机重做日志时都会发生归档的重做日志。数据库恢复期间也会使用归档的重做日志。归档的重做日志的副本可以写入10个不同的目录,这些目录是由数据库参数文件中的Oracle参数LOG_ARCVIVE_DEST_n定义的。同样,Oracle database 11g允许在称为闪回恢复区(flash recovery area)的新位置中存储归档的重做日志。
    备份控制文件(backup control file):控制文件的备份是由命令alter database to ‘filename’或命令alter database backup control file to trace生成的。
    检查点(checkpoint):一种数据库事件,使数据库将脏(已使用)数据块从内存移出并写入磁盘。
    数据库(database):由构成Oracle数据库的不同组件(表空间、重做日志等)组成。数据库不同于实例。数据库用于存储数据,使用RMAN可以备份和恢复数据库。
    数据库一致性(database consistency):这是指数据库中的每个对象在某个相同的时间点是一致的其含义是数据库数据文件中的数据在某个相同的时间点保持一致,也意味着数据库控制文件与数据库数据文件指针保持同步。
    数据库控制文件(database control file):数据库控制文件存储与数据库有关的元数据。包含关于数据库数据文件,归档重做日志,RMAN备份等有关的信息,以及其他数据库内部信息。
    数据库数据文件(database datafile):与表空间相关的物理实体。一个数据库至少含有一个数据库数据文件(该文件属于system表空间)。大部分数据库是由多个不同的数据库数据文件组成的。尽管一个表空间可以有许多关联的数据库数据文件,但是一个给定的数据库数据文件只能有一个关联的表空间。
    数据库参数文件(database parameter file):含有实例和数据库配置信息,数据库参数文件分为两部分(各部分相互独立):一部分是文本文件init.ora;另一部分是spfile.ora文件,该文件允许通过alter system命令来维持数据库参数的设置。
    闪回恢复区(flash recovery area,FRA):磁盘的可选配置区域,用于存储各种与恢复相关的文件。RMAN备份文件、归档的重做日志、联机重做日志,以及控制文件都可以存储在这个区域中。
    区组(granule):Oracle连续内存单位。所有的系统全局区(system global area,SGA)其内存分配都近似为最接近的区组单位。区组大小由预计的整个SGA内存决定,可能为4MB或16MB。当Oracle使用较大的区组大小时,大于128MB的SGA就可能是断点。分为给数据库的区组数量在数据库启动时确定。
    实例(instance):一个实例是Oracle内存和进程的集合。若已分配SGA内存,且相应的Oracle进程均启动和成功运行时,就可以说启动了Oracle实例。需要注意的是,Oracle实例运行不表示数据库自身被打开。在给定时间,一个实例只能与一个数据库关联。
    联机重做日志(online redo log):发生重做时,重做会被实际存储在数据库的联机重做日志中。Oracle要求至少为一个数据库的操作创建两个联机重做日志。这些联机重做日志可以含有多个保护重做的镜像副本。这称为多路重做日志。当一个联机重做日志写满重做内容时,Oracle会切换到下一个联机重做日志,这称为日志切换(log switch)操作。    
    每个联机重做日志文件都有关联的唯一日志序列号。一个日志序列号唯一地标识一个联机重做日志文件,如果这个联机重做日志文件已归档,那么就标识相关联的归档的重做日志文件。通过V$LOG视图查询可以查找到联机重做日志的日志序列号,在V$ARCHIVED_LOG视图或V$LOG_HISTORY视图中可以查找给定的归档重做日志的日志序列号。    
    此外,一个联机重做日志(以及一个归档的重做日志)包含该日志文件独特的一组数据库系统更改号(scn)。在恢复期间,Oracle按日志序列号的顺序来应用联机重做日志(归档的重做日志)中的撤销(undo)操作。
    进程(process):执行Oracle数据库实际操作的程序。在Oracle database 11g中有5种必需的进程,也有其他一些进程。
    重做(redo):记录对给定数据库的所有修改。对于数据库中的几乎每一个修改来说,都会生成关联的重做记录。
    模式(schema):拥有Oracle中的多种逻辑对象(如表和索引),实际上与用户的意义相同。
    系统全局区(system global area,SGA):Oracle启动时分配的共享内存区,所有Oracle进程都共享这部分内存。
    系统更改号(system change number,scn):一个表示某时间点上数据库当前状态的计数器。与VCR(录像机)的计数器相同,随着时间的推移,scn会相应地增加。每个scn代表一个数据库生命周期中的一点。
    表空间(tablespace):一个物理逻辑实体。由于它存储Oracle逻辑对象(如表和索引),所以是逻辑实体;由于它由一个或多个数据库数据文件组成,所以又是物理实体。一个数据库必须至少包含一个表空间(即system表空间),不过大部分数据库包含多个不同的表空间。
    跟踪文件(trace file):数据库会在许多不同的情况下生成跟踪文件,这些情况包括进程错误。每个数据库进程也会生成自己的跟踪文件。在试图解决数据库故障问题时,跟踪文件会起到重要的作用。
    

002 数据库软件的控制
    在执行各种恢复操作期间,需要对Oracle数据库和它的相关实例的状态进行控制。使用SQL*Plus Oracle实用程序可以启动Oracle database 11g数据库。此时,可以使用sysdba的登录ID来登录用户系统,然后在SQL*Plus提示符下执行startup命令。
    用startup命令启动Oracle数据库时,执行的操作要经历3个不同的阶段:
    实例启动(instance startup):启动Oracle数据库实例。
    数据库加载(database mount):加载Oracle数据库。
    数据库打开(database open):打开Oracle数据库以供用户活动。
002-1
    startup命令有几种不同的变体(对于了解多个不同的RMAN操作非常重要),这些变体包括:
    startup:使Oracle经历3个启动阶段,并且打开到用户社区。
    startup restrict:使Oracle经历3个启动阶段,并且以限定模式打开数据库。只有具有限定权限的用户才可以访问数据库。
    startup nomount:在成功开启数据库实例后停止启动进程。通常在创建数据库之前使用该命令来启动数据库实例。如果需要重新创建控制文件,使用这条命令也会非常方便。需要注意的是,为了在给定数据库中使用RMAN,必须能够使用startup nomount命令成功地启动实例。
    startup mount:在成功启动数据库实例并加载数据库后,停止启动进程如果需要恢复system表空间,这个命令非常有用。
    startup read only:使Oracle数据库(或备用数据库)以read only模式打开。因此,不支持DML操作,但可以查询数据库。如果正在执行时间点恢复操作,并且希望确保在使用resetlogs命令提交新数据库实例之前将数据局恢复到当前的时间点,这个命令非常有用
    startup force:与shutdown abort命令一起关闭数据库。startup force命令后面可以再次加上数据库的打开模式。如:
    startup force restrict
    startup force mount
    startup force nomount
002-2数据库关闭命令
    shutdown(还有shutdown normal):使Oracle等待直至所有用户进程与数据库断开连接。所有进程断开之后,数据库将会完全关闭。使用这个命令选项可以避免实例恢复。执行shutdown命令后,任何新的用户进程都不能连接到数据库。
    shutdown immediate:清除所有存在的用户会话,并且回滚所有未提交的事务。使用这个命令选项可以避免实例恢复。执行shutdown immediate命令后,任何新的用户进程都不能连接到数据库。
    shutdown abort:通常会使数据库崩溃。使用这个命令选项要求是实例恢复(而不是介质恢复)。执行shutdown abort命令后,任何新的用户进程都不能连接到数据库。
    shutdown transactional:使Oracle等待所有用户进程提交当前事务,然后断开这些用户进程并关闭数据库。在等待完成这些事务的期间,任何新的用户会话都不能连接到数据库。

003 Oracle体系结构
003-1 Oracle进程
    执行startup nomount命令时,Oracle会试图启动Oracle实例。当所需的操作系统进程(程序)被启动,且分配了一个称为系统全局区(SGA)的内存之后,Oracle实例就被启动。
    五种必需的Oracle进程:如果成功启动了一个Oracle database 11g实例,就至少启动了5种不同的进程。当然,在特定的系统中(如基于Microsoft的各种操作系统),这5种不同的进程只是单个Oracle进程中的线程,不过其基本原理是相同的。下面是这些必须的进程:
    PMON:也称为进程监控进程(process monitor process),是一个“Jamaican 进程”。
    SMON:也称为系统监控进程(system monitor process),是另一个“Jamaican 进程”。
    DBWn:称为数据库写入器进程(database writer process)。在Oracle database 11g中,最多可以用9个这样的进程来配置一个实例(不过通常只需要一个这样的进程)。DBWn负责将信息从SGA的数据库缓存区写到数据库数据文件中。
    LGWR:日志写入器进程(log writer process)负责将生成的重做信息从日志缓冲区写到数据库联机重做日志中。用户会话提交时会通知LGWR写入信息,当重做日志缓冲区快被写满时也需要通知LGWR进程。
    CKPT:在执行检查点操作时,CKPT进程会向DBWn通知该检查点。CKPT进程也用当前的检查点信息来更新数据库数据文件头。
003-2 用户进程和服务器进程
    用户进程连接到数据库时会生成一个用户进程(或者是一个在Windows NT上启动的新线程),该进程将与另一个生成的服务器进程连接。这些进程使用多种协议(如Bequeath协议或TCP/IP协议)相互通信。


004 Oracle内存和RMAN
    与任何进程相同,RMAN也需要使用内存,这些内存用于RMAN操作,也用于数据库交互。
    Oracle数据库物理体系结构包括以下组件:
    数据库数据文件
    联机重做日志
    归档重做日志
    数据库控制文件
    Oracle表空间
    闪回日志(可选组件)
    上面的每种组件都被物理定位在与计算机连接的存储设备上。这些对象构成了Oracle数据库的物理实体,为了恢复数据库还可能需要从备份中还原和恢复一个或多个这样的对象(除了闪回日志)。
004-1 数据库数据文件
    数据库数据文件是数据库的数据存储介质,这些数据文件与表空间相联系,后面将会看到这一点。在数据库中存储信息时,信息最终会存储在这些物理文件中。每个数据库数据文件都包含一个数据文件头,数据文件头中的信息帮助跟踪这个数据文件的当前状态数据文件头在检查点操作期间被更新,并反映这个数据文件的当前状态。
    数据库数据文件可以具有许多指定的不同状态。我们最关心的主要状态是online和offline状态,online是正常状态,offline则是非正常状态。数据库数据文件还可以是recover状态,该状态表示这个数据文件存在问题并且需要被恢复。
    如果数据库处于archivelog模式下,可以使数据文件脱机,这可能是特定的恢复操作所需要的。如果数据库处于noarchivelog模式下,只能删除数据库数据库文件才能使这个数据文件脱机。因为脱机删除数据文件会给数据库造成影响(如数据丢失),所以需要谨慎处理。
  
004-2联机重做日志
    如果将Oracle scn比作VCR上的计数器,那么重做日志就好比录像带。联机重做日志负责记录数据库中发生的每个原子操作更改。考虑到性能和数据保存因素,每个Oracle数据库都必须至少有两个不同的联机重做日志组,发部分数据库通常都具备两个以上的联机重做日志组。
    出于保护的目的,每个联机重做日志组都可以拥有多个位于不同磁盘驱动器上的日志。Oracle将并行地写入不同的日志,从而使得写入进程更有效。Oracle以轮询方式每次写入一个重做日志组。当一个重做日志组被写满时,LGWR进程会关闭这些重做日志并打开下一个联机重做日志进行处理。
    重做日志中的记录称为更改矢量(change vector)。每个更改矢量以scn顺序来代表一个原子数据库更改,这样可以在恢复(RMAN恢复或手动恢复)期间将所有更改记录按顺序应用于数据库,从而实现恢复故障时间点(或者要求的其他较早时间)的数据库。LGWR进程负责将更改矢量(累积在一起就是重做)从重做日志缓冲区中写入到联机重做日志中。

004-3归档的重做日志
    Oracle结束一个联机重做日志的写入并开始写入另一个联机重做日志时,会发生日志切换(log switch)。如果数据库处于archivelog模式下并且正在运行arch进程,日志切换的结果是生成联机重做日志的一个副本。这个联机重做日志的副本称为归档的重做日志。Oracle可以将归档的重做日志文件最多复制到10个不同的目录。在介质恢复期间,数据库使用归档的重做日志来执行恢复操作。

004-4数据库控制文件
    每个Oracle数据库都有一个或多个数据库控制文件。控制文件中包含了许多数据库信息,如当前scn、数据库数据文件的状态以及数据库状态。另外,控制文件也存储多种RMAN操作的关键信息,如每个数据库数据文件的备份状态。如果丢失控制文件,则需要遵循特定的过程来在控制文件中重新创建RMAN类别。在控制文件中还包含一类dba感兴趣的关于检查点scn(有关最近修改的给定数据文件的scn)的信息。Oracle将对该检查点scn与存储在数据文件头文件中的检查点SCNs进行交叉检查。如果它们完全匹配,则不需要进行数据库恢复工作。反之则需要进行某种类型的恢复工作,例如当系统崩溃时进行的自动恢复。有时需要进行介质恢复,例如当数据库文件丢失时。

004-5 Oracle表空间
    Oracle表空间是Oracle的一种非实体部分。表空间是Oracle物理世界(表现形式为数据库数据文件)和逻辑世界(表现形式为Oracle表空间)之间的链接。我们通常将表空间当做物理-逻辑结构。Oracle在表空间中存储对象,如表和索引。
    表空间由一个或多个Oracle数据库数据文件组成,因此一个表空间可用的总空间取决于所有数据库文件分配的总空间的大小。表空间可以是offline状态或online状态,还可以处于read write或read only模式下。如果表空间处于read only模式下,表空间的内容就不会更改。因为read only表空间的内容不会更改,所以dba通常在表空间被设为只读后只备份一次read only表空间的数据库数据文件。当然,如果这个表空间不再处于read only模式下,就需要再次启动表空间备份。

004-6 闪回日志
    Oracle database 10g引入了将Oracle数据库闪回到其他时间点的功能。通常要用闪回日志来帮助实现该功能。闪回日志存储在FRA中。Oracle单独负责管理闪回日志,因此它将根据需要创建、删除和调整闪回日志的大小。同样要注意,Oracle没有归档闪回日志,因此不需要进行恢复。RMAN支持闪回恢复。

004-7 闪回恢复区
    Oracle database 10g引入了FRA的概念,它允许用户在磁盘上定义一块中心区域以用来恢复相关文件(例如RMAN备份和归档的重做日志)。尽管FRA的确参与闪回数据库(flashback database)操作,但请注意不要将闪回恢复区与Oracle的闪回数据库特性混淆,FRA比闪回数据库的功能要强大的多。下面的结构可存储在FRA中:
    归档的重做日志
    RMAN备份固定形式
    RMAN数据文件副本
    闪回日志
    数据库控制文件的副本
    每个重做日志组的一个成员
    控制文件自动备份和副本

004-8 Oracle自动存储管理(ASM)
    Oracle ASM(automatic storage management)是Oracle用于管理数据库文件的集成系统。ASM支持多种不同的文件系统类型,包括已使用的磁盘驱动器、原始磁盘驱动器和NetFiler设备等。ASM的工作思路是通过让Oracle负责基本的磁盘管理操作(例如负载平衡和数据保护)来简化dba的工作。RMAN支持ASM基础架构,通过该基础架构可将数据库FRA放置在ASM磁盘上,或者可以直接备份到ASM磁盘。
    虽然ASM有一定的作用,但我们认为在大多数Oracle安装中不需要安装ASM。如果由一个单一的、非RAC的、带有两个或3个数据库的服务器,则不需要ASM。

005 更多关于Oracle重做日志的内容
    005-1重做日志概述
    Oracle重做日志包含两类:
        联机重做日志
        归档重做日志
    在还原和恢复Oracle数据库时,重做日志是最重要的组件之一。因为重做日志存储了数据库发生的所有变化。数据库操作期间,Oracle LGWR进程负责将数据操作情况写入联机重做日志,创建您永远也不希望使用的更改记录。
    LGWR进程负责将由Oracle事务建立的称为redo的信息写入联机重做日志文件。redo是发生在数据库中的事件以及事件发生顺序的记录。几乎所有的DML,DDL,事务提交操作都会创建redo。在数据库恢复期间,Oracle读取redo并按照redo建立的顺序恢复数据库。一般该恢复过程在后台进行,不需要DBA参与(例如崩溃恢复),但有时情况有所不同,例如在数据库恢复和数据文件恢复时,需要DBA参与其中。
    联机重做日志文件大小固定。当LGWR进程达到给定的联机重做日志文件末端时,它将会关闭该文件,并寻找另外的联机重做日志文件并写入。该进程称为日志切换(log switch)。日志切换是一个串行进程,从性能角度来看,该进程开销昂贵。
    在日志切换期间,LGWR寻找可写入的联机重做日志文件。如果找到可用的联机重做日志文件,LGWR将打开该文件并开始写入redo。如果LGWR不能找到可用文件,则等待联机重做日志文件,直到有可用的为止。在等待期间,LGWR将不厌其烦地向报警日志和其他地方发送“抱怨信息”,此时对数据库的操作将被挂起,也就是说数据库将暂时停止工作,通常应该尽可能地避免这种情况发生。
    每个创建的联机重做日志文件分配给一个联机重做日志组。在非集群配置环境下,Oracle在同一时间仅向一个重做日志组写入日志。如果运行在RAC(real application clusters)环境中,每个RAC实例将redo写入它自己的重做日志组中。
    联机重做日志组具有几个不同的状态:
    current:正在使用的联机重做日志
    active:处于该状态的联机重做日志不在当前重做日志文件组中,它正在等待归档进程将重做复制到归档重做日志中。
    inactive:已经被归档的不活跃的联机重做日志。
    unused:正在被Oracle数据库使用的联机重做日志。 表示该联机重做日志文件组对应的文件还从未被写入过数据,通常刚刚创建和重建的联机重做日志文件组会显示成这一状态。当日志切换到这一组时,就会改变状态。

005-2 多路联机重做日志
    如果active联机重做日志丢失,将会造成巨大的损失。一旦发生该问题,数据库将会崩溃,也将可能面临数据的丢失,需要大量的时间进行恢复工作。因为Oracle数据库恢复到失败时间点的工作主要依靠联机重做日志的可用性。正如您所知,联机重做日志将使数据库易于产生磁盘设备的丢失,发出不正确的删除命令,或其他的错误。为解决这一问题,可以为每个联机重做日志创建镜像。若为一个联机重做日志建立一个以上的副本,该日志所在的组称为多路联机重做日志组。为给联机重做日志组提供多重保护,通常将多路日志副本放在不同的物理设备中。从高可用性角度考虑,建议将联机重做日志组中的成员分别存放到不同的磁盘驱动设备上。
    由于多路联机重做日志组的多个成员可以并行写入,因此在每个组中尽管有多个日志成员组也不会带来性能问题。

005-3 日志序列号
    当写入每个联机重做日志组时,该组将被分配一个序号。该序号称为日志序列号。新建立的数据库其第一个日志序列号总是以1开始。写入联机重做日志组时,该序号在发生日志切换操作后将按顺序递增。如上所述,下一个写入的联机重做日志序列号为2,后面的以此类推。
    执行正常的数据库操作时,Oracle将打开一个可用的联机重做日志,将redo写入其中,一旦填满联机重做日志,则关闭它。一旦该联机重做日志被填满,LGWR进程将切换到另一个联机重做日志组。此时,如果数据库处于archivelog模式,LGWR将激活ARCn进程,ARCn进程将以顺序循环方式写入联机重做日志。
    ARCn进程响应LGWR的调用,将在由Oracle数据库参数LOG_ARCHIVE_DEST_n定义的地址和/或者定义的闪回恢复区上创建联机重做日志的副本。直到ARCn进程至少创建了一个归档重做日志,Oracle才能重用有关的联机重做日志文件可能需要创建多个归档重做日志后,相关联的联机重做日志才能够被Oracle重用,这将由系统的配置所决定。在创建归档重做日志时,它们将保留分配给父联机重做日志的日志序列号。该序列号在数据库中将保持唯一性,直到执行resetlogs操作打开数据库为止。一旦执行resetlogs操作,日志序列号将重置为1.
    在执行恢复操作期间使用resetlogs命令启动数据库时还需注意一点,如果使用的是Oracle database 10g或者更高的版本,Oracle提供使用执行resetlogs命令时间点前的备份来恢复数据库的功能。当执行resetlogs命令时,Oracle将会在联机重做日志重置时归档所有未归档的联机重做日志。该项功能提供使用执行resetlogs命令时间点前的备份恢复数据库的功能。使用备份文件和所有的归档重做日志,可以实现跨越resetlogs命令的数据库恢复,该功能使DBA在使用基于resetlogs的命令恢复数据库后不用忙于立即进行备份(尽管该备份仍然是非常重要的)。该功能减少了平均恢复时间,用户可以在恢复后打开数据库,而不需要首先去备份数据库。

005-4联机重做日志管理
    alter database命令可用于增加或删除联机重做日志。
    当希望调整日志文件组大小时,需要先删除该日志文件组,然后以希望的大小重新建立该日志组。

005-5 archivelog模式与noarchivelog模式
    Oracle数据库可以在两种模式下运行。默认情况下,数据库在noarchivelog模式下创建,这种模式允许正常的数据库操作,但是不提供时间点恢复操作或联机备份的功能。如果要实现联机备份(或热备份),就需要以archivelog模式运行数据库。在archivelog模式下,数据库通过ARCn进程在一个或多个归档日志目标目录中生成所有联机重做日志副本。
    使用archivelog模式不仅仅是简单地将数据库置入archivelog模式,还需要对数据库进行一些配置。用户还必须配置ARCn进程,并且提供归档的重做日志目标目录。需要注意的是,一旦Oracle数据库处于archivelog模式下,数据库活动将在所有可用的联机重做日志被使用过之后挂起。数据库在归档这些联机重做日志前保持挂起状态。因此,对于处在archivelog模式下的数据库,错误配置将导致它因不能归档当前联机重做日志而挂起所有的操作。这听起来很严重,但实际上确实如此,归结于以下的一些基本方面:
    适当地配置数据库
    确保有足够的可用空间
    确保操作与预期一致。例如:如果在archivelog模式下的数据库中定义闪回恢复区,则要确保归档重做日志已被成功写入到该目录中。

006 组合情况
006-1 数据库的启动和关闭
    1)实例启动(未加载启动)
        启动数据库时首先经历的阶段是实例启动。在这个阶段,Oracle分析数据库参数文件,并且通过设法获得实例锁来确定实例还未运行。随后,Oracle启动多种不同的数据库进程,如DBWn和LGWR进程。Oracle还将分配SGA所需的内存。一旦启动了实例,Oracle会向启动实例的用户报告后台进程已经启动了实例,以及为SGA分配了多少内存。
    如果Bob执行startup nomount命令,那么Oracle会在启动实例后停止数据库启动进程。在执行某些恢复操作(如控制文件的重建)时,管理员可能会这样启动实例。
    2)数据库加载(加载启动)
        启动进程中的第二个阶段是数据库加载。在加载阶段,Oracle打开数据库控制文件。成功打开后,Oracle从这个控制文件中析取数据库文件名,为打开这些数据文件做好准备。需要注意的是,这个时候Oracle不会检查这些数据文件是否存在,而只是从控制文件中标识数据文件的位置。完成这个步骤后,Oracle向用户报告已经加载了数据库。
    如果Bob执行的是startup mount命令,此时Oracle会停止打开数据库并等待下一个指令。当Oracle实例已启动并且数据库已经加载但未打开时,可以执行某些恢复操作,这些操作包括将数据库数据文件和恢复系统表空间数据文件的位置重命名。
    3)数据库打开
        Bob执行的是startup命令,Oracle将继续启动进程并设法打开数据库。在数据库打开阶段,Oracle验证数据库数据文件是否存在并打开这些文件。Oracle打开数据文件时会检查数据文件头,并且比较这些文件头中的scn信息和控制文件中存储的scn。接下来讨论scn。
    scn是跟踪数据库状态的Oracle方法数据库发生更改时,就会生成与更改关联scn。在数据库数据文件中写入更改时(发生于检查点操作期间),数据文件头会更新当前scn。当前scn也会被记录在数据库控制文件中。
    Oracle设法打开数据库时会检查每个数据文件和数据库控制文件中的scn。如果scn相同并且位映射标记设置正确,就认为这个数据库是一致的,即可打开和使用数据库。
    注意:scn可以看做是VCR上的计数器。随着时间的推移,VCR计数器会不断增加,并指向磁带所在的当前时间点。因此,如果要观看磁带上的节目,则可以将磁带倒退(或快进)到相应的计数器位置(即该节目的开始位置)。scn的工作原理与VCR计数器相同。Oracle需要恢复数据库时会“倒退”到相应的scn,然后重放这个scn后的所有事物,直至数据库恢复。
    如果scn不相同,则Oracle会自动执行灾难或实例恢复。如果联机重做日志文件中存在生成一致的映像所需要的重做,就会发生灾难或实例恢复。如果由于数据文件损坏或者由于恢复需要的重做不在联机重做日志中而不能执行灾难或实例恢复,Oracle会要求DBA执行介质恢复(media recovery)。介质恢复需要从一个数据库备份中恢复一个或多个数据库数据文件,与实例恢复不同的是,介质恢复是一个手动执行的过程。RMAN能够用于介质恢复。一旦数据库打开进程完全成功之后(没有恢复、灾难恢复或介质恢复),数据库就可以用于业务。
 4) 为了关闭数据库,Bob可以执行shutdown命令。这条命令将关闭和卸载数据库,然后几乎完全按照与前面介绍的启动进程相反的顺序来关闭实例。
    需要特别注意的是 :使用shutdown abort命令基本上相当于模拟的数据库灾难,这条命令很常用,并且极少出现问题。但Oracle通常建议如果有可能,应在数据库处于一致状态的情况下关闭数据库。
    如果必须使用shutdown abort命令来关闭数据库,我们就应当使用startup命令(或者可能是startup restrict命令)重新打开这个数据库。接下来,在执行任何脱机备份操作前应当使用shutdown immediate命令来关闭数据库。需要注意的是,由于在关闭进程期间回滚事务需要一定的时间,所以即使是用上述方法也可能导致延迟关闭数据库。
    注意:只要备份/恢复策略是正确的,数据库在脱机备份时是处于一致状态(如正常的shutdown命令)还是非一致状态(如shutdown abort命令)并没有多大关系。Oracle建议在数据库处于一致状态时执行冷备份,我们也建议执行这样的操作(这是因为RMAN不会备份联机重做日志)。最后需要注意的是联机备份根本不会使用shutdown命令。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29067253/viewspace-1984121/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29067253/viewspace-1984121/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值