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

RMAN 备份与恢复 实例

http://blog.csdn.net/tianlesoftware/archive/2009/10/19/4699320.aspx

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

http://blog.csdn.net/tianlesoftware/archive/2010/05/17/5602291.aspx

如何 搭建 RMAN 备份平台

http://blog.csdn.net/tianlesoftware/archive/2010/07/16/5740896.aspx

在非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]

http://blog.csdn.net/tianlesoftware/archive/2010/12/29/6106083.aspx

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

http://blog.csdn.net/tianlesoftware/archive/2010/12/29/6106130.aspx

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

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>recover 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>recover 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;

Oracle 不同故障的恢复方案的更多相关文章

  1. rman恢复方案和oracle异机恢复

    这篇文章主要介绍了rman恢复方案和oracle异机恢复,需要的朋友可以参考下 注:①恢复的前提是已经做好备份②完全恢复数据库是数据库遇到故障,在恢复时候没有丢失任何已经提交事物数据的恢复不完全恢复数 ...

  2. Oracle DB 备份和恢复的概念

    • 确定Oracle DB 中可能发生的故障类型 • 说明优化实例恢复的方法 • 说明检查点.重做日志文件和归档日志文件的重要性 • 配置快速恢复区 • 配置ARCHIVELOG模式   部分工作内容 ...

  3. MySQL 系列(四)主从复制、备份恢复方案生产环境实战

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  4. linux系统无法正常启动,故障排查恢复

    linux内核启动修复 首先看linux内核重要文件grub.conf # grub.conf generated by anaconda # # Note that you do not have ...

  5. MySQL 系列(四) 主从复制、读写分离、模拟宕机、备份恢复方案生产环境实战

    本章内容: 主从复制 简介原理 备份主库及恢复从库,配置从库生效 读写分离 如果主宕机了,怎么办? 双主的情况 MySQL 备份及恢复方案 备份单个及多个数据库 mysqldump 的常用参数 如何增 ...

  6. Oracle之RMAN备份恢复1-基础篇

    1,rman的作用与体系架构 1.1 什么是rman rman(recovery manager)是oracle8i以后dba的一重要工具一般位于$oracle_home/bin目录下,主要用来备份, ...

  7. Oracle 基于用户管理恢复的处理

    ================================ -- Oracle 基于用户管理恢复的处理 --================================ Oracle支持多种 ...

  8. Oracle 数据库备份和恢复配置

    可能的失败及其解决方法 失败类型 我们坑你遇到的失败或错误分为两大类:物理和逻辑.物理错误一般是硬件错误或使用数据库的应用程序中的软件错误,而逻辑错误一般在终端用户级别(数据库用户和管理员). 按从轻 ...

  9. Oracle RMAN 学习:恢复

    Oracle RMAN 学习:恢复 6 rman恢复 Rman中的恢复对应restore,recover Restore,数据修复,利用备份集的数据文件来替换已损坏的数据文件或将其恢复到另外一个位置, ...

随机推荐

  1. Eclipse和intellij idea 快捷键对比

    Eclipse和intellij idea 快捷键对比

  2. 【Memcache】下载和安装

    下载: Win7 64bit 系统 下载过过很多版本,都无法安装,最后到这里下载,成功安装: http://blog.couchbase.com/memcached-windows-64-bit-pr ...

  3. Linux下SVN的一些使用方法总结

    Linux下SVN的一些使用方法总结   近期的一个项目不方便 Check 到本地,需要在测试服务器上进行编写和测试,所以就研究了一下如何在 Linux 命令行下使用 SVN. 首先 svn help ...

  4. PHPer 为什么会被 Javaer 鄙视?

    最近看了知乎上的一个话题 「在工作中,为什么 Java 程序员常常瞧不起 PHP 程序员?」 个人从业多年,用过的后端语言 ASP.ASP.NET.Java.PHP.Node.js.Python,如果 ...

  5. codeforces 295E Yaroslav and Points (离线操作+离散化+区间合并)

    参考链接:http://blog.csdn.net/dyx404514/article/details/8817717 写的很详细,这里就不再赘述,附上我的代码. #include <iostr ...

  6. http://blog.csdn.net/superhosts/article/details/15813247

    http://blog.csdn.net/superhosts/article/details/15813247

  7. [三分]HDOJ 5531 Rebuild

    题意:给n个点,以这n个点为圆心画圆,使得所有的圆与其相邻的圆相切. 求n个圆最小的面积和. 分析:很容易想到确定了其中一个圆的半径之后,其他的圆的半径也能随之确定了. 画一画三个点的和四个点的,会发 ...

  8. Sina App Engine(SAE)入门教程(10)- Cron(定时任务)使用

    参考资料 SAE Cron说明文档 Cron能干什么? cron 可以定时的触发一个脚本,在sae上最大的频率是一分钟一次.你可以用其来完成自己需要的业务逻辑,例如定期的抓取某些网页完菜信息的采集,定 ...

  9. C++定义全局变量/常量几种方法的区别

    在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块):    在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ER ...

  10. C#中用JavaScriptSerializer和Json.Net操作json格式的文件

    1.json文件 2.写出对应的类 //折扣 public class Discount { public string Qty { get; set; } public string percent ...