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)   指示表是否已被删除并处于回收站(是)或否(否)中;分区表为空值。


       

posted @ 2018-07-31 17:32  行远自迩  阅读(2359)  评论(0编辑  收藏  举报