ITPub博客

首页 > Linux操作系统 > Linux操作系统 > UNDO表空间丢失/损坏测试

UNDO表空间丢失/损坏测试

原创 Linux操作系统 作者:gaopengtttt 时间:2013-11-24 16:25:31 0 删除 编辑

1、模拟丢失了undo表空间数据文件,SHUTDOWN ABORT,进行启动报错找不到数据文件
2、设置UNDO datafile offline后启动数据如下
SQL> alter database datafile 2 offline;
接下来试试能不能打开数据库,能打开就查看那些回退段
SQL> startup
ORACLE instance started.

Total System Global Area  599785472 bytes
Fixed Size                  2098112 bytes
Variable Size             163580992 bytes
Database Buffers          427819008 bytes
Redo Buffers                6287360 bytes
Database mounted.
ORA-01092: ORACLE instance terminated. Disconnection forced
查看日志还是报不能找到数据文件,如果是干净的关闭数据库这里可以直接起来
3、设置初始参数设置UNDO表空间管理为手动
*.undo_management='manual'
4、如果打不开数据库,只有按照以前的巡检或者猜测设置
*._corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)

5、启动数据库
后删除需要RECOVER的undo段

SQL>  DROP ROLLBACK SEGMENT "_SYSSMU10$";

Rollback segment dropped.

SQL> DROP ROLLBACK SEGMENT "_SYSSMU1$";

Rollback segment dropped.

SQL> DROP ROLLBACK SEGMENT "_SYSSMU2$";

Rollback segment dropped.

SQL> DROP ROLLBACK SEGMENT "_SYSSMU3$";

Rollback segment dropped.

SQL> DROP ROLLBACK SEGMENT "_SYSSMU4$";

Rollback segment dropped.

SQL> DROP ROLLBACK SEGMENT "_SYSSMU5$";

Rollback segment dropped.

SQL> DROP ROLLBACK SEGMENT "_SYSSMU6$";

Rollback segment dropped.

SQL> DROP ROLLBACK SEGMENT "_SYSSMU7$";

Rollback segment dropped.

SQL> DROP ROLLBACK SEGMENT "_SYSSMU8$";

Rollback segment dropped.

SQL> DROP ROLLBACK SEGMENT "_SYSSMU9$";

Rollback segment dropped.

SQL> DROP ROLLBACK SEGMENT "_SYSSMU10$";

然后删除表空间

SQL>  DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;

Tablespace dropped.

6、新建表空间UNDO

 CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'C:\UNDOTBS03.DBF' SIZE 20M;
7、最后停止数据库,更改参数UNDO_MANAGE
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS2'
去掉
_offline_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)

8、最后检查一下

select * from dba_rollback_segs;查看一下状态

本次测试使用SHUTDOWN ABORT模拟掉电,在10.2.0.5没有通过,10.2.0.4测试通过,可见这个方法并不适用所有,而且可能导致数据混乱,因为没有提交的数据,已经提交,没有回滚。
所以做好备份时最重要的,如果有UNDO表空间备份那么直接恢复一下就好了。

另外如果数据库是干净的关闭的,10.2.0.5,10.2.0.4都一致,那么即使UNDO损坏直接OFFLINE数据文件后就能打开数据库,而不会报错
ORA-01092: ORACLE instance terminated. Disconnection forced,这样修复起来更加简单,这个就是碰运气了。

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

请登录后发表评论 登录
全部评论
wxh gp_22389860 <<深入理解MySQL主从原理专栏>> 发布 可加WX了解

注册时间:2008-10-13

  • 博文量
    682
  • 访问量
    2939911