UNDO表空间丢失/损坏测试

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

时间: 2024-09-19 15:57:12

UNDO表空间丢失/损坏测试的相关文章

undo表空间文件丢失恢复(4)--无备份无recover的情况下恢复

  undo表空间的数据文件丢失,如果没有备份的情况下,而且丢失的undo文件可以置为offline状态后(注意是offline不是recover状态),则可以如下恢复,下边给出一个例子.   undo表空间文件丢失恢复(1)--有备份的情况下恢复:http://blog.itpub.net/26736162/viewspace-1458654/ undo表空间文件丢失恢复(2)--无备份有redo的情况下恢复:http://blog.itpub.net/26736162/viewspace-1

undo表空间文件丢失恢复(3)--无备份无redo的情况下恢复

undo表空间的数据文件丢失,如果没有备份的情况下,而且redo也不可用,这个时候就要采用隐藏参数来恢复,下边给出一个例子.   undo表空间文件丢失恢复(1)--有备份的情况下恢复:http://blog.itpub.net/26736162/viewspace-1458654/ undo表空间文件丢失恢复(2)--无备份有redo的情况下恢复:http://blog.itpub.net/26736162/viewspace-1458663/   [oracle@rhel6_lhr ~]$

undo表空间文件丢失恢复(2)--无备份有redo的情况下恢复

undo表空间的数据文件丢失,如果没有备份的情况下,但是redo完好,这个时候可以这样恢复,下边给出一个例子.   undo表空间文件丢失恢复(1)--有备份的情况下恢复:http://blog.itpub.net/26736162/viewspace-1458654/   [oracle@rhel6_lhr ~]$ sqlplus / as sysdba   SQL*Plus: Release 10.2.0.4.0 - Production on Thu Mar 12 18:13:13 201

undo表空间文件丢失恢复(1)--有备份

  undo表空间的数据文件丢失,如果有备份的情况下,恢复非常简单,下边给出一个例子:       [oracle@rhel6_lhr ~]$ sqlplus / as sysdba   SQL*Plus: Release 10.2.0.4.0 - Production on Thu Mar 12 18:02:13 2015   Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.     Connected to: Oracle Dat

关于undo表空间配置错误的ORA-30012

      undo表空间是Oracle体系结构的重要组成部分,为什么我们可以回滚,就是因为有它.数据库任意数据的修改都会在undo表空间里生成前镜像,一是可以回滚,二是可以实现并发,以及一致性查询.因此undo也是Oracle数据库在创建和配置参数时必要的组成部分.本文描述的是错误的配置undo表空间之后故障的解决.       有关undo表空间的基础知识可以参考:             Oracle 回滚(ROLLBACK)和撤销(UNDO)            检查及设置合理的und

收缩undo表空间

      通常情况下,如果undo表空间的处于自动扩展且未指定最大值的情形,对于使用小表空间模式的数据库,undo表空间可能会一再增长,直到达到32GB.或者是在指定了自动扩展及其最大值而月底或年末的批量数据计算导致undo表空间疯狂超范围增长后不再释放.对于这些情形我们需要手动收缩表空间以达到节省空间资源以及数据库管理开销,如rman备份等.本文列出了收缩undo表空间的基本步骤并给出示例.      有关表空间,undo表空间的文章可参考:           Oracle 表空间与数据文

检查及设置合理的undo表空间

      UNDO是用于实现并发控制以及构建一致性读,也就是在数据变更之前产生前镜像,以保证用户能够回滚或撤销对数据库所作的修改.是Oracle数据库完整性的重要组成部分.因此合理的设计及配置undo以及使用undo都将对数据库有较大的影响.通常情况下,对于大规模数据的删除,更新操作,我们建议使用分批删除分次提交以减少对undo的占用和冲击.那么对于undo的大小到底应该设置多大?是启用自动扩展还是关闭自动扩展?这个问题仁者见仁,智者见智,见下文.   1.当前数据库环境及undo配置信息 s

如何Shrink Undo表空间,释放过度占用的空间_oracle

环境:OS:Red Hat Enterprise Linux AS release 4 (Nahant)DB:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production 一台Oracle10gR2数据库报出如下错误:ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in  tablespace SYSAUX ORA-1653: un

[20160721]rman与undo表空间备份.txt

[20160721]rman与undo表空间备份.txt --//UNDO表空间主要用于存储前镜像数据,这些数据在回滚以及恢复过程中可能被用到. --//一般生产数据库的UNDO表空间可能会变得非常巨大,甚至包括多个数据文件,而备份完整的UNDO数据文件在恢复时一般可能用到的比 --//例很小.所以UNDO的很大一部分备份是多余的,在Oracle11g中,Oracle引入了一个新的特性RMAN UNDO备份优化. --//在RMAN备份UNDO表空间时,提交事务的UNDO信息将不再备份,这个特性