oracle数据库各种故障恢复案例
来源:互联网 发布:个体营业执照查询软件 编辑:程序博客网 时间:2024/04/29 21:51
---------------------------------------------------
各种故障恢复案例
--------------------------------------------------
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 scn发生改变)
RMAN>alter database open resetlogs;
resetlogs命令表示一个数据库逻辑生存期 的结束和另命令表示一个数据库逻辑生存期 的结束和另的开始,每次使用 resetlogs命令的时候,SCN不会被重置,不过 oracle 会重置 日志序列号,而且会重置联机做内容 日志序列号,而且会重置联机做内容 . 这样做是为了防止不完全恢复后日 志序列会发生冲突(因为现有日和数据文件间了时差)。
3、UNDO 损坏的情况
出现这种情况, 大多数是因为异常宕机,在启动的时候报错误。 DB 不能启动:
比如: ORA -00600: internal error code, arguments: [4194]
对于 Undo 损坏的情况,能用备份恢复最好如果不就只通过一些特的方发来恢复:
方法一 : 使用 system segment
(1)用 spfile 创建 pfile ,然后修改参数:
#*.undo_tablespace='UNDOTBS1'
#*.undo_management='AUTO'
#*. undo_tablespace
#*.undo_retention
undo_management='MANUAL'
rollback_segments='SYSTEM'
(2)用修改之后的 pfile,重启 DB
SQL> STARTUP MOUNT pfile= 'F:\initorcl.ora' ;
(3)删除原来的 表空间,创建新UNDO 表空间
SQL> drop tablespace undotbs;
SQL> create undo tablespace undotbs1 datafile '' '/u01/oradatau01/undotbs1.dbf' 'size 10M;
(4)关闭数据库,修改 pfile参数,然后用新的 pfile创建 spfile ,在正常启动数 据库。
*.undo_tablespace='UNDOTBS1'
*.undo_management='AUTO'
#undo_management='MANUAL'
#rollback_segments='SYSTEM'
方法二 :跳过损坏的 segment
在方法一里面,我们使用了segment segment,undo segment 有多个,我们可 以通过 alert log 来查看正在使用的是哪些 segment ,这些段有可能损坏了。 我 们只需要把这些损坏的 segment 跳过,先正常启动 DB ,在创建新的 UNDO 表 空间,在切换一下。
(1)修改 pfile pfile pfile,添加参数:
*._corrupted_rollback_segments='_SYSSMU11$','_SYSSMU12$','_SYSSMU13$'
这些字段的值, 我们通过 alert log 查看。 也可以通过如下命令查看:
#strings system01.db f | grep _SYSSMU | cut -d $ -f 1 | sort f 1 | sort -u
(2)用修改之后的 pfile 启动 DB
因为跳过了那些损坏的 segment ,所以 DB 可以正常启动。
(3)创建新的UNDO表空间,并切换过来:
SQL> create undo tablespace undotbs1 datafile '/u01/oradata/undotbs1.dbf' size 10M;
SQL> alter system set undo_tablespace=undotbs1;
SQL> drop tablespace undotbs;
(4)修改 pfile,创建 spfile ,并正常启动
删除:
*._corrupted_rollback_segments='_SYSSMU11$','_SYSSMU12$','_SYSSMU13$'
以上就是 UNDO 出现的 2种故障的处理方法。
4、Redo log file 损坏
重做日志文件在数据库中是要求最高的 组,首先其对磁盘IO 要求极高, 其次一旦 CURRENT 组发生故障,数据库会立即崩溃并且 组发生故障,100% 会发生数据丢 失,所以 ORAC LE 建议至少每个组需要两成员,并且在数据库运行过程中日 志文件会一直被锁定,以防不测。
Redo log 的恢复分为两种 CURRENT 和 非 CURRENT
一、 CURRENT 情况
造成 redo 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;
这里主要看 2点:
(1)使用了 _allow_resetlogs_corruption 参数
(2)这种情况下,可能会报 ORA -600[2662] (SCN有关)和 ORA -600[4000](回 滚段有关)的错误。
使用 _allow_resetlogs_corruption参数,强制打开据库可能会导致逻辑 的坏块,从而影响数据字典。 所以,即使使用该参数正常打开后也需要做的 一个操作:逻辑导出数据。 重建实例,导入实例,消除逻辑坏块的可能性。
运气好的话, 数据库 能正常打开, 如果使用 _allow_resetlogs_corruption 参数 启动报了 undo segment 的错误而无法启动,处理方参考 2.5.3 节中 undo 的处 理情况。
但是由于使用 _allow_resetlogs_corruption 方式打开,会造成数据的丢失且 数据库的状态不一致。因此,这种情况下Oracle 建议通过 EXP 方式导出数据库。 重建数据库后再导入。
二、非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;
5、非系统表空间损坏
若出现介质故障导致某表空间不可用,恢复以在数据库处于 open 或mount 下进行,步骤如下:
1. 将该表空间置于 offline offline 状态
2. 修复表空间数据
3. 恢复表空间并处于一致性
4. 将表空间 online
rman> sql 'alter tablespace xxx offline';
如果文件不存在,就加 immediate参数
rman> sql 'alter tablespace xxx offline immediate';
rman>restore tablespace rman>restore tablespace rman>restore tablespace rman>restore tablespace rman>restore tablespace rman>restore tablespace rman>restore tablespace xxx;
rman>sql 'alter tablespace xxx online';
6、数据文件损坏
如果出现介质故障导致某表空间 数据文件丢失(这种情况也可以参照表空间损坏的恢 复) 。
恢复可以在 数据库处于 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';
7、基于时间点 /SCN/日志序列的不完全恢复
基于时间点 /SCN/ 日志序列的不完全恢复,可以将数据库、表空间、数据文件等恢复至备份集保存时间中的任何一个点 /SCN/日志序列, 但须谨慎,操作前一定需要做好备份,具条件的情况下最先恢复到异机。
(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 '20 10 -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('20 recover database until time "to_date('20recover database until time "to_date('20 recover database until time "to_date('20recover database until time "to_date(‘2010 -12 -29 23:19:00','YYYY-MM -DD DD HH24:MI:SS')";
SQL>alter database open resetlogs;
(2)基于scn
SQL>startup mount;
SQL>restore database until scn 10000;
SQL>recover database until scn 10000;
SQL>alter database open resetlogs;
(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
8、非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> conn /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数据库各种故障恢复案例
- Oracle 数据库恢复案例
- Oracle数据库恢复案例
- Oracle数据库备份异机恢复(exp/imp)故障案例
- Oracle恢复数据库案例实战
- Oracle数据库事务处理和故障恢复
- ORACLE数据库事务处理和故障恢复
- Oracle 数据库软件安装故障案例
- 故障案例--mongodb3.0 mongorestore恢复数据库时hang住
- oracle 块故障恢复
- 数据库故障恢复技术
- solaris ufs文件系统故障后恢复oracle数据库过程记录
- Oracle数据库恢复 : 存储故障导致的数据损坏
- Oracle数据库恢复 : 存储故障导致的数据损坏
- Oracle 8.1.7.4 数据库故障恢复一例
- Oracle备份与恢复各种情景案例by Piner
- 数据库故障恢复修复指南
- Oracle 恢复案例
- 黑马程序员_ios基础总结9_OC特有语法
- 黑马程序员_ios基础总结10_内存管理
- 黑马程序员_ios基础总结11_协议,代理
- 黑马程序员_ios基础总结12_OCFoundation1
- MPlayer在S3C2440开发板上的移植
- oracle数据库各种故障恢复案例
- CAN滤波器
- 区域生长算法
- Java几款性能分析工具的对比
- 使用vs2012中(Installshield limited edition)制作升级包
- Win7系统下的一个小bug
- 嵌入式数据库的内嵌模式
- tomcat内存溢出,设置内存方式
- AUPE学习第十章------信号