undo表空间修复小结(二)

2015-07-16 12:07:37 · 作者: · 浏览: 6
y


_SYSSMU156_3796802683$? ? ? ? need recovery


_SYSSMU157_2723916652$? ? ? ? need recovery


_SYSSMU158_1435464080$? ? ? ? need recovery


? 4,试图创建发现报错,真正工作中可以从这里来判断到底是那种情况,第一种情况是可以重新建立的。
?必须先禁止继续使用旧的回滚段和回滚空间:?


SQL>create pfile=/oracle/app/pfile.ora? from spfile
?


file created?


SQL>shutdown? immediate ;


在pfile中添加并修改以下内容:


*.undo_management='manual'? ###手动管理,才可以删除回滚段


*._offline_rollback_segments=('_SYSSMU154_3691636531$','_SYSSMU155_3686385895$','_SYSSMU156_3796802683$','_SYSSMU157_2723916652$','_SYSSMU158_1435464080$')? ? ? ###这样才能删除这些回滚段


*.undo_tablespace='undo2'? ? ###这样就会让以后的事务不在用旧的回滚段和undo表空间,


5.创建成spfile? 然后启动数据库


SQL>create spfile? from pfile;
?


spfile created?


SQL>startup?


6,删除旧的回滚段和回滚表空间:


SQL>drop rollbackup segment? '_SYSSMU154_3691636531$'? ;


'


'


'


'


把need recovery 的回滚段全部删除后,


SQL>drop undo tablespace undo1 including? contents;? ###因为已经丢失,就不必要添加数据文件了(and datafiles 选项了)


7,创建一个新的undo表空间,然后启动数据库,再修改undo_management 为自动。


注意这样后,所有未提交的事务都当做提交处理了。


总结:要是undo出现问题,你可以先把数据文件offline,然后修改undo_management 为manual,之后查出状态need recover 的回滚段,修改隐含参数 *._offline_rollback_segments ,把需要删除的(状态为need recover 的回滚段)添加进来,然后删除他们。重新创建undo表空间,然后undo_tablespace=新创建的表空间,打开数据库,最后把undo_management =auto ,即可。


--------------------------------------------------------------------------------


--------------------------------------------------------------------------------