有备份没有,如果没有,参考如下办法
-----------------------------------
数据库关闭,数据文件中有活动事务,没有可用备份
一般造成这种原因的情况是采用了shutdown abort或其它原因异常关机(如断电)导致的。
1、开启一个事务
SQL> set transaction use rollback segment rbs0;
Transaction set.
SQL> insert into test (a) values (1);
1 row created. 2、异常关闭
SQL> shutdown abort;
ORACLE instance shut down. 3、删除rbs的一个数据文件
C:>del D:\Oracle\oradata\chen\rbs01. 4、修改INIT<sid>.ora
rollback_segments=(system)
添加_corrupted_rollback_segments=(rbs0,rbs1,rbs2……) 5、SQL>Startup mount 6、SQL>alter database datafile ’d:\oracle\oradata\t8i\rbs01.dbf’ offline drop;
数据库已更改。 7、SQL>recover database ;
完成介质恢复。 8、SQL>alter database open ;
数据库已更改。 9、SQL>select * from v$rollname;
USN NAME
----------------- ---------------------
0 SYSTEM 10、SQL>select segment_name,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------ ------------------------------------
SYSTEM SYSTEM ONLINE
RBS0 RBS NEEDS RECOVERY
RBS1 RBS NEEDS RECOVERY
RBS2 RBS NEEDS RECOVERY 11、SQL>drop rollback segment rbs0;
重算段已丢弃。
SQL>drop rollback segment rbs1;
重算段已丢弃。
SQL>drop rollback segment rbs2;
重算段已丢弃。 12、SQL>select segment_name,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------ ------------------------------------
SYSTEM SYSTEM ONLINE 13、SQL>drop tablespace rbs including contents;
表空间已丢弃。 14、重建新的回滚表空间及回滚段,并联机。 15、SQL>shutdown abort 16、再修改INIT<sid>.ora
rollback_segments=(rbs0,rbs1,rbs2)
将_corrupted_rollback_segments=(rbs0,rbs1,rbs2)去掉。 17、SQL>startup 1、这种办法是万不得以的时候使用的方法,如果有备份,都建议从备份上进行恢复
2、这种方法恢复的数据库,可能会引起数据库的数据错误
3、恢复成功以后,建议exp/imp数据,并重新分析检查数据库
-----------------------------------
数据库关闭,数据文件中有活动事务,没有可用备份
一般造成这种原因的情况是采用了shutdown abort或其它原因异常关机(如断电)导致的。
1、开启一个事务
SQL> set transaction use rollback segment rbs0;
Transaction set.
SQL> insert into test (a) values (1);
1 row created. 2、异常关闭
SQL> shutdown abort;
ORACLE instance shut down. 3、删除rbs的一个数据文件
C:>del D:\Oracle\oradata\chen\rbs01. 4、修改INIT<sid>.ora
rollback_segments=(system)
添加_corrupted_rollback_segments=(rbs0,rbs1,rbs2……) 5、SQL>Startup mount 6、SQL>alter database datafile ’d:\oracle\oradata\t8i\rbs01.dbf’ offline drop;
数据库已更改。 7、SQL>recover database ;
完成介质恢复。 8、SQL>alter database open ;
数据库已更改。 9、SQL>select * from v$rollname;
USN NAME
----------------- ---------------------
0 SYSTEM 10、SQL>select segment_name,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------ ------------------------------------
SYSTEM SYSTEM ONLINE
RBS0 RBS NEEDS RECOVERY
RBS1 RBS NEEDS RECOVERY
RBS2 RBS NEEDS RECOVERY 11、SQL>drop rollback segment rbs0;
重算段已丢弃。
SQL>drop rollback segment rbs1;
重算段已丢弃。
SQL>drop rollback segment rbs2;
重算段已丢弃。 12、SQL>select segment_name,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------ ------------------------------------
SYSTEM SYSTEM ONLINE 13、SQL>drop tablespace rbs including contents;
表空间已丢弃。 14、重建新的回滚表空间及回滚段,并联机。 15、SQL>shutdown abort 16、再修改INIT<sid>.ora
rollback_segments=(rbs0,rbs1,rbs2)
将_corrupted_rollback_segments=(rbs0,rbs1,rbs2)去掉。 17、SQL>startup 1、这种办法是万不得以的时候使用的方法,如果有备份,都建议从备份上进行恢复
2、这种方法恢复的数据库,可能会引起数据库的数据错误
3、恢复成功以后,建议exp/imp数据,并重新分析检查数据库
是在init文件中添加下列行么?
rollback_segments=(system)
_corrupted_rollback_segments=(rbs0,rbs1,rbs2……)
如果是 那么segments=(填写什么呢?)
原来的回滚段数据文件叫做UNDOTBS01.DBF
SELECT segment_name,tablespace_name,owner,status FROM dba_rollback_segs;
可现在查询不出segment的名称啊
奇怪的是直接启动数据库时默认的使用已配置参数就会报错
ORA-00600: 内部错误代码,参数: [733], [538969648], [pga heap], [], [], [], [], [
]
这时我一定要指定一个初始化参数文件才可以继续 比如mount上之类的