How to resolve ORA-14117: partition resides in offlined tablespace

SQL> DROP tablespace SUMM_DATA07;
DROP tablespace SUMM_DATA07
                *
ERROR at line 1:
ORA-14404: partitioned TABLE contains partitions IN a different tablespace appears.
 
SQL> ALTER TABLE CCDAWORK.S_ACCT_FIX DROP partition P6;
ALTER TABLE CCDAWORK.S_ACCT_FIX DROP partition P6
                                               *
ERROR at line 1:
ORA-14117: partition resides IN offlined tablespace

这样就处于了一个很尴尬的境地,面对着一个无法online的表空间,既不能将这个表空间drop了重建,也不能将这个表空间中包含的表分区删除掉。

解决方法是:通过exchange partition的方法,将位于offline表空间中的表分区置换到一个普通表中,这是数据字典的操作,不会检查表空间是否处于online状态,然后再将普通表删除,之后就可以将表空间删除了。

1. 将离线表空间中的所有表分区都选择出来,对于subpartition也同理操作。

SELECT owner,segment_name, partition_name,segment_type
FROM dba_segments
WHERE segment_type='TABLE PARTITION' AND 
tablespace_name IN(list of the offlined tablespces IN upper case)
ORDER BY segment_name;

2. 对于所有的表分区循环执行2.1到2.3的步骤。
2.1. 创建一个临时表,表结构同分区表一样,OWNER.SEGMENT_NAME都是从第一步的SQL中获得的。

CREATE TABLE TEMP AS SELECT * FROM OWNER.SEGMENT_NAME 
WHERE 1=2;

2.2. 置换表分区。

ALTER TABLE OWNER.SEGMENT_NAME 
exchange partition PARTITION_NAME WITH TABLE TEMP;

2.3. 删除临时表。

DROP TABLE TEMP;

3. 当所有的表分区都已经置换出来以后,就可以删除表空间了。

6 comments to How to resolve ORA-14117: partition resides in offlined tablespace

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">