今天客户那边有个数据文件坏了,数据库未做备份,幸好对应的分区表都是些历史数据,数据丢了也就算了。
但要删除该表空间时报分区表也被包含在其它表空间,不能删除。解决方法也挺简单,主要使用exchange语法将分区和另一个新建的临时表进行交换即可。
2、解决方案
1) 首先创建一个结构和分区表一致的临时表,不要有数据。
SQL> create table test as select * from t1 where 1=2;Table created.
2) 交换这个临时表和出问题的分区。
WITHOUT VALIDATION语法是指临时表中的数据移动到分区中不必检验分区键的分区范围,即临时表中的数据即使不在p2分区的范围内,也会移动到分区p2中;如果想进行检验的话,就要使用WITH VALIDATION语法,或者就不写这段,缺省是要检验的。
1.建立临时表
create table D_ZPZH_hash1 as select * from D_ZPZH_hash where 1=2
2.交换数据
ALTER TABLE D_ZPZH_hash EXCHANGE PARTITION t_hash_p3 WITH TABLE D_ZPZH_hash1 WITHOUT VALIDATION
3.drop table space
drop tablespace tbspart03 including contents and datafiles
4.ok