恢复过程如下......
现场情况:startup nomout/mount出现ora-600错误。警告日志文件没有具体的错误信息。初步估计是spfile的问题,用create spfile from pfile=‘<name>’后,数据库可以mount,打开的时候出现回滚表空间数据文件需要恢复的错误,断定数据文件损坏,用alter database 把数据文件offline drop,打开数据库,用exp对业务用户做逻辑备份,exp过程中出现其中一张表不能export的错误,原因是需要读损坏的数据文件,经查验后该表是附件表,数据不是特别重要,而且现场有4月30号的exp备份,故跳过该表继续进行exp。
备份完毕后,在数据库open状态下,新建undo表空间,用alter system 把回滚表空间切换到该表空间上;shutdown并startup数据库,想把原来的回滚表空间用drop tablespace来清掉的时候,出现回滚段有活动事务的错误,咨询oracle支持,据oracle工程师的说法,需要新建数据库并把原来的业务数据重新import到数据库中。于是重建数据库,建立与原来数据库用户一致的用户名,用imp的用户模式把原业务数据重新imp到新数据库中。附件表数据用4月30号的备份来导入。
修改中间件服务器数据源的sid,指向新数据库,并测试通过。最后打开业务应用,确认应用可以连接数据库,操作一切正常,恢复完成。
附件1
执行脚本
create spfile from pfile=’<pfile_name>’;
startup mount;
alter database datafile ‘<filename>’ offline drop;
alter database open;
-- 此时进行exp
create undo tablespace undo_tbs datafile ‘<file name>’ size 500m;
alter system set undo_tablespace = undo_tbs scope = both;
shutdown immediate;
startup;
drop tablespace undotbs1 including contents and datafiles;
-- 出错!只能重建数据库并导入
-- 新建数据库,并用imp导入业务用户数据
附件2:
oracle支持工程师提出的解决方案
When the undo tablespace corrupted, there are some active transaction on the undo segment.Since the data file of the undo tablespace have been lost and you have no any backup of them, you have to do a full export of the current database and then create a new database, import the data back into the new database.
You'd better do backup and run the database in archive mode, this can help avoid losting data and recover fast.




最新回复
当回滚段有活动事物的时候,你这样做是不是会丢失数据呀?
作者 chenfeng — 28 九月, 2004 09:15
没有备份的话,丢失数据是必然的.
作者 husthxd — 28 九月, 2004 09:15
create undo tablespace undo_tbs datafile ‘’ size 500m;
alter system set undo_tablespace = undo_tbs scope = both;
这两行的意思能够给我详细的说一下吗?谢谢!
作者 hfzzh — 28 九月, 2004 09:15
为什么不用create tablespace undo_tbs datafile ‘’ size 500m;
作者 hfzzh — 28 九月, 2004 09:15
create undo tablespace ...
创建的才是undo表空间,create tablespace创建的是普通的表空间。
-- 创建undo表空间
create undo tablespace undo_tbs datafile ‘’ size 500m;
-- 切换undo表空间
alter system set undo_tablespace = undo_tbs scope = both;
希望对你有帮助。
作者 husthxd — 28 九月, 2004 09:15
回滚段表空间有活动事物的时候,你能在mount状态将它的数据文件drop吗???????
作者 fireyou — 28 九月, 2004 09:15
可以offline drop
然后打开数据库.
如果还是不能打开数据库,可以在init.ora中加隐含参数打开数据库.
作者 husthxd — 28 九月, 2004 09:15
隐含参数是指什么参数呀?
作者 fengying — 28 九月, 2004 09:15
我明白了,隐含参数就是_CORRUPTED_ROLLBACK_SEGMENTS,在初始化参数文件中加入:
_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$, ...)
作者 fengying — 28 九月, 2004 09:15
我明白了,隐含参数是指_CORRUPTED_ROLLBACK_SEGMENTS。
作者 fengying — 28 九月, 2004 09:15
啊!我又制造垃圾了,怎么刚才没看到我的第二条回复,就又回复了一次。谢谢版主!
作者 fengying — 28 九月, 2004 09:15
rt.
作者 husthxd — 28 九月, 2004 09:15