ORA-14402: 更新分区关键字列将导致分区的更改
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,默认情况下,oracle的分区表对于分区字段是不允许进行update操作的,如果有对分区字段行进update,就会报错--ORA-14402: 更新分区关键字列将导致分区的更改。這種情況可以通過開啟表
千家信息网最后更新 2025年11月11日ORA-14402: 更新分区关键字列将导致分区的更改默认情况下,oracle的分区表对于分区字段是不允许进行update操作的,如果有对分区字段行进update,就会报错--ORA-14402: 更新分区关键字列将导致分区的更改。這種情況可以通過開啟表的行移動來允許對分區字段的update 操作:
alter table xxx enable row movement;
之後就可以成功update 分區字段,同時因為行的物理移動,導致rowid發生變化,對應列值的索引葉塊 會標記為刪除,插入新的葉塊,重定義完分區后,記得關閉行移動。
alter table xxx disable row movement;
下面三種情況需要開啟row movement
1.更新Partition Key
分区表某一行更新时,如果更新的是分区列,并且更新后的列值不属于原来的这个分区,如果开启了这个选项,就会把这行从这个分区中delete掉,并加到更新后所属的分区。相当于一个隐式的delete+insert,但是不会触发insert/delete触发器。如果没有开启这个选项,就会在更新时报错ORA-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就会失败;反之亦然。
2. Flaskback table to 某時間
Flashback Table实际是通过Flashback Query将表中数据进行了一次删除、插入操作,因此ROWID会发生变化
3. Shrink Segment
Shrink Segment能帮助我们压缩数据段、整理数据碎片、降低高水位,以提高性能、节省空间。
有必要說明一下,row movement并不是行遷移,最大的區別是行遷移的rowid是不變的,行遷移是update 行記錄時,數據塊沒有足夠的空閒容納數據行,Oracle將此行移到其他數據塊,同時保留此行的rowid不變,并在原數據塊建一指針指向新的行位置。這種情況下,讀取一行數據就會訪問2個數據塊,增加IO,導致性能下降。
alter table xxx enable row movement;
之後就可以成功update 分區字段,同時因為行的物理移動,導致rowid發生變化,對應列值的索引葉塊 會標記為刪除,插入新的葉塊,重定義完分區后,記得關閉行移動。
alter table xxx disable row movement;
下面三種情況需要開啟row movement
1.更新Partition Key
分区表某一行更新时,如果更新的是分区列,并且更新后的列值不属于原来的这个分区,如果开启了这个选项,就会把这行从这个分区中delete掉,并加到更新后所属的分区。相当于一个隐式的delete+insert,但是不会触发insert/delete触发器。如果没有开启这个选项,就会在更新时报错ORA-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就会失败;反之亦然。
2. Flaskback table to 某時間
Flashback Table实际是通过Flashback Query将表中数据进行了一次删除、插入操作,因此ROWID会发生变化
3. Shrink Segment
Shrink Segment能帮助我们压缩数据段、整理数据碎片、降低高水位,以提高性能、节省空间。
有必要說明一下,row movement并不是行遷移,最大的區別是行遷移的rowid是不變的,行遷移是update 行記錄時,數據塊沒有足夠的空閒容納數據行,Oracle將此行移到其他數據塊,同時保留此行的rowid不變,并在原數據塊建一指針指向新的行位置。這種情況下,讀取一行數據就會訪問2個數據塊,增加IO,導致性能下降。
如果直接創建主鍵,使用的global index,當某分區被drop后,主鍵會失效,
ALTERTABLE PHAECDA1.HCPSGLSINFOPZOW_NEW ADDCONSTRAINT PK_STAMP PRIMARYKEY(T_STAMP) tablespace xx;
改為 local index,但不包含分區段,報錯
ALTERTABLE PHAECDA1.HCPSGLSINFOPZOW_NEW ADDCONSTRAINT PK_STAMP PRIMARYKEY(T_STAMP) using index local tablespace xxx;
ORA-14039: partitioning columns must form a subset of key columns of a UNIQUE
ORA-14039: 分区列必须构成 UNIQUE 索引的关键字列子集
Local index ,主鍵+分區鍵 作為新的主鍵,自動創建分區index ,index會按分區段Partition 分區到table的分區表空間
ALTERTABLE PHAECDA1.HCPSGLSINFOPZOW_NEW ADDCONSTRAINT PK_STAMP PRIMARYKEY(T_STAMP,CLDATE)USINGINDEXLOCAL;
先創建index ,再創建主鍵,
當然,主鍵也可直接作為分區段
更新
数据
字段
索引
性能
条件
查询
关键
关键字
一行
实际
分区表
影响
最大
特殊
相同
必要
成功
三个
位置
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络架构对网络安全的影响
全息感知网网络安全系统
教育部网络安全工作
服务器主板天梯图
汶鼎威海网络技术有限公司
电脑数据库出问题怎么办
篆刻关于网络安全的词
通过远程服务器上网
山东极点软件开发有限公司
软件开发的使用范围指什么
服务器不支持撤回怎么设置
华为网络技术与设备
信息化与网络安全图片
vr是什么软件开发的
关于网络安全演讲大赛策划案
南京大学数据库检索
汕职计算机网络技术
银行服务器如何更改预留手机号
dbeaver中如何打开数据库
棋盘需服务器
w7管理服务器停止
大学毕业做网络安全
物探研究院做软件开发好不好
怎么对sql数据库的表复制
泰安软件开发葛建雷
服务器硬盘供电线路
面对对象数据库技术
当前主流的网络技术
数据库安全管理参考文献
网络安全主题论文