- 最后登录
- 2018-9-14
- 在线时间
- 47 小时
- 威望
- 205
- 金钱
- 2327
- 注册时间
- 2011-10-13
- 阅读权限
- 150
- 帖子
- 90
- 精华
- 0
- 积分
- 205
- UID
- 26
|
3#
发表于 2017-7-28 10:54:14
本帖最后由 biotwang 于 2017-7-28 11:19 编辑
在线重做日志损坏的情况下, 恢复需要分多种情况:
如果数据库还在运行,那么只要先确保数据都落盘,且立即清理掉受损日志组即可 -- alter system checkpoint;
- alter system switch logfile;
- alter database clear unarchived logfile group x;
- shutdown immediate;
- startup;
复制代码 如果数据库是通过shutdown immediate正常关闭,那么数据实际上已经落盘,只要清理受损日志组即可 -- startup mount
- alter database clear unarchived logfile group x;
- alter database open;
复制代码 如果数据库为异常关闭,即shutdown abort,那么你就只能使用备份进行时间点恢复了 -- RMAN> restore database;
- RMAN> recover database until time "to_date('MAR 05 2015 19:00:00','MON DD YYYY HH24:MI:SS')";
- RMAN> alter database open resetlogs;
复制代码 如果你没有备份,或你最好得到最多的最新的数据,无力承担数据丢失风险。那么你只能通过打开隐藏参数来尝试开库了 -- alter system set "_allow_resetlogs_corruption"=true scope=spfile;
- shutdown immediate
- alter database open resetlogs;
复制代码 但是由于数据库不一致性会导致一连串的后继报错,之后只能是见招拆招了,祝你好运。
这里实际上我们可以关库,并使用PRM工具针对数据文件直接将数据抽取出来,这其实是最高效稳妥的方法。对于经验不足的DBA而言,不断尝试开库或操作错误会导致事件恶化、数据受损扩散影响,因此不推荐也非官方推荐方法。 |
|