为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:麒麟10
【CPU】:
【问题描述】*:交换分区报错-7000对象不匹配,删除分区表索引可以交换,但是生产数据库不可能完成这样的动作,请问如何处理。
SQL> desc t_tmp
行号 NAME TYPE$ NULLABLE
1 LOGTIME DATETIME(6) Y
2 USERID INTEGER Y
3 USERNAME VARCHAR(20) Y
4 AREAID INTEGER Y
5 OPTYPE INTEGER Y
已用时间: 0.832(毫秒). 执行号:8472.
SQL> desc T_PARTRANGETAB
行号 NAME TYPE$ NULLABLE
1 LOGTIME DATETIME(6) Y
2 USERID INTEGER Y
3 USERNAME VARCHAR(20) Y
4 AREAID INTEGER Y
5 OPTYPE INTEGER Y
已用时间: 0.935(毫秒). 执行号:8473.
SQL> select index_name,column_name from dba_ind_columns where table_name='T_TMP';
行号 INDEX_NAME COLUMN_NAME
1 IDX_TMP_1 USERID
2 IDX_TMP_2 USERNAME
已用时间: 6.924(毫秒). 执行号:8474.
SQL> select index_name,column_name from dba_ind_columns where table_name='T_PARTRANGETAB';
行号 INDEX_NAME COLUMN_NAME
1 IDX_P1_T1 USERID
2 IDX_P1_T2 USERNAME
使用分区交换exchange需注意:
1.分区交换仅支持范围和列表分区,不支持HASH分区。
2.分区交换可以将非分区表的数据交换到分区表,也可以将分区表的数据交换到非分区表,本质上是源表和目标表数据的互换。
3.分区交换要求分区表与交换表具有相同的结构(相同的表类型、相同的BRANCH选项、相同的列结构、相同的索引、相同的分布方式),否则会报“[-7000]:交换对象不匹配”的错误。
4.不支持含全局索引的分区表与普通表进行交换分区操作。
5.分区交换时不会进行数据校验,如果交换表的数据不符合分区范围,数据仍然会进入该分区。此时如果是范围分区可以使用split拆分分区,系统会自动对数据进行重组。
6.在生产环境中,为保证数据安全,建议对源表的数据备份后再做分区交换。
怕出错,就用insert .... select把