ORA-14048: a partition maintenance operation may not be combined with other operations
ALTER TABLE or ALTER INDEX statement attempted to combine a partition maintenance operation (e.g. MOVE PARTITION) with some other operation (e.g. ADD PARTITION or PCTFREE which is illegal
分析: ALTER TABLE或ALTER INDEX语句的参数之前有冲突,其它操作对分区维护的操作造成影响。有可能是人为执行设置的语句;亦有可能类似于下例情况,oracle拼接而成的语句:
-- 创建测试表,在字段后加primary key,则是系统自动生成的约束和索引的名称,而不是人为指定。
create table ora_14048(a number primary key, b varchar2(30));
-- 将测试表主键约束对应的索引设置为不可用状态
alter index SYS_C009537 unusable;
-- windows系统cmd窗口导出测试表
expdp C##LY/密码@XE tables=ora_14048 dumpfile=ora_14048.dmp directory=data_pump_dir logfile=expdp_ora_14048.log
-- 然后导入测试表
impdp INFA/密码@XE remap_schema=C##LY:INFA dumpfile=ora_14048.dmp directory=data_pump_dir logfile=impdp_ora_14048.log
-- 导入有错,日志如下
;;;
Import: Release 11.2.0.2.0 - Production on 星期五 9月 1 10:43:59 2017
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
;;;
连接到: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
已成功加载/卸载了主表 "INFA"."SYS_IMPORT_FULL_01"
启动 "INFA"."SYS_IMPORT_FULL_01": INFA/********@XE remap_schema=C##LY:INFA dumpfile=ora_14048.dmp directory=data_pump_dir logfile=impdp_ora_14048.log
处理对象类型 TABLE_EXPORT/TABLE/TABLE
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
. . 导入了 "INFA"."ORA_14048" 0 KB 0 行
处理对象类型 TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
ORA-39083: 对象类型 CONSTRAINT 创建失败, 出现错误:
ORA-14048: 分区维护操作不能与其他操作组合
失败的 sql 为:
ALTER INDEX "INFA"."SYS_C009537" UNUSABLE ENABLE
作业 "INFA"."SYS_IMPORT_FULL_01" 已经完成, 但是有 1 个错误 (于 10:44:01 完成)
-- 查询该表索引和约束情况,发现状态还是正常,索引约束都建立起来了。只是索引名约束名不一致,且索引未能与来源库中一样状态为UNUSABLE。
select t.status, t.* from user_indexes t where t.table_name = 'ORA_14048';
select t.status, t.* from user_constraints t where t.table_name = 'ORA_14048';
措施: 确保分区维护操作是ALTER TABLE或ALTER INDEX语句中指定的唯一操作;除处理分区之外的,分区表/索引的默认属性的操作或指定表重命名(ALTER TABLE RENAME)的操作都可以随意组合
Ensure that a partition maintenance operation is the sole operation specified in ALTER TABLE or ALTER INDEX statement; operations other than those dealing with partitions, default attributes of partitioned tables/indices or specifying that a table be renamed (ALTER TABLE RENAME) may be combined at will
-- 但由于索引名称不一致的问题,如果是导入的表空间或用户等更大级别的数据,那么出现问题时估计就不清楚需要设置不可用状态的索引具体对应的是哪个表了
-- 此时估计应该从来源库中查询到对应索引的所在表,然后再在目标库中找到该表的索引获取到索引名称然后进行操作。
alter index SYS_C009554 unusable;
ORA-14063: Unusable index exists on unique/primary constraint key
User attempted to add or enable a primary key/unique constraint on column(s) of a table on which there exists an index marked Index Unusable.
alter index 索引名 unusable;
可设置为不可用状态,那么关联的约束就无法正常启用或者想在索引限制的字段上创建约束也是无法创建成功的。措施: 删除现有索引或使用ALTER INDEX REBUILD重建它。
Drop the existing index or rebuild it using ALTER INDEX REBUILD
alter index 索引名 rebuild;
将索引重建或者先删除该索引,然后再执行对应约束语句即可。