默认情况下,oracle的分区表对于分区字段是不允许进行update操作的,如果有对分区字段行进update,就会报错——ORA-14402: 更新分区关键字列将导致分区的更改。但是可以通过打开表的row movement属性来允许对分区字段的update操作。

例:创建分区表test_part进行实验

create table TEST_PART

(

A1 NUMBERnot null,

A2 DATE      not null,

A3 VARCHAR2(6) not null,

A4 DATE not null,

A5 NUMBER not null,

)

partition by range (A1)

(

partition P1 values less than (1000),

partition P2 values less than (2000),

partition P3 values less than (3000),

partition P4 values less than (4000),

partition P5 values less than (5000),

partition P6 values less than (MAXVALUE)

);

插入如下的数据

SQL> select * from test_part;

A1 A2          A3     A4                  A5

---------- ----------- ------ ----------- ----------

123 2006-06-30  123456 2006-06-30         123

456 2006-06-30  asdfgh 2006-06-30         456

1 2006-06-30  234123 2006-06-30           1

2 2006-06-30  234234 2006-06-30           2

1234 2006-06-30  456789 2006-06-30        1234

1111 2006-06-30  ewrqwe 2006-06-30        1111

2222 2006-06-30  fdafda 2006-06-30        2222

3333 2006-06-30  342342 2006-06-30        3333

5678 2006-06-30  qwerty 2006-06-30        5678

9 rows selected

分区P1、P2的数据分别为:

SQL> select rowid,t.* from test_part partition(p1) t;

ROWID                      A1 A2          A3     A4                  A5

------------------ ---------- ----------- ------ ----------- ----------

AAAGLoAAGAAAtsEAAB        456 2006-06-30  asdfgh 2006-06-30         456

AAAGLoAAGAAAtsEAAC          1 2006-06-30  234123 2006-06-30           1

AAAGLoAAGAAAtsEAAD          2 2006-06-30  234234 2006-06-30           2

AAAGLoAAGAAAtsEAAE        123 2006-06-30  123456 2006-06-30         123

SQL> select rowid,t.* from test_part partition(p2) t;

ROWID                      A1 A2          A3     A4                  A5

------------------ ---------- ----------- ------ ----------- ----------

AAAGLwAAGAAA+8MAAC       1234 2006-06-30  456789 2006-06-30        1234

AAAGLwAAGAAA+8MAAD       1111 2006-06-30  ewrqwe 2006-06-30        1111

直接update提示错误

SQL> update test_part set a1=1123 where a1=123;

update test_part set a1=1123 where a1=123

ORA-14402: 更新分区关键字列将导致分区的更改

打开row movement属性

SQL> alter table test_part enable row movement;

Table altered

再次执行update操作

SQL> update test_part set a1=1123 where a1=123;

1 row updated

执行是成功的并迁移到分区P2上了,且这时候rowid也发生了变化

SQL> select rowid,t.* from test_part partition(p2) t;

ROWID                      A1 A2          A3     A4                  A5

------------------ ---------- ----------- ------ ----------- ----------

AAAGLwAAGAAA+8MAAC       1234 2006-06-30  456789 2006-06-30        1234

AAAGLwAAGAAA+8MAAD       1111 2006-06-30  ewrqwe 2006-06-30        1111

AAAGLwAAGAAA+8PAAB       1123 2006-06-30  123456 2006-06-30         123SQL> enable row movement可以允许数据段的压缩、update分区字段的数据(跨分区的)但是,也是有限制性的:对于普通表(heap-organized)行迁移后rowid会发生变化,对于索引表(index-organized)rowid虽然依然有效,但是其实际对应的物理构成是错误的。

Oracle表的分区update卡着,分区表分区字段的update操作相关推荐

  1. Oracle表的分区update卡着,分区表update global indexes引起表阻塞

    分区表update global indexes引起表阻塞 在drop一个大的分区表(半年前,未使用)的时候引起系统阻塞队列 alter table agent_log truncate partit ...

  2. oracle表分区设计_ORACLE 分区表的设计

    ORACLE 分区表的设计 时间:2019-01-29 22:07作者:网友投稿 分区表的概念 分区致力于解决支持极大表和索引的关键问题.它采用他们分解成较小和易于管理的称为分区的片(piece)的方 ...

  3. oracle 表分区 date,ORACLE分区表的使用和管理

    1创建和使用分区表 Oracle分区表分为四类:范围分区表:列表分区表:哈希分区表:组合分区表 范围分区表 创建一个按字段数据范围分区的表,分区置于指定的不同表空间中 示例代码: --为各个分区准备独 ...

  4. oracle 分区表好处,Oracle表分区的相关概念及其优点(转)

    Oracle 8i以后推出了分区选项.分区将表分离在若于不同的表空间上,用分而治之的方法来支撑元限膨胀的大表,组大表在物理一级的可管理性.将大表分割成较小的分区可以改善表的维护.备份.恢复.事务及查询 ...

  5. oracle表分区失效14400,Oracle11g:分区表数据操作出现ORA-14400异常处理详解

    Oracle11g:分区表数据操作出现ORA-14400异常处理 问题: 当对已分区的表数据进行操作(例如新增,修改),出现异常提示: ORA-14400: 插入的分区关键字未映射到任何分区 分析: ...

  6. oracle范围分区表,Oracle表分区之范围分区-Oracle

    Oracle表分区之范围分区 以表中的一个列或一组列的值的范围分区 语法: [sql] PARTITION BY RANGE (column_name) (    www.2cto.com PARTI ...

  7. oracle分区属于什么知识,详细讲解Oracle表分区的相关概念及其优点

    Oracle 8i以后推出了分区选项.分区将表分离在若于不同的表空间上,用分而治之的方法来支撑元限膨胀的大表,组大表在物理一级的可管理性.将大表分割成较小的分区可以改善表的维护.备份.恢复.事务及查询 ...

  8. 数据库表设计、 数据库分层、myslq水平拆分、oracle表分区

    数据库表设计 数据库表结构设计方法及原则(li)数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的 ...

  9. 分区表分区字段的update操作

    默认情况下,oracle的分区表对于分区字段是不允许进行update操作的,如果有对分区字段行进update,就会报错--ORA-14402: 更新分区关键字列将导致分区的更改.但是可以通过打开表的r ...

最新文章

  1. python合并两个有序列表(list)
  2. 在项目中遇到的一些bug
  3. 牛客网在线编程题之“换汽水”
  4. Linux 多学习过程
  5. flutter 一个用户登录页面
  6. 疑似一加7 Pro 5G版通过3C认证:配备30W快充头
  7. MySQL5.7重置root密码
  8. jQuery获取select onChange的值
  9. scala case语句_Scala模式与case语句匹配
  10. [渝粤教育] 中国地质大学 思想道德修养与法律基础 复习题
  11. python + selenium 获取标签文本的为空解决办法
  12. Mysql批量添加数据
  13. L4Linux的版本比较
  14. Spring Bean的作用域
  15. AlphaBlend - [Daily APIs]
  16. vnc远程控制linux端口5901,VNC远程控制Linux
  17. OSChina 周二乱弹 —— 仙女抚我顶,脱发不长生
  18. kettle 用cmd bat来运行ktr和kjb
  19. 【必看】前端代码规范
  20. 前端从零开始学习笔记(一)开发工具的安装说明

热门文章

  1. dependencies与dependenciesManagement的区别
  2. 做分析,首选什么行业 ?
  3. 【原力计划小程序】1、一篇文章深入了解小程序的学习路线(以项目驱动的方式带你学习微信小程序)
  4. 初级程序员应该如何准备面试?
  5. 管理员权限运行cmd
  6. php location document.referrer,关于隐藏来路 Referrer的方法探讨
  7. bugku crypto 奇怪的密码
  8. 本人编写的《新编J2ME就业培训教程》即将出版!
  9. 新欢只是欢,旧爱才是爱
  10. 如何为SD卡与NAND Flash的uboot加上menu菜单!