`

数据库安全小知识: 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

    "Oracle DB数据库灾难恢复神器:PRM 2.0" 提供了一种高效且用户友好的解决方案,旨在应对数据库可能出现的各种紧急情况,如误删除数据、数据库损坏等问题。PRM,即Oracle DUL(Data Utility Library)与图形用户界面...

    oracle四大宝典之3:Oracle备份与恢复

    "Oracle四大宝典之3:Oracle备份与恢复"无疑是对Oracle数据库管理员至关重要的一环,因为数据的备份与恢复是保障业务连续性和数据安全的核心策略。 Oracle备份与恢复涉及到多个层面的知识,主要包括以下几个方面: ...

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

    ### Oracle 数据库云服务器灾难恢复知识点详述 #### 一、Oracle 数据库云服务器 (Exadata) 概述 **Oracle 数据库云服务器 (Exadata)** 是一款专门为处理各种数据库负载设计的高性能平台,能够应对从扫描密集型数据...

    ORACLE数据库恢复演练报告.doc

    Oracle数据库恢复是数据库管理系统中的关键环节,特别是在企业级应用中,数据的安全性和完整性至关重要。本报告将详述一次Oracle数据库的异机恢复测试过程,旨在检验数据库在异常情况下的恢复能力,确保业务连续性。...

    图书:Oracle数据库的秘密

    以下是一些Oracle数据库的关键知识点: 1. **SQL查询处理**:Oracle支持标准SQL,并对其进行扩展,提供了复杂的查询功能,如子查询、连接查询、集合操作等。优化器是Oracle处理SQL查询的核心,它根据表统计信息选择...

    Oracle 11g数据库应用简明教程

    Oracle 11g数据库是Oracle公司推出的一款企业级关系型数据库管理系统,广泛应用于大型数据存储、数据处理和数据分析等场景。本教程旨在提供一个Oracle 11g数据库应用的简明指南,帮助初学者快速掌握数据库的基础操作...

    数据库与灾难恢复

    1. Oracle数据库备份与恢复 Oracle提供了多种备份方法,包括物理备份(如RMAN,即恢复管理器)和逻辑备份(如SQL*Plus的EXPDP/IMPDP)。RMAN能进行增量备份、完整备份,并支持网络备份设备。此外,Oracle的闪回技术...

    Oracle 11g 数据库应用简明教程

    Oracle 11g 数据库应用简明教程是针对学习Oracle数据库管理系统的一个综合教程,主要针对的是11g版本,这是Oracle公司的一个重要版本,提供了许多增强功能和优化,旨在提高数据库性能、可用性和安全性。本教程由十八...

    Oracle数据库白皮书

    Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统,它提供了高效、稳定和安全的数据存储与管理解决方案。这篇"Oracle数据库白皮书"包含了官方的中文文档,详细介绍了Oracle数据库的各项特性和最佳实践,...

    数据库Oracle10g_DBA

    Oracle 10g数据库管理员(DBA)指南是一个关键资源,为那些管理、监控和优化Oracle 10g数据库系统的专业人士提供了深入的知识。Oracle 10g是Oracle公司的一个重要版本,它引入了许多新特性和改进,以提升性能、可扩展...

    oracle数据库大会2

    5. **数据库安全**:Oracle数据库的安全性包括用户权限管理、加密技术、审计功能和数据库防火墙等,大会可能会探讨如何强化这些安全措施。 6. **云服务集成**:随着云计算的发展,Oracle数据库如何与Oracle Cloud ...

    中兴公司ORACLE数据库培训

    在中兴公司的ORACLE数据库培训中,通常会涵盖一系列关键知识点,帮助学员深入理解和掌握Oracle数据库的使用和管理。以下是一些可能涉及的重要主题: 1. **Oracle数据库体系结构**:培训可能会介绍Oracle数据库的...

    Oracle DBA手记2:数据库诊断案例与内部恢复实践

    《Oracle DBA手记2:数据库诊断案例与内部恢复实践》是一本专为Oracle数据库管理员(DBA)设计的专业书籍,旨在深入探讨Oracle数据库的诊断技巧和内部恢复策略。本书结合实际案例,提供了丰富的实战经验,帮助读者...

    oracle数据库恢复技术:RMAN与闪回技术

    在IT行业的数据库管理领域,Oracle数据库以其卓越的性能、安全性和可靠性而闻名。当涉及到数据恢复时,Oracle提供了两种强大的工具——RMAN(Recovery Manager)和闪回技术,它们各自在不同的场景下发挥着至关重要的...

    数据安全警示录-从Oracle数据库安全谈起

    在罗海雄于2014年互联网安全大会的演讲“数据安全警示录-从Oracle数据库安全谈起”中,我们可以提炼出以下关键知识点: 1. 信息安全三要素:保密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。这...

    oracle 12c数据库管理

    不过,提供的内容并没有直接涉及到Oracle 12c数据库管理的具体知识点,而是包含了一些推广信息,提示用户可以联系QQ号获取IT类书籍PDF下载链接。这些信息与我们需要生成的知识点无关,因此我将直接从标题和描述中...

    oracle数据库管理与维护技术手册.pdf

    Oracle数据库是全球广泛使用的大型关系型...《Oracle数据库管理与维护技术手册》通过深入讲解这些关键领域,旨在帮助读者掌握Oracle数据库的全面知识,从而更好地管理和维护数据库系统,确保业务连续性和数据安全性。

    Oracle通过DBF恢复数据

    本文将详细介绍在没有备份的情况下,如何通过数据文件(DBF)来恢复Oracle数据库。 #### 二、准备工作 在开始恢复工作之前,我们需要做一些必要的准备工作: 1. **确认数据文件(DBF)存在**:首先确认原始数据库中的...

    Oracle9i灾难恢复详细步骤 pdf

    本文档旨在提供一套完整的Oracle9i数据库灾难恢复方案,特别是如何在出现严重故障时利用有效的备份进行不完全恢复。这将帮助用户在遇到诸如硬件故障导致的数据丢失等情况下,能够快速有效地恢复数据库。 #### 二、...

Global site tag (gtag.js) - Google Analytics