我正在尝试将分区 PART_201901 从
MAIN_TABLE
交换到 TABLE_HISTORY
。
我使用与 MAIN_TABLE 相同的脚本创建了 TABLE_HISTORY,实际上使用了相同的脚本、索引、约束。
我的 Main_Table 有 PARTITION BY LIST (YEAR_MONTH),其中 YEAR_MONTH 是一个数字字段,值为 201901、201902 等,分区名称为 PART_201901 等等...
我正在使用以下查询来交换分区:
step1: create table tmp_swap for exchange with table MAIN_TABLE
step2: ALTER TABLE MAIN_TABLE EXCHANGE PARTITION PART_201901 WITH TABLE tmp_swap
step3: ALTER TABLE TABLE_HISTORY EXCHANGE PARTITION PART_201901 WITH TABLE tmp_swap
我在步骤3中遇到以下错误:
ORA-14097: column type or size mismatch in ALTER TABLE EXCHANGE PARTITION
我已经检查了使用以下查询的两个表之间是否存在任何差异及其相互匹配。
SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH,DATA_PRECISION,COLUMN_ID FROM SYS.dba_tab_cols where table_name = 'MAIN_TABLE' order by column_id
SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH,DATA_PRECISION,COLUMN_ID FROM SYS.dba_tab_cols where table_name = 'TABLE_HISTORY' order by column_id
select table_Name,search_condition_vc,constraint_type from user_constraints where table_name = 'MAIN_TABLE' order by search_Condition_vc
select table_Name,search_condition_vc,constraint_type from user_constraints where table_name = 'TABLE_HISTORY' order by search_Condition_vc
我检查了其他答案,但无法确定这里出了什么问题。
create table tmp_swap for exchange with table MAIN_TABLE
命令仅创建正确的内部列结构。它不会创建您可能还需要的任何依赖对象。
因为您在主表上有一个 PK,所以您在交换表上也必须有一个 PK,并且必须启用它,以便需要有效的索引。在交换表上创建唯一索引,使用该索引添加 PK 约束,然后重试交换