Chinaunix首页 | 论坛 | 博客
  • 博客访问: 89430
  • 博文数量: 26
  • 博客积分: 920
  • 博客等级: 准尉
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-28 10:50
文章分类

全部博文(26)

文章存档

2015年(2)

2011年(1)

2009年(10)

2008年(2)

2007年(1)

2006年(10)

我的朋友

分类: Oracle

2009-02-02 16:46:05

ORALCE实例恢复详细分析汇总
1.数据库是处于关闭状态的
 试图打开数据库时报ora-1157和ora-1110错误时,这时的解决方法取决于数据库是否是正常shutdown
 如果是正常shutdown的,最简单的解决方法是已offline drop选项删除有问题的数据文件,然后已restriceted模式打开数据,删除并重建这个数据文件所属的那个回滚表空间。具体步骤:
a.确认数据库是正常shutdown的,可以检查alter.log文件,定位到最后几行看是否有如下的信息:alter database dismount
  Completed: alter database dismount
b.在int.ora中把属于数据文件的回滚段从rollback_segments参数中去掉。如果不能确信是哪个回滚段,可以简单的把rollback_segments这个参数注释掉。
c.以restricted模式mount数据库 startup restrict mount;
d. offline drop 有问题的数据文件:
ALTER DATABASE DATAFILE 'xx' OFFLINE DROP;
e.打开数据库
alter database open;
如果返回"Statement processed"信息,转到第g步
f.因为打开数据库失败,shutdown数据库,并编辑int.ora
注释掉rollback_segment,并加入一行
_corrupted_rollback_segments = (<rollback1>,...,<rollbackN> )
然后startup restrict

g.删除掉那个有问题文件所属的回滚段表空间
DROP TABLESPACE <tablespace name> INCLUDING CONTENTS
h.重建回滚段表空间和回滚段,并online
i.使数据库所有用户都可用
alter system disable restriced session;
j.在int.ora中把你重新创建的回滚段再一次包括进来。如果你使用了第f步则移出掉CORRUPTED_ROLLBACK_SEGMENTS这个参数。

 

2.如果DB不是正常shutdown的
这种情况,db最近一次是用shutdown abort或是crash掉的,回滚段几乎一定包含活动的事务。因此,怀的那个数据文件不能offline或drop掉,你应该从备份恢复这个文件。如果数据库是处于noarchived模式的,只有最近的一些事务日志还没有被重写掉的情况才能成功恢复这个文件。具体步骤:
a.从备份中恢复丢失的那个数据文件
b.mount上db
c.执行:SELECT FILE#,NAME,STATUS FROM V$DATAFILE;
如果数据文件的状态是offline的,你必须先online
    ALTER DATABASE DATAFILE '<full_path_file_name>' ONLINE
d.执行如下查询:
SELECT V1.GROUP#, MEMBER, SEQUENCE#, FIRST_CHANGE#   
FROM V$LOG V1, V$LOGFILE V2    WHERE V1.GROUP# = V2.GROUP# ;
这将列出所有的redo log file和它们的序号及FIRST_CHANGE#

e.如果db处于noarchived,执行
   SELECT FILE#, CHANGE# FROM V$RECOVER_FILE;
如果其中的change#比d中的FIRST_CHANGE#大的话,用redo logfile 就可以完成恢复
f.如果其中的change#比d中的FIRST_CHANGE#小的话,则db是不能恢复的

阅读(755) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~