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. 当所有的表分区都已经置换出来以后,就可以删除表空间了。
![Chanel [K]](http://www.dbform.com/wp-content/chanelk.png)
辛苦辛苦,我在旁边都、、、
圆梦之旅
27 May 09 at 4:26 pm
@圆梦之旅

也挺有意思的。
Kamus
28 May 09 at 11:35 am
回头给我找点活干,挣点外块,呵呵:)
还有呀,你着这个“submit comment”特别不好 ,tuning一下吧
lunar
28 May 09 at 5:29 pm
不知为何,岩岩的空间打不开了。
村民
4 Jun 09 at 11:37 am
@村民
确实是。。再等等,据说微软msn space这几天是有些问题
Kamus
4 Jun 09 at 1:56 pm
哦,谢谢你!
村民
4 Jun 09 at 9:02 pm