当前位置:Oracle研究中心 > 故障案例 >
时间:2016-06-22 16:39 来源:Oracle研究中心 作者:惜分飞 点击: 次
无论是在各种会议上,还是在朋友/网友私下请教Oracle数据库恢复的问题之时,我都强调,如果你没有十足的把握,请你对您的现场进行备份,确保别对现场进行二次损坏。你不能恢复数据库,但绝对不能再次破坏数据库,给二次恢复增加难度.这里对恢复前备份提供一些指导思想和简单脚本,希望对大家有帮助.
熟悉数据库恢复的朋友可能都情况,Oracle在异常恢复的过程中主要修改的是system表空间里面数据,其他数据文件,redo数据,控制文件(当然由于redo,undo导致其他数据文件内部的block也可能发生改变)。在备份时间,备份空间允许的情况下,是对这些文件全部备份为好
set lines 150 set pages 10000 select name from v$datafile union all select name from v$controlfile union all select member from v$logfile;
有些情况下:比如如果全部备份时间过长,备份空间不足等情况下,我们该如何备份,尽量减少因为异常恢复导致对原环境的损坏.备份最核心的system表空间,数据文件头,redo file,control file等数据,由于这个不是简单的拷贝操作,因此在生成备份语句同时,也生成还原语句,切不可生成了备份语句后,无恢复语句,导致后面还原故障现场难度增大.
无法全备情况下linux/unix数据库恢复前备份
set lines 150 set pages 10000 select 'dd if='||name||' of=&&back_dir/'||ts#||'_'||file#||'.dbf bs=1048576 count=10' from v$datafile where ts#<>0 union all select 'dd if='||name||' of=&&back_dir/'||ts#||'_'||file#||'.dbf' from v$datafile where ts#=0 union all select 'dd if='||name||' of=&&back_dir/control0'||rownum||'.ctl' from v$controlfile union all select 'dd if='||member||' of=&&back_dir/'||thread#||'_'||a.group#||'_'||sequence#||'_'||substr(member, instr(member,'/',-1)+1) FROM v$log a, v$logfile b WHERE a.group# = B.GROUP#;
无法全备情况下linux/unix使用备份还原
set lines 150 set pages 1000 select 'dd of='||name||' if=&&back_dir/'||ts#||'_'||file#||'.dbf bs=1048576 count=10 conv=notrunc' from v$datafile where ts#<>0 union all select 'dd if='||name||' if=&&back_dir/'||ts#||'_'||file#||'.dbf' from v$datafile where ts#=0 union all select 'dd of='||name||' if=&&back_dir/control0'||rownum||'.ctl' from v$controlfile union all select 'dd of='||member||' if=&&back_dir/'||thread#||'_'||a.group#||'_'||sequence#||'_'||substr(member, instr(member,'/',-1)+1) FROM v$log a, v$logfile b WHERE a.group# = B.GROUP#;
由于win路径斜杠不一样(/和\的区别),因此在无法全备情况下win备份语句
set lines 150 set pages 10000 select 'dd if='||name||' of=&&back_dir\'||ts#||'_'||file#||'.dbf bs=1048576 count=10' from v$datafile where ts#<>0 union all select 'dd if='||name||' of=&&back_dir\'||ts#||'_'||file#||'.dbf' from v$datafile where ts#=0 union all select 'dd if='||name||' of=&&back_dir\control0'||rownum||'.ctl' from v$controlfile union all select 'dd if='||member||' of=&&back_dir\'||thread#||'_'||a.group#||'_'||sequence#||'_'||substr(member, instr(member,'\',-1)+1) FROM v$log a, v$logfile b WHERE a.group# = B.GROUP#;
在无法全备情况下win还原语句
set lines 150 set pages 1000 select 'dd of='||name||' if=&&back_dir\'||ts#||'_'||file#||'.dbf bs=1048576 count=10 conv=notrunc' from v$datafile where ts#<>0 union all select 'dd if='||name||' if=&&back_dir\'||ts#||'_'||file#||'.dbf' from v$datafile where ts#=0 union all select 'dd of='||name||' if=&&back_dir\control0'||rownum||'.ctl' from v$controlfile union all select 'dd of='||member||' if=&&back_dir\'||thread#||'_'||a.group#||'_'||sequence#||'_'||substr(member, instr(member,'\',-1)+1) FROM v$log a, v$logfile b WHERE a.group# = B.GROUP#;
--------------------------------------ORACLE-DBA----------------------------------------
最权威、专业的Oracle案例资源汇总之案例:Oracle FileSystem环境 在数据库异常恢复前对原环境备份的方法
本文由大师惜分飞原创分享,网址:http://www.oracleplus.net/arch/474.html
Powered by Oracle研究中心 OraclePlus Inc.
BY DedeCMS 京ICP备14022373号-5
声明:Oracle研究中心部分文章源自互联网,转载均按原文作者要求转载,如有疑问联系QQ:1026002015,协商未果24小时删除。