在Oracle的RAC环境中,UNDO表空间也是被创建在ASM。假如,UNDO表空间的数据文件,有一个被创建在了本地,那如何处理呢?
1.删除数据文件
会提示 ORA-03262: the file is non-empty
2.正确的方法
A.创建新的UNDO表空间
create undo tablespace UNDOTBS3 datafile '+DATA' size 1g;
B.切换到新的UNDO表空间
# 切换单独节点
alter system set undo_tablespace=UNDOTBS3;
# 切换到某一节点
alter system set undo_tablespace=UNDOTBS3 scope=both sid='<instance1>';
# 全部切换
alter system set undo_tablespace=UNDOTBS3 scope=both sid='*';
C.删除出错的UNDO表空间
# 是否还有online的undo段
select segment_name,tablespace_name,segment_id,status from dba_rollback_segs where tablespace_name='UNDOTBS1';
# 删除UNDO表空间
drop tablespace UNDOTBS1 including contents and datafiles;
3.恢复数据文件为ONLINE
假如,你将这个创建在本地的数据文件 offline,那么恢复的方法是:
# 这样直接 online 是不行的
alter database datafile 17 online;
# 提示错误
ORA-01113: file 17 needs media recovery
ORA-01110: data file 17: '/u01/app/oracle/product/11.2/db_1/DATA'
# 正确处理
recovery datafile '/u01/app/oracle/product/11.2/db_1/DATA';