什么情况下会用到_corrupted_rollback_segments这个参数!

刚才在论坛里看到 lovexueer做了个试验 http://www.itpub.net/533872.html,用这个隐含参数不能恢复!试了半天,发现情况一样,于是就查了下,发现他说的这种情况根本就不能用这个参数恢复成功!原文参见 1013221.6(metalink)。

这个主要针对8i,对于9i有些涉及到rollback 色光segment的地方注意下,但大体不变!

一、当由于undo的原因数据库down了后,当你试图启动的时候遇到了ora-1157和ora-1110,在这种情况下依赖数据库down的时候,是否在undo里留下了未提交的事务!

1、如果没有遗留的事务在undo内,那么最简单的恢复办法就是offline drop这个文件,然后以restricted模式打开数据库,删除这个undo表空间,下面是步骤:

a、在alert.log中查看数据库是否干净的关闭。

b、注释掉(8i)rollback_segments或则加(9i)_corrupted_rollback_segments = ( ,...., ) 同时把undo_management改为manual

c、startup restrict mount

d、alter database datafile 'file_name' offline drop;

e、recover database until cancel;(这步可能用到redo,多试几次)

f、alter database open resetlogs;

g、导出全库

h、重建数据库

i、导入新库

2、如果数据库并不是干净的关闭,也就是说undo内留有未提交的事务,那么这时候不能够简单的利用offline drop这个回滚文件,你必须从一个备份中恢复这个文件,并进行介质恢复!如果是在非归档模式下,仅当在线日志包含恢复过程中需要的日志信息,以下是步骤:

a、从备份中恢复丢失的文件

b、mount数据库

c、查看文件状态,如果为offline,那么你必须online它

select file#,name,status from v$datfile;

alter database datafile 'full_name' online;

d、查看日志文件信息

select v1.group#,member,sequence#,first_change#

from v$log v1,v$logfile v2

where v1.group#=v2.group#;

e、如果是在非归档模式下

select file#,change# from v$recover_file;

如果change#大于在线日志文件的最小的first_change#,那么这个数据文件将能恢复。如果chage#小于最小的first_chage#,那么不能恢复

f、recover datafile 'full_name'

g、确认所有在线日志文件都被应用

h、打开数据库

二、如果数据库是打开状态

如果在数据库处于运行状态,你发现了丢失会滚数据文件,那么有两种办法:

1、offline drop,并从备份中恢复

a、alter database datafile 'full_name' offline ;

b、恢复丢失的文件

c、select v1.group#,member,sequence# from v$log v1,v$logfile v2where v1.group#=v2.group#;

e、recover datafile 'full_name';

f、alter database datafile 'full_name' online';

2、重新创建会滚表空间

a、alter rollback segment offline;

b、查看所有回滚段是否都已offline

select segment_name,status from dba_rollback_segswhere tablespace_name='';

c、删除offline的回滚段

drop rollback segment ;

e、查看所有剩余仍为online的会滚段

SELECT SEGMENT_NAME, XACTS ACTIVE_TX, V.STATUS
FROM V$ROLLSTAT V, DBA_ROLLBACK_SEGS
WHERE TABLESPACE_NAME = '' AND SEGMENT_ID = USN;

如果没有返回行,说明所有的已经offline;如果返回行,状态显示为pending offline,那么查看active_tx,如果为0,那么没有悬挂的事务,很快就会变为offline,如果大于0,那么看下一步


f、SELECT S.SID, S.SERIAL#, S.USERNAME, R.NAME "ROLLBACK"
FROM V$SESSION S, V$TRANSACTION T, V$ROLLNAME R
WHERE R.NAME IN ('', ... , '')
AND S.TADDR = T.ADDR AND T.XIDUSN = R.USN;

杀死上面发现的这些会话:
alter system kill session 'sid,serial#';

g、drop tablespace ... including contents;

h、重新创建表空间和回滚段!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25702/viewspace-464252/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25702/viewspace-464252/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值