Autonomous Data Warehouse更新后ROWID变化是否正常?能否禁用该行为?
问题答复
该现象属于完全预期的正常行为
Oracle Autonomous Data Warehouse(ADW)默认启用混合列压缩(HCC)、自动段空间管理特性,更新数据时出现ROWID变更通常由以下两种场景触发:
- 对HCC压缩的行执行更新操作时,行需要先解压缩再迁移到新的未压缩数据块存储,会直接触发ROWID变更
- 普通压缩/未压缩表的更新操作导致行长度超过当前数据块剩余可用空间时,行会被迁移到新的数据块,也会触发ROWID变更
ROWID本身的设计定位就是数据行的临时物理地址标识,而非永久唯一标识,除了更新触发的行迁移,表执行重组、收缩、移动等维护操作时,全表的ROWID也会批量变更。
无法全局禁用该行为,可通过方案规避
你不能直接禁用ROWID变更的底层机制,但可以通过调整配置减少该情况发生,或者采用更稳妥的行定位方案:
- 调整表压缩模式:执行
ALTER TABLE <你的表名> COMPRESS FOR OLTP;将表的压缩模式调整为OLTP压缩,该模式下只要更新不触发行长度溢出当前块,就不会变更ROWID - 禁用分区表行移动:如果你的表是分区表,执行
ALTER TABLE <你的表名> DISABLE ROW MOVEMENT;,可以避免更新分区键导致行跨分区迁移带来的ROWID变更 - 更稳妥的方案:不要依赖ROWID定位待更新的行,改用业务侧的主键、唯一键作为行定位标识,完全规避ROWID变更带来的业务问题。
内容的提问来源于stack exchange,提问作者Yasin B
相关产品推荐
相关产品推荐

