在一次更改分区表某条数据时,报错ora-14402
该分区表的分区键为account_date,主键为id。查看该条数据的rowid:
在更新记录中的Partition Key时,可能会导致该记录超出当前所在分区的范围,需要将其转移到其他对应分区上,因此要求开启ROW MOVEMENT。查看该条数据行迁移是否开启:
select OWNER ,TABLE_NAME,STATUS,PARTITIONED,ROW_MOVEMENT from dba_tables where table_name='BIL_INVOICE_DETAIL'
可以看到该表行迁移没有开启,开启行迁移:alter table HOSTDB.BIL_INVOICE_DETAIL enable row movement;
再次执行update:
执行成功,且rowid发生改变。关闭该表的行迁移:alter table HOSTDB.BIL_INVOICE_DETAIL disable row movement;
关于行迁移:ROW MOVEMENT特性最初是在8i时引入的,其目的是提高分区表的灵活性,这一特性默认是关闭,在使用一下3个功能时需要打开:
1.flashback 表这一功能能帮助我们及时回滚一些误操作,防止数据意外丢失。在使用该功能之前,必须先打开ROW MOVEMENT,否则就会抛ORA-08189错误。
这个过程的内部操作, 可以通过对Flashback Table做SQL Trace来进一步观察。通过Trace,我们不难发现,
Flashback Table实际是通过Flashback Query将表中数据进行了一次删除、插入操作,因此ROWID会发生变化。
2.Shrink Segment (降低表的高水位)
Shrink Segment能帮助我们压缩数据段、整理数据碎片、降低高水位,以提高性能、节省空间。它也同样要求开启ROW MOVEMENT。
--这个时候 shrink space 会报10636错误
alter table test_move enable row movement;
alter table test_move shrink space;
我们可以看到在Shrink后,ROWID也变化了。从对其过程的Trace来看,Shrink对数据的改变不是通过SQL实现的,而是通过更底层的函数来实现的。
3.更新Partition Key
在更新记录中的Partition Key时,可能会导致该记录超出当前所在分区的范围,需要将其转移到其他对应分区上,因此要求开启ROW MOVEMENT。
--这个时候update会报14402错误
这一操作产生影响的特殊之处在于这是个DML操作,是和online transaction密切相关。对于这样一个UPDATE,实际上分为3步:先从原有分区将数据删除;将原数据转移到新分区上;更新数据。
其影响就在于以下几个方面:
一个UPDATE被分解为DELET、INSERT、UPDATE三个操作,增加了性能负担。其中,DELETE的查询条件与原UPDATE的查询条件相同,新的UPDATE的查询条件是基于INSERT生成的新的ROWID;
相应的Redo Log、Undo Log会增加;
如果Update语句还涉及到了Local Index的字段的话,新、旧2个分区上的Local Index都要被更新。
还有一点,Row Movement会和域索引(Domain Index)产生冲突:如果表上定义了域索引,开启Row Movement就会失败;反之亦然。部分引用:https://blog.csdn.net/enmotech/article/details/79294945
oracle 更改分区表数据 ora-14402
来源:这里教程网
时间:2026-03-03 16:24:04
作者:
编辑推荐:
- 使用11g客户端或pl/sql developer连接高版本Oracle 19c ORA-28040 ORA-0101703-03
- oracle 更改分区表数据 ora-1440203-03
- sqlplus / as sysdba 提示权限不足(ORA-01031)问题处理03-03
- [20210126]探究oracle内存分配.txt03-03
- 【BUILD_ORACLE】Oracle 19c RAC搭建(一)安装资源规划03-03
- 小米贷款顺势而为,迎来更为广阔的发展前景03-03
- [20210126]探究oracle内存分配3.txt03-03
- KubeVela:标准化的云原生平台构建引擎03-03
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- oracle 更改分区表数据 ora-14402
oracle 更改分区表数据 ora-14402
26-03-03 - ORACLE rman与RMAN-00054&ORA-09945
ORACLE rman与RMAN-00054&ORA-09945
26-03-03 - Oracle 12.2之后补丁RU RUR概要
Oracle 12.2之后补丁RU RUR概要
26-03-03 - unable to extend table SYS.AUD$ by 1024 in tablespace SYSTEM
- 【BUILD_ORACLE】使用ASMLib包搭建ASM磁盘
【BUILD_ORACLE】使用ASMLib包搭建ASM磁盘
26-03-03 - 干货 | 设计师必备中国风配色卡,快来收藏
干货 | 设计师必备中国风配色卡,快来收藏
26-03-03 - Thread 1 cannot allocate new log
Thread 1 cannot allocate new log
26-03-03 - Oracle database 19c中获取当前数据库版本的方法
Oracle database 19c中获取当前数据库版本的方法
26-03-03 - Oracle如何删除表中重复记录保留第一条
Oracle如何删除表中重复记录保留第一条
26-03-03 - Oracle网络服务基础(二)之监听器与TNS配置管理
Oracle网络服务基础(二)之监听器与TNS配置管理
26-03-03
