ORA-14402: updating partition key column would cause a partition change
Posted hanhc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORA-14402: updating partition key column would cause a partition change相关的知识,希望对你有一定的参考价值。
【说明】:提示此类错误说明表进行了分区,修改分区字段所引起的错误。
【解决】:1、查询系统字典表
SELECT * FROM DBA_TABLES T WHERE T.TABLE_NAME = ‘表名称‘;
如果出现ORA-00942则需要判断当前是否有权限。
此时可以改为SELECT * FROM USER_TABLES T WHERE T.TABLE_NAME = ‘表名称‘;
2、修改ROW_MOVEMENT字段值
ROW_MOVEMENT关闭时的策略值为DISABLE,开启时为ENABLE。
执行 ALTER TABLE 表名称 ENABLE ROW MOVEMENT;
修改数据
然后关闭,ALTER TABLE 表名称 DISABLE ROW MOVEMENT;
通常来说分区表的分区字段是不允许修改的,因为每次修改数据,都对表进行了一次删除和插入两种操作。
ENABLE ROW MOVEMENT还会改变ROWID 影响LOGMNR分析日志中的SQL UNDO。
附:DBA_TABLES各字段含义
Column | Datatype | NULL | Description |
OWNER | VARCHAR2(30) | NOT NULL | 属主 |
TABLE_NAME | VARCHAR2(30) | NOT NULL | 表名 |
TABLESPACE_NAME | VARCHAR2(30) | 表空间,分区、临时和索引组织表的值为空 | |
CLUSTER_NAME | VARCHAR2(30) | 集群 | |
IOT_NAME | VARCHAR2(30) | 索引组织表的名称(如果有的话),属于溢出或映射表项。如果 iot_type 列不为空,则此列包含基表名称 | |
STATUS | VARCHAR2(8) | 如果先前的删除表操作失败,则指示表是否不能使用(无效)或有效(有效)。 | |
PCT_FREE | NUMBER | 块中空闲空间的最小百分比;分区表值为空 | |
PCT_USED | NUMBER | 块中使用空间的最小百分比;分区表值为空 | |
INI_TRANS | NUMBER | 初始事务数;分区表值为空 | |
MAX_TRANS | NUMBER | 事务的最大数量;分区表值为空 | |
INITIAL_EXTENT | NUMBER | 初始区域的大小(以字节为单位);分区表值为空 | |
NEXT_EXTENT | NUMBER | 二级范围的大小(以字节为单位);分区表值为空 | |
MIN_EXTENTS | NUMBER | 段中允许的最小区段数;分区表值为空 | |
MAX_EXTENTS | NUMBER | 区段中允许的最大区段数;分区表值为空 | |
PCT_INCREASE | NUMBER | 范围大小的百分比增加;分区表值为空 | |
FREELISTS | NUMBER | 用于insert操作的数据块的列表,分区表值为空 | |
FREELIST_GROUPS | NUMBER | 用于insert操作的数据块的列表组,分区表值为空 | |
LOGGING | VARCHAR2(3) | 日志表属性,分区表值为空 | |
BACKED_UP | VARCHAR2(1) | 上次更改后表是否已备份 | |
NUM_ROWS* | NUMBER | 表中的行数 | |
BLOCKS* | NUMBER | 表中使用的数据块的个数 | |
EMPTY_BLOCKS* | NUMBER | 表中空闲的数据块的个数 | |
AVG_SPACE* | NUMBER | 分配给表的数据块中的平均空闲空间(以字节为单位) | |
CHAIN_CNT* | NUMBER | 在被从一个数据块到另一个表中的行数,或迁移到一个新块,需要保留一部分旧的rowid | |
AVG_ROW_LEN* | NUMBER | 表中一行的平均长度(以字节为单位) | |
AVG_SPACE_FREELIST _BLOCKS | NUMBER | freelist的所有块的平均空间 | |
NUM_FREELIST_BLOCKS | NUMBER | freelist 的块的个数 | |
DEGREE | VARCHAR2(10) | 扫描表的每个实例的线程数 | |
INSTANCES | VARCHAR2(10) | 要扫描该表的实例数。 | |
CACHE | VARCHAR2(5) | 指示表是否要缓存在缓冲区缓存(y)或不(n)中。 | |
TABLE_LOCK | VARCHAR2(8) | 指示是否已启用表锁(启用)或禁用(禁用)。 | |
SAMPLE_SIZE | NUMBER | 用于分析此表的样本大小 | |
LAST_ANALYZED | DATE | 最近分析这张表的日期 | |
PARTITIONED | VARCHAR2(3) | 指示此表是否分区。设置 是 如果是分区。 | |
IOT_TYPE | VARCHAR2(12) | 如果这是一个索引组织表,值为 IOT, IOT_OVERFLOW, 或者 IOT_MAPPING,否则为NULL | |
TEMPORARY | VARCHAR2(1) | 当前会话只能看到它放在这个对象本身中的数据吗? | |
SECONDARY | VARCHAR2(1) | 是否被ODCIIndexCreate 触发创建 | |
NESTED | VARCHAR2(3) | 指示表是否是嵌套表(yes)或否(NO)。 | |
BUFFER_POOL | VARCHAR2(7) | 该对象的默认缓冲池。 分区表为空 | |
ROW_MOVEMENT | VARCHAR2(8) | 是否已启用或禁用分区行移动 | |
GLOBAL_STATS | VARCHAR2(3) | 对于分区表,指示数据收集表作为一个整体(是)或来自潜在的分区和子分区统计估计(否) | |
USER_STATS | VARCHAR2(3) | 指示用户是否直接输入统计数据(是)(否) | |
DURATION | VARCHAR2(15) | 指示临时表的持续时间。 | |
SYS$SESSION: 在会话持续期间保存行。 | |||
SYS$TRANSACTION: 行后 提交删除 | |||
分区表为空 | |||
SKIP_CORRUPT | VARCHAR2(8) |
Oracle数据库是否忽略表和索引扫描中标记为已损坏的块(启用)或引发错误(禁用)。 要启用此功能,运行 dbms_repair.skip_corrupt_blocksprocedure。 |
|
MONITORING | VARCHAR2(3) | 表是否有 监测 属性设置 | |
CLUSTER_OWNER | VARCHAR2(30) | 表所属的群集的所有者,如果有的话 | |
DEPENDENCIES | VARCHAR2(8) | 指示是否启用了行级依赖跟踪(启用)或禁用(禁用)。 | |
COMPRESSION | VARCHAR2(8) | 指示是否启用表压缩(启用)或禁用(已禁用);分区表为空值。 | |
DROPPED | VARCHAR2(3) | 指示表是否已被删除并处于回收站(是)或否(否)中;分区表为空值。 |
以上是关于ORA-14402: updating partition key column would cause a partition change的主要内容,如果未能解决你的问题,请参考以下文章
ADFS 2016 – Cannot add/update Relying Parties from the GUI from metadata files “Method not found”(示例
Can‘t find third_party/gtest. Run git submodule update --init, or disable with CMake -DBUILD_TEST(代码
HDU 4173 Party Location(计算几何,枚举)