ORA-14404:partitioned table contains partitions in a different tablespace

这个表空间里面,存在某张分区表,它一部分分区在当前待删除表空间,另一部分分区在别的表空间Oracle
Oracle 限制:drop tablespace ... including contents 不能删这种跨表空间的分区表,整张分区表必须全部在这个表空间里才允许一起删掉。
配套报错:ORA-14407 是子分区跨表空间;ORA-14405 是分区索引跨表空间Oracle Sup...

第一步:查出是哪些表

SELECT DISTINCT table_owner,table_name
FROM dba_tab_partitions x
WHERE tablespace_name = UPPER('TS_NAME')
AND EXISTS (
    SELECT 1 FROM dba_tab_partitions y
    WHERE y.table_owner=x.table_owner
      AND y.table_name=x.table_name
      AND y.tablespace_name <> UPPER('TS_NAME')
);
 
查出 owner+table_name 之后,再看它所有分区分布:
SELECT partition_name,tablespace_name
FROM dba_tab_partitions
WHERE table_owner='OWNER' AND table_name='TABLE_NAME'
ORDER BY partition_name;
 

三种处理方案

方案 1:不需要这张分区表 → 直接删整张分区表

DROP TABLE OWNER.TABLE_NAME PURGE;
 
删完,再重新执行 drop tablespace ...

方案 2:还要保留这张表,只是删掉本表空间里的分区

ALTER TABLE OWNER.TABLE_NAME DROP PARTITION PXXX;
 
如果是子分区用 DROP SUBPARTITION
⚠️ 删除分区会丢该分区数据,确认业务不需要

方案 3:分区要保留,迁移分区到其他表空间

ALTER TABLE OWNER.TABLE_NAME MOVE PARTITION PXXX TABLESPACE OTHER_TS;
 
move 之后注意重建本地索引:
ALTER TABLE OWNER.TABLE_NAME MODIFY PARTITION PXXX REBUILD UNUSABLE LOCAL INDEXES;
posted @ 2026-10-29 08:39  我用python呀  阅读(2)  评论(0)    收藏  举报