在 Oracle 中交换分区时出错 ORA-14097:ALTER TABLE EXCHANGE PARTITION 中的列类型或大小不匹配

问题描述 投票:0回答:1

我正在尝试将分区 PART_201901 从

MAIN_TABLE
交换到
TABLE_HISTORY

我使用与 MAIN_TABLE 相同的脚本创建了 TABLE_HISTORY,实际上使用了相同的脚本、索引、约束。

我的 Main_Table 有 PARTITION BY LIST (YEAR_MONTH),其中 YEAR_MONTH 是一个数字字段,值为 201901、201902 等,分区名称为 PART_201901 等等...

  • 2 本地索引,
  • 1 本地唯一索引,
  • 1 使用本地唯一索引的 PK 约束。

我正在使用以下查询来交换分区:

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

我检查了其他答案,但无法确定这里出了什么问题。

oracle oracle12c partitioning
1个回答
0
投票

create table tmp_swap  for exchange with table MAIN_TABLE
命令仅创建正确的内部列结构。它不会创建您可能还需要的任何依赖对象。

因为您在主表上有一个 PK,所以您在交换表上也必须有一个 PK,并且必须启用它,以便需要有效的索引。在交换表上创建唯一索引,使用该索引添加 PK 约束,然后重试交换

© www.soinside.com 2019 - 2024. All rights reserved.