UNDO表空间丢失/损坏测试

简介: 1、模拟丢失了undo表空间数据文件,SHUTDOWN ABORT,进行启动报错找不到数据文件 2、设置UNDO datafile offline后启动数据如下 SQL> alter database datafile 2 offline; 接下来试...

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,这样修复起来更加简单,这个就是碰运气了。

相关文章
|
关系型数据库 MySQL 存储
|
Oracle 关系型数据库 数据库
|
SQL Oracle 关系型数据库
|
SQL 监控 Oracle
【恢复】Redo日志文件丢失的恢复
第一章 Redo日志文件丢失的恢复 1.1  online redolog file 丢失 联机Redo日志是Oracle数据库中比较核心的文件,当Redo日志文件异常之后,数据库就无法正常启动,而且有丢失据的风险,强烈建议在条件允许的情况下,对Redo日志进行多路镜像。
2175 0
[20150619]undo文件损坏或者丢失的恢复2
[20150619]undo文件损坏或者丢失的恢复2.txt --昨天别人问一些undo文件损坏或者丢失的恢复,如果不正常关机,undo文件丢失,恢复与正常关机存在不同。
873 0
|
Oracle 关系型数据库 数据库
[20150619]undo文件损坏或者丢失的恢复1
[20150619]undo文件损坏或者丢失的恢复1.txt --昨天别人问一些undo文件损坏或者丢失的恢复,实际上如果正常关机,undo文件丢失,恢复是很容易的。
766 0

相关实验场景

更多