oracle回滚段损坏,10.10.2 如何处理回滚段损坏(1)

  • Post author:
  • Post category:其他


10.10.2  如何处理回滚段损坏(1)

如果生产环境中遇到了回滚段的损坏,当然***的方法当然是完全恢复,不过如果现实条件不允许的话(比如没有备份,或恢复时间太长),对于回滚段还可以有一种非常规的手段,这个手段的处理流程如图10-4所示。之所以可以这么处理,因为回滚段是用来支持事务的,如果事务提交,回滚段中的数据就没用了。如果事务尚未提交时回滚段发生了损坏,我们可以强制事务提交,这样只会损失部分数据一致性。有些时候,这种损失是允许的,接下来我们就通过两个例子来演示。

4f4cd42c32504870e8b92a1cc1711333.png

(点击查看大图)图10-4  UNDO表空间或者回滚段发生损坏时的处理方法

1.没有活动事务的处理

如果损坏的回滚段中已经没有了活动事务,那这个回滚段其实是可以删除的,而且删除后数据也不会由任何损失。我们来看一下这个例子。

(1)系统当前没有任何活动事务:SQL>select usn,xacts from v$rollstat

2  where xacts<>0;

no rows selected

(2)数据库异常关闭:SQL>shutdown abort;

ORACLE instance shut down.

(3)删除undo文件,模拟数据库损坏:[oracle@dbs testzxm1]$ mv undotbs01.dbf undotbs01.dbf.ori

(4)启动数据库:SQL>startup ;

ORACLE instance started.

Total System Global Area 3221225472 bytes

Fixed Size                  2024200 bytes

Variable Size             570428664 bytes

Database Buffers          634022912 bytes

Redo Buffers               14749696 bytes

Database mounted.

ORA-01157: cannot identify/lock data file 2 – see DBWR trace file

ORA-01110: data file 2: ‘/zxm/testzxm1/testzxm1/undotbs01.dbf’

(5)因为数据文件已经无法恢复,所以只好把这个数据文件offline:SQL>alter database datafile ‘/zxm/testzxm1/

testzxm1/undotbs01.dbf’ offline drop;

Database altered.

然后打开数据库:SQL>alter database open;

Database altered.

(6)查看各个回滚段的状态:SQL>select status,count(*) from dba_rollback_segs group by status;

STATUS             COUNT(*)

—————- ———-

ONLINE                    1

NEEDS RECOVERY            9

OFFLINE                 355

SQL>select segment_name,status from dba_rollback_segs

where status<>’OFFLINE’

/

SEGMENT_NAME                   STATUS

—————————— —————-

SYSTEM                         ONLINE

_SYSSMU1$                      NEEDS RECOVERY

_SYSSMU2$                      NEEDS RECOVERY

_SYSSMU3$                      NEEDS RECOVERY

_SYSSMU4$                      NEEDS RECOVERY

_SYSSMU5$                      NEEDS RECOVERY

_SYSSMU7$                      NEEDS RECOVERY

_SYSSMU8$                      NEEDS RECOVERY

_SYSSMU9$                      NEEDS RECOVERY

_SYSSMU10$                     NEEDS RECOVERY

10 rows selected.

【责任编辑:云霞 TEL:(010)68476606】

点赞 0