Chanel [K]

面朝大海,春暖花开

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

with 6 comments

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. 当所有的表分区都已经置换出来以后,就可以删除表空间了。

Written by kamus

May 27th, 2009 at 4:03 pm

Posted in Oracle RDBMS

Tagged with

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

Subscribe to comments with RSS or TrackBack to 'How to resolve ORA-14117: partition resides in offlined tablespace'.

  1. 辛苦辛苦,我在旁边都、、、

    圆梦之旅

    27 May 09 at 4:26 pm

  2. @圆梦之旅
    :D :D
    也挺有意思的。

    Kamus

    28 May 09 at 11:35 am

  3. 回头给我找点活干,挣点外块,呵呵:)

    还有呀,你着这个“submit comment”特别不好 ,tuning一下吧 :D

    lunar

    28 May 09 at 5:29 pm

  4. 不知为何,岩岩的空间打不开了。

    村民

    4 Jun 09 at 11:37 am

  5. @村民
    确实是。。再等等,据说微软msn space这几天是有些问题

    Kamus

    4 Jun 09 at 1:56 pm

  6. 哦,谢谢你!

    村民

    4 Jun 09 at 9:02 pm

Leave a Reply