当前位置:  数据库>oracle

Oracle 不同故障的恢复方案

    来源: 互联网  发布时间:2017-04-10

    本文导语: 之前在Blog中对RMAN 的备份和恢复做了说明,刚看了下,在恢复这块还有知识点遗漏了。 而且恢复这块很重要,如果DB 真要出了什么问题,就要掌握对应的恢复方法。 所以把DB的恢复这块单独拿出来说明一下。   RMAN 备份与恢复 ...

之前在Blog中对RMAN 的备份和恢复做了说明,刚看了下,在恢复这块还有知识点遗漏了。 而且恢复这块很重要,如果DB 真要出了什么问题,就要掌握对应的恢复方法。 所以把DB的恢复这块单独拿出来说明一下。

 

RMAN 备份与恢复 实例

 

如何搭建一个数据库服务器平台

 

如何 搭建 RMAN 备份平台

 

 

在非Catalog模式下, 备份的信息存储在controlfile中。 所以在RMAN 备份的时候,别忘了备份控制文件。

 

1.  SPFILE丢失

startup nomount;

set dbid 3988862108;

restore spfile from autobackup;

或者通过某个文件

restore spfile from 'path/file_name'

shutdown immediate;

set dbid 3988862108;

startup;

 

2. Controlfile全部丢失

 

控制文件做了3个冗余,很少会发生全部丢失的情况,当遇到控制文件所有都丢失,恢复需要以下步骤:

 

RMAN>set dbid 3988862108;

RMAN>startup nomount;

RMAN>restore controlfile from autobackup;

或者从文件恢复

RMAN>restore controlfile from 'file_name';

RMAN>alter database mount;

RMAN>recover database; (保证数据一致,因为控制文件里scn发生改变)

RMAN>alter database open resetlogs;

 

resetlogs命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始,每次使用resetlogs命令的时候,SCN不会被重置,不过Oracle会重置日志序列号,而且会重置联机重做日志内容. 这样做是为了防止不完全恢复后日志序列会发生冲突(因为现有日志和数据文件间有了时间差)。 

 

3.  Redo Log File损坏

       重做日志文件在数据库中是要求最高的组件,首先其对磁盘的IO要求极高,其次一旦CURRENT组发生故障,数据库会立即崩溃,并且100%会发生数据丢失,所以ORACLE建议至少每个组需要两个成员,并且在数据库运行过程中日志文件会一直被锁定,以防不测。

 

Redo log的恢复分为两种:CURRENT 和 非CURRENT

 

3.1  CURRENT 情况

造成redo 损坏,很多情况是与突然断电有关。这种情况下是比较麻烦的。

 

(1)如果有归档和备份,可以用不完全恢复。

SQL>startup mount;

SQL>recover database until cancel; 先选择auto,尽量恢复可以利用的归档日志,然后重新执行:

SQL>recover database until cancel; 这次输入cancel,完成不完全恢复,

用resetlogs打开数据:

SQL>alter database open resetlogs; 打开数据库

 

(2)强制恢复, 这种方法可能会导致数据不一致

sql>startup mount;

sql>alter system set "_allow_resetlogs_corruption"=true scope=spfile;

sql>recover database until cancel;

sql>alter database open resetlogs;

 

       运气好的话,数据库能正常打开,但是由于使用_allow_resetlogs_corruption方式打开,会造成数据的丢失,且数据库的状态不一致。因此,这种情况下Oracle建议通过EXP方式导出数据库。重建新数据库后,再导入。

 

redo 的损坏,一般还容易伴随以下2种错误:ORA-600[2662](SCN有关)和 ORA-600[4000](回滚段有关)。

 

metalink上的两篇文章介绍了两种情况的处理方法:

TECH: Summary For Forcing The Database Open With `_ALLOW_RESETLOGS_CORRUPTION` with Automatic Undo Management [ID 283945.1]

 

ORA-600 [2662] Block SCN is ahead of Current SCN [ID 28929.1]

 

这两种情况下的恢复有点复杂,回头单独做个测试,在补充进来。

 

 

3.2  非CURRENT 情况

       这种情况下的恢复比较简单,因为redo log 是已经完成归档或者正在归档。 没有正在使用。可以通过v$log 查看redo log 的状态。

 

(1)如果STATUS是INACTIVE,则表示已经完成了归档,直接清除掉这个redo log即可。

 

SQL>startup mount;

SQL> alter database clear logfile group 3 ;

SQL>alter database open;

 

(2)如果STATUS 是ACTIVE ,表示正在归档, 此时需要使用如下语句:

SQL>startup mount;

SQL> alter database clear unarchived logfile group 3 ;

SQL>alter database open; 

 

4. 非系统表空间损坏

      若出现介质故障导致某表空间不可用,恢复可以在数据库处于 open 或 mount 状态下进行,步骤如下:

1.        将该表空间置于offline状态

2.        修复表空间数据

3.        恢复表空间并处于一致性

4.        将表空间online

 

rman> sql 'alter tablespace dave offline';

如果文件不存在,就加immediate参数

rman> sql 'alter tablespace dave offline immediate';

rman>restore tablespace dave;

rman>recovery tablespace dave;

rman>sql 'alter tablespace dave online';

 

 

5. 数据文件损坏

       如果出现介质故障导致某表空间数据文件丢失(这种情况也可以参照表空间损坏的恢复)。

恢复可以在 数据库处于 open 或 mount 状态下进行,只需4个步骤

1.        将该数据文件置于 offline 状态

2.        修复数据文件(指定数据文件编号)

3.        恢复数据文件

4.        将数据文件 online

 

rman> sql 'alter datafile 8 offline ';

rman>restore datafile 8;

rman>recovery datafile 8;

rman>sql 'alter datafile 8 online';

 

 

6. 基于时间点/SCN/日志序列的不完全恢复 

       基于时间点/SCN/日志序列的不完全恢复,可以将数据库、表空间、数据文件等恢复至恢复备份集保存时间中的任何一个时间点/SCN/日志序列,但须谨慎,操作前一定需要做好备份,具备条件的情况下最好先恢复到异机。

 

6.1 基于时间点

run{

  set until time "to_date(12/29/10 23:00:00','mm/dd/yy hh24:mi:ss')";

  restore database;

  recover database;

  alter database open resetlogs;

}

 

SQL>STARTUP NOMOUNT;

SQL>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

SQL> recover database until time '2010-12-29 23:19:00';

SQL>ALTER DATABASE OPEN RESETLOGS;

 

ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';

SQL>startup mount;

SQL>restore database until time "to_date('2010-12-29 23:19:00','YYYY-MM-DD HH24:MI:SS')";

SQL>recover database until time "to_date('2010-12-29 23:19:00','YYYY-MM-DD HH24:MI:SS')";

SQL>alter database open resetlogs;

 

 

6.2 基于 SCN:

SQL>startup mount;

SQL>restore database until scn 10000;

SQL>recover database until scn 10000;

SQL>alter database open resetlogs;

 

6.3 基于日志序列

SQL>startup mount;

SQL>restore database until SEQUENCE 100 thread 1; //100是日志序列

SQL>recover database until SEQUENCE 100 thread 1;

SQL>alter database open resetlogs;

 

日志序列查看命令:

SQL>select sequence from v$log;

resetlogs就会把sequence 置为1

 

 

7. 非catalog下完全恢复

SQL>startup nomount;

SQL>restore controlfile from autobackup;

SQL>alter database mount;

SQL>restore database;

SQL>recover database;

SQL>alter database open resetlogs;

 

示例:

oracle ora10g> rm *;

oracle ora10g> ls;

oracle ora10g>  //数据文件,控制文件全部删除

 

oracle ora10g> rman target /; //因为controlfile 丢失,不能够连接到rman

oracle ora10g> sqlplus /nolog;

oracle ora10g> connect / as sysdba;

oracle ora10g> shutdown abort;

oracle ora10g> rman target /

 

rman> startup nomount;

rman> restore controlfile from autabackup;

rman> alter database mount;

rman> restore database;

rman> recover database; //online redolog 不存在

 

SQL>recover database until cancel; //当redo log丢失,数据库在缺省的方式下,是不容许进行recover操作的,那么如何在这种情况下操作呢

SQL>create pfile from spfile;

 

vi /u01/product/10.20/dbs/initora10g.ora,在这个文件的最后一行添加

*.allow_resetlogs_corruption='TRUE'; //容许resetlog corruption

 

SQL>shutdown immediate;

SQL>startup pfile='/u01/product/10.20/dbs/initora10g.ora' mount;

SQL>alter database open resetlogs;


    
 
 

您可能感兴趣的文章:

  • 关于oracle816数据库启动故障问题
  • Linux下Oracle RAC一个节点宕机导致共享存储无法挂载的故障排除
  • Oracle 11G 无法连接到数据库实例故障排除
  • 一次Oracle故障处理过程
  • Oracle数据库系统紧急故障处理方法
  • Oracle数据库恢复后心得
  • 关于系统重装后Oracle数据库完全恢复的解决办法
  • oracle drop table(表)数据恢复方法
  • Oracle数据库备份和恢复工具 RMan
  • oracle备份恢复的具体方法
  • oracle中误删除表后恢复语句(FLASHBACK)
  • oracle冷备份恢复和oracle异机恢复使用方法
  • 在Oracle 10gR2中设定指定的恢复点实现轻松闪回
  • Oracle重做日志文件损坏或丢失后的恢复
  • Oracle11g备份和恢复功能的提高
  • 实战Oracle数据库备份与恢复
  • Oracle数据库冷备份的异地恢复
  • oracle下实现恢复一个丢失的数据文件的代码
  • 详解通过Backup Exec来实施Oracle灾难恢复
  • Oracle的恢复管理器及DBMS_JOB包分析
  • Oracle数据库文件恢复以及备份思路
  • Oracle数据库备份恢复最佳实践
  • oracle如何恢复被覆盖的存储过程
  • Oracle 11G 无法连接到数据库实例故障排除 iis7站长之家
  • oracle数据库创建备份与恢复脚本整理
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux安装Oracle 11时报错DISPLAY解决方案
  • Lucene和Oracle的集成方案 LDI
  • Oracle 数据库容灾复制解决方案分析Shar Plex
  • 请问哪里有 小性机 +linux +oracle 的配置方案?
  • oracle怎么删除用户提供解决方案
  • Oracle为IBM大型机服务器提供Linux方案
  • 【求助】RHEL5.1 下安装Oracle 10.2g出现问题:指定数据库方案口令后卡住了,不能安装
  • oracle远程复制及异地容灾的技术解决方案
  • Oracle时间精确到时、分、秒处理方案
  • 账户方案系统角色多管齐下保障Oracle的安全
  • Oracle 10g的DBA无法登录解决方案
  • 深入探讨:oracle中方案的概念以及方案与数据库的关系
  • 错误信息:java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver,求解决方案!
  • ORA-28002 Oracle 11g存在密码过期问题解决方案
  • Oracle中如何插入特殊字符:& 和 '(多种解决方案)
  • 初学Oracle最经常碰到的错误及解决方案
  • 关于Oracle 数据库的配置方案说明
  • oracle保留两位小数解决方案
  • oracle 分页问题解决方案
  • oracle 数据库数据迁移解决方案
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3