在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';