`

数据库安全小知识: Oracle数据库的灾难恢复方法

阅读更多
  要对Oracle数据库备份与恢复有清晰的认识,首先有必要对数据库的几种运行状态有充分的了解。Oracle数据库的运行状态主要分为3种,他们依次为:

    Nomount(非安装)Oracle只是读取ini文件中的配置信息,并初始化SGA区。
    Mount(安装)Oracle除了需要读取ini文件还要读取控制文件,并从中获取有关数据库的物理结构等信息。
    Open(打开)数据库要检查所有文件处于同一时间点,对错误进行恢复对未完成事务回滚,并最终可以允许用户访问。

    数据库的备份主要分为三种类型:冷备份;热备份;逻辑备份;

    数据库的备份不是本文讨论的重点,在这里只作一个概要的介绍,Oracle数据库备份主要有:

    Cold Backup(冷备份) 主要指在关闭数据库的状态下进行的数据库完全备份,备份内容包括所有数据文件、控制文件、联机日志文件、ini文件。
    Hot Backup(热备份) 指在数据库处于运行状态下,对数据文件和控制文件进行备份,要使用热备份必须将数据库运行在(Archive Log)归档方式下。
    Export(逻辑备份)这是最简单的备份方法,可按数据库中某个表、某个用户或整个数据库来导出,并且支持全部、累计、增量三种方式。使用这种方法,数据库必须处于打开状态,而且如果数据库不是在restrict状态将不能保证导出数据的一致性。

    数据库的恢复可分为两大类:完全恢复;不完全恢复;

    完全恢复指将数据库恢复到发生故障的时间点,不丢失任何数据。不完全恢复指将数据库恢复到发生故障前的某一个时间点,此时间点以后的所有改动将会丢失。如果没有特殊需求,建议应尽量使用完全恢复。

    Oracle数据库的恢复过程分两步进行,首先将把存放在重做日志文件中的所有重做运用到数据文件,之后对重做中所有未提交的事务进行回滚,这样所有数据就恢复到发生灾难那一时刻了。数据库的恢复只能在发生故障之前的数据文件上运用重做,将其恢复到故障时刻,而不能将数据文件反向回滚到之前的某一个时刻。举个例子,我们有一个2001/1/1的数据库备份,当2001/5/1使我们发现数据库中数据发生混乱,希望将数据库恢复到2001/4/30时的状态,我们只能先恢复2001/1/1的数据库备份然后在其上运用重做记录使其前滚到2001/4/30时的状态,而不能将2001/5/1的数据库向后回滚到2001/4/30。

    为了系统的设计数据库的恢复方案,我们先对可能遇到的错误进行分类,Oracle数据库错误主要分为5大类:

  SQL语句失败
  线程失败
  实例失败
  用户操作失败
  存储设备失败

    如果发生前三种失败,不需要我们人为干涉,Oracle系统会自动进行恢复。对于用户操作型的失败(如误删除数据),我们采取的补救措施主要有导入最新的逻辑备份或进行到某一时间点的不完全恢复。从Oracle 8之后的新版本中引入了基于表空间的时间点恢复(TSPITR),可以单独将包含错误操作的表空间恢复到指定时间,而不必对整个数据库进行不完全恢复。当错误操作发现比较及时而且数据量不大的情况下也可以考虑使用logminer生成反向SQL。

    针对存储设备的失败的情况比较复杂也是本文讨论的重点,存储设备的失败必然会使放置在其上的文件变为不可用,我们先将Oracle数据库所涉及到的文件进行一个划分,主要可分为:

  Oracle的系统文件,指Oracle的运行文件,各种应用程序
  数据库控制文件
  数据库联机重做日志文件
  数据文件
  归档日志文件

    避免第一种文件失败主要依赖系统管理员进行操作系统级的备份,当发生事故后只能依靠操作系统备份将其恢复。

    控制文件中记录着整个数据库的结构、每个数据文件的状况、系统SCN、检查点计数器等重要信息,在创建数据库时会让用户指定三个位置来存放控制文件,他们之间互为镜像,当其中任何一个发生故障,只需将其从ini文件中注释掉故障数据文件就可重新将数据启动。当所有控制全部失效时,可以在Nomount模式下执行create controlfile来重新生成控制文件,但必须提供redo log,data file,文件名和地址以及MAXLOGFILES,MAXDATAFILES,MAXINSTANCES等信息。如果失败之前运行过alter database backup controlfile to trace或alter database backup controlfile to ‘xxx’对控制文件作备份,恢复时可使用生成的脚本来重建或用备份文件覆盖,如果使用了旧的控制文件在恢复时要使用recover xxx using backup controlfile选项来进行恢复,并使用resetlogs选项来打开数据库。

    如果丢失的是联机日志文件,分两种情况处理1、丢失的是非活动的日志文件;2、丢失的是当前激活的日志文件。

    如果是第一种情况,而发生故障的日志文件组又具有多个成员,可以先将数据库shutdown,然后用操作系统命令将损坏日志文件组中好的日志成员文件把损坏的成员文件覆盖(在同一个日志成员组中的所有日志文件的各为镜象的),如果其物理位置不可用可将其拷贝到新的驱动器上,使用alter database rename file ‘xxxx’ to ‘xxxx’改变文件位置,之后启动数据库,如果正常马上进行一个冷备份。如果损坏的日志组中只有一个日志成员,先mount上数据库,将其转换为noarchivelog模式,执行alter database add logfile member ‘xxx’ to group ‘x’给相关组增加一个成员,再执行alter database drop logfile member ‘bad_file’将损坏的日志文件删除,由于数据库的结构发生变动需要备份控制文件,之后将数据库改回archivelog模式,做一个冷备份。

    如果丢失的是当前激活的日志文件,数据库又没有镜像而且当前日志组中所有成员均变为不可用。首先将数据库shutdown abort,从最近的一次全备份中恢复所有的数据文件,将数据库启动到mount状态。如果原来的日志文件物理位置不可用,使用alter database rename file ‘xxx’ to ‘xxx’改变文件的存放位置。然后,使用recover database until cancel命令来恢复数据库,直到提示最后一个归档日志运用完之后,输入cancel。之后用alter database open resetlogs打开数据库,如果没有问题,立即进行一个冷备份。注意!所有包含在损坏的redo log中的信息将会丢失,也就是说数据库崩溃前已经提交的数据有可能会丢失。这对于某些要求很高的应用将会损失惨重,因此应尽量使每个日志组具有多个日志成员,并且放置在不同的驱动器上一防止发生介质故障。

    数据文件发生故障的情况也分为多种情况,1、丢失包含在SYSTEM表空间的数据文件;2、丢失没有回滚段的非SYSTEM数据文件;3、丢失有回滚段的非SYSTEM数据文件。

    如果损坏的是系统表空间的数据文件。唯一的办法是从上一次备份中恢复受损的数据文件,(如果原位置不可用使用alter database rename命令改变新文件的位置),之后在数据库mount的状态下执行recover database/datafile对数据库进行回复,才能将数据库打开。注意:当SYSTEM表空间或其中的数据文件脱机,数据库是无法被打开的,因此必须在mount状态下将所有的恢复工作完成。

    当丢失的数据文件不属于系统表空间而且也不包含回滚段时,有可选择在数据库的两种状态下进行恢复---在数据库open的状态或者在数据库mount的状态。如果用户急于访问数据库中未受损部分的数据或对损坏的数据文件进行恢复需要很长时间,可以先使受损的数据文件脱机,将数据库打开给用户访问,再恢复受损的数据文件最后将其联机。步骤如下:先在数据库mount时,将相关的数据文件或表空间进行脱机alter database datafile xxx offline,然后将数据库open,这样就能使数据库未受损的部分先供用户访问,之后再进行recover datafile/tablespace,完成后用alter database datafile/tablespace ‘xxx’ online使其恢复联机就可被访问了。 当然用户也可以选择在数据库mount状态下,用recover database/datafile将所有的恢复工作做完,将所有数据文件一起打开供用户访问。

    如果丢失的数据文件是最后一种情况,即包含有回滚段的非系统表空间数据文件。也可以选择是在数据库先open的状态还是在mount状态下恢复。不过与上一种情况不同的是当包含回滚段的数据文件损坏时,如果使其先offline将数据库打开,那么所有数据库崩溃前未提交的事务涉及到的表将无法访问,也就是说在回滚段恢复前其中涉及的对象都不允许被访问。而且当所有包含回滚段的数据文件都在offline状态时,数据库无法进行任何DML操作,因此在数据库open状态恢复包含回滚段的数据文件时,可以先创建几个临时回滚段供数据使用create rollback segment temp1 tablespace system; alter rollback segment temp1 online;,当数据文件恢复后再将他们删除alter rollback segment temp1 offline; drop rollback segment temp1;。注意:当用这种方法使恢复的数据文件online之后,所有的原有回滚段将处于offline状态,必须手工使用alter rollback segment RBSxx online;使他们恢复联机状态,这样才能被数据库正常使用。如果在数据库mount状态下完成所有恢复,则不需要上述步骤。

    如果丢失数据文件后,用户发现没有故障前的数据文件的备份,而且自从丢失的数据文件最早建立之后一直没有使用过resetlogs选项打开过数据库。也就是说用户的控制文件是在损坏的数据文件建立前创建的,归档日志中包括对损坏数据文件的所有重做记录。用户就还有一种恢复方法,用户可以先将损坏的数据文件或表空间脱机alter database datafile / tablespace xxx offline,之后执行alter database create datafile ‘new/xxx.dbf’ as ‘old/xxx.dbf’,数据库会根据保存在控制文件中的信息重建一个空的数据文件,之后再执行recover tablespace / datafile将所有重做记录运用到数据文件,使其完全恢复到当前状态,之后便可再将其恢复联机。

    如果丢失的是最后一种文件---归档文件或归档文件所处的物理位置不可用,首先shutdown数据库,立即作一个冷备份。然后修改ini文件中的归档日志文件目的路径,重新启动数据库。以后再发生灾难只需从最新的备份中将相关文件恢复,数据库作recover时就不需要备份之前丢失的归档文件了。在Oracle 8之后的新版本中提供了log_archive_duplex_dest和log_archive_dest_1...5等参数允许保留多份归档文件到不同位置,甚至到远端服务器从而保证归档文件的可靠性。

    最后再说几点数据库恢复时的注意事项:

    1.本文讨论所有情况的默认前提是数据库运行在归档(ARCHIVELOG)方式下,并只涉及到一般常见的情况和最基本的恢复方法。使用Oracle提供的恢复管理器RMAN也能完成上述任务,如果运行环境比较复杂建议使用RMAN来做备份和恢复。

    2.一旦数据库发生灾难,最好在进行恢复之前做一次完全的冷备份,以便在进行恢复时产生差错还可以进行补救。很大一部分数据丢失是由于不正确的恢复操作所引起的。

    3.当数据库完成恢复之后,尤其是使用resetlogs选项打开数据库之后,要马上关闭数据库进行一次完全的冷备份。因为,为防止放弃的重做日志被下次恢复时再次运用,resetlogs选项会重新创建redo log文件并将其的计数清零,这将使之前做的所有备份将变为不可用(一般情况下)。

    4.要特别注意当进行数据库完全恢复,从发生故障的时间点前的备份中恢复损坏文件时,一定不要使备份中的redo log文件覆盖了当前的redo log文件,否则就只能进行不完全恢复并且要丢失一部分数据了。

转载地址:http://it.rising.com.cn/newSite/Channels/Safety/SysSafety/Safe_Database/200405/18-100215165.htm
分享到:
评论

相关推荐

    Oracle DB数据库灾难恢复神器: PRM 2.0

    PRM = Oracle DUL + GUI ,是开放的Oracle数据库灾难恢复工具,可以轻松恢复Truncate掉的表,和打不开的数据库,使用JAVA语言编写,跨所有操作系统平台

    通过ODG实现开放平台 Oracle数据库灾难恢复.pdf

    通过ODG实现开放平台 Oracle数据库灾难恢复 Oracle 数据库灾难恢复是大多数全球化企业的高级管理人员最关注的问题之一。经济波动、市场走向的快速变化和竞争压力,使当今的全球化企业信息系统必须保障7 x 24小时的...

    Oracle数据库异地容灾方案.doc

    "Oracle数据库异地容灾方案" Oracle 数据库异地容灾方案是指在两个或多个数据中心之间,使用连续数据复制技术实现数据库的异地容灾备份和恢复。该方案旨在提供高可用性和高可靠性的数据库服务,能够满足企业对数据...

    Oracle 数据库云服务器灾难恢复

    Oracle 数据库云服务器 (Exadata) 为从扫描密集型数据仓库应用程序到高度并发的 OLTP 应用程序的所有数据库负载提供了最佳解决方案。Exadata 在高度可用、高度安全的环境中提供超强的性能。

    Oracle数据库备份与恢复方案

    任何数据库在长期使用过程中,都会存在一定的安全隐患。对于数据库管理员来说不能仅寄希望于计算机操作系统的安全运行,而是要建立...本文以ORACLE数据库为例,结合医院的业务应用环境,介绍 ORACLE数据库的备份恢复。

    Oracle数据库灾难恢复的研究.pdf

    Oracle数据库灾难恢复的研究.pdf

    Oracle四大宝典之三:Oracle备份与恢复 中文版

    从物理备份的基础归档开始,主要介绍Oracle数据库的物理备份,包括用户管理的备份、RMAN备份,并用实例展示备份恢复的步骤。 第一章 归档设置 第二章 Oracle备份与恢复原理 第三章 用户管理的备份 第四章 用户管理...

    浅析Oracle数据库备份和灾难恢复.pdf

    浅析Oracle数据库备份和灾难恢复.pdf

    数据库与灾难恢复

    oracle、SQLserver、sybase、informix等各类数据存储备份与灾难恢复。

    Oracle9i灾难恢复详细步骤 pdf

    编写本篇文档的目的是当Oracle9i 数据库出现灾难时怎样使用有效备份来进行数据库的不完全恢复。 二、本文档适合情况 1. 服务器崩溃,例如所有硬盘损坏、存储损坏,造成数据库崩溃,丢失所有数据 2. 有 datafile、...

    官方资料:Oracle Active Data Guard新特性_白皮书.pdf

    使用物理备用数据库进行致据库滚动升 级和备用数据库优先修补•跨越任意距商实现枣致据丟失的灾难恢 H保护而不会影响性能• Active Data Guard 足 Oracle 数据库企 业版包含的基本Da丨a Guard功能的一 个超集。

    ORACLE数据库灾难恢复与备份技术探讨.pdf

    ORACLE数据库灾难恢复与备份技术探讨.pdf

    Oracle Standby数据库建立

    Standby 数据库可以提供数据备份和灾难恢复的功能,确保业务的连续性和数据的安全性。此外,Standby 数据库还可以提供读取负载均衡的功能,减少 Primary 数据库的读取压力。 Standby 数据库的应用场景 Standby ...

    快速掌握Oracle数据库的备份策略

    "Oracle 数据库备份策略详解" Oracle 数据库备份策略是指通过创建数据库...Oracle 数据库备份策略是非常重要的, Database Administrator(DBA)需要根据实际情况选择合适的备份策略,以确保数据的安全和可恢复性。

    Oracle数据库RMAN备份与灾难恢复在寒区旱区特色数据库的应用.pdf

    Oracle数据库RMAN备份与灾难恢复在寒区旱区特色数据库的应用.pdf

    oracle Stream

    4.灾难恢复:Oracle Stream 可以用于灾难恢复场景中,确保数据库的可用性和可靠性。 5.多平台支持:Oracle Stream 支持多种操作系统平台,可以在不同的操作系统平台上实现数据库之间的同步。 6.免费解决方案:...

    oracle 回滚段灾难恢复

    对于回滚段出现异常,无法启动数据库的处理脚本

    Oracle 11gR2 使用 RMAN duplicate from active database 复制数据库

    Oracle 11gR2 使用 RMAN duplicate from active database 复制数据库 ...RMAN duplicate from active database 复制数据库是一种高效、可靠的数据库复制方法,能够快速地复制大量的数据,适用于大库的迁移和灾难恢复。

    Oracle安全技术PPT

    数据库安全物理威胁的主要解决方案包括数据备份/恢复、数据导入/导出、数据库的灾难恢复,计算机的集群和磁盘阵列等技术,在此本文不进行讨论。本文以Oracle数据库为例阐述对逻辑威胁的主要解决方法,包括身份认证...

    Oracle数据库容灾备份恢复指南中文版

    本文节选自ORACLE 11G官方技术文献中的 一节,主要针对RMAN下主库备库之间的快速灾难恢复,备份,增量备份的操作,中文版为40页,高清PDF,重新编译,DBA管理员必须手段,经典珍藏,拷贝到手机,平板上,祝您...

Global site tag (gtag.js) - Google Analytics