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;
浙公网安备 33010602011771号