回滚段数据文件损坏,该如何处理,大家看看

[复制链接]
查看11 | 回复9 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
建立一个回滚表空间rbstest01,在里面创建了2个public回滚段,rbstest01和rbstest02
然后,
SQL>set transaction use rollback segment rbstest01;
进行了一个Update
没有提交
在OS下把该回滚表空间所在的数据库文件'/export/home/oracle/oradata/oracle/rbstest01.ora‘ 删除掉
然后commit;
问题一:commit 竟然成功了,比较的奇怪呀,回滚段所在的数据文件没有了,在commit的时候要去改回滚段头的,数据文件没有了,怎么回commit 成功呢?是不是写回滚段数据文件先在内存快中写,将来再flush到数据文件,所以尽管现在数据文件没有了,还是可以commit成功的,等DBWr写数据库文件的时候就要出问题了呢?那我的提交还是不会成功的吧

问题二:
然后,我重新启动数据库后,发现报错:
'/export/home/oracle/oradata/oracle/rbstest01.ora'
数据文件不存在,由于数据库是非归档方式于是我:
alter database datafile '/export/home/oracle/oradata/oracle/rbstest01.ora' offline drop;
数据库能够正常启动
我在SQL*PLUS中运行:
SQL> drop tablespace rbstest;
drop tablespace rbstest
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-00376: file 13 cannot be read at this time
ORA-01110: data file 13: '/export/home/oracle/oradata/oracle/rbstest01.ora'
然后运行:
SQL> select tablespace_name from dba_tablespaces;
select tablespace_name from dba_tablespaces

*
ERROR at line 1:
ORA-00376: file 13 cannot be read at this time
ORA-01110: data file 13: '/export/home/oracle/oradata/oracle/rbstest01.ora'
但是在V$rollname和v$rollstat中已经没有以上创建的2个回滚段的任何信息了

为什么会这样呢?是不是dba_tablespaces的查询需要这2个回滚段的信息呢?
如何处理,才可以使数据库查询正常呢?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
应该存在未决的事务,但是查询
selectcount(*) from DBA_PENDING_TRANSACTIONS;
没有返回数据行
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
先看看piner写的文章.
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层

应该是回滚段的问题
我找到文章了
先解决一下看看
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
我在初始化参数中加了
_corrupted_rollback_segments=(rbstest1,rbstest2)
重新启动数据库后还是不行
现在查询
dba_tablespaces,dba_rollback_segs 等视图,还是报错:
SQL> select file_name from dba_data_files;
ERROR:
ORA-00376: file 13 cannot be read at this time
ORA-01110: data file 13: '/export/home/oracle/oradata/oracle/rbstest01.ora'
改怎么处理呢?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
说明:
1、这种办法是万不得以的时候使用的方法,如果有备份,都建议从备份上进行恢复;
2、这种方法恢复的数据库,可能会引起数据库的数据错误;
3、恢复成功以后,建议exp/imp 数据,并重新分析检查数据库说明:[/COLOR]
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
现在数据库是起来了
但是这些视图没有帮法查询
该怎么办呢
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
SQL> alter rollback segment rbstest01 offline;
alter rollback segment rbstest01 offline
*
ERROR at line 1:
ORA-01598: rollback segment 'RBSTEST01' is not online

SQL> drop rollback segment rbstest01;
drop rollback segment rbstest01
*
ERROR at line 1:
ORA-01545: rollback segment 'RBSTEST01' specified not available
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
Pinner 或者Coolly写的那个关于回滚段出现问题的解决文章中,处理之后,有问题的回滚段在dba_rollback_segs中还存在,可是我这里已经没有这个回滚段了,
SOS,SOS <SOS
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
你先查询一下
select name from v$datafile;
看看数据字典中还有没有那个文件的信息
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行