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 ,即可。
--------------------------------------------------------------------------------
在CentOS 6.4下安装Oracle 11gR2(x64)
--------------------------------------------------------------------------------