默认情况下,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         123

SQL>

enable row movement可以允许数据段的压缩、update分区字段的数据(跨分区的)

但是,也是有限制性的:对于普通表(heap-organized)行迁移后rowid会发生变化,对于索引表(index-organized)rowid虽然依然有效,但是其实际对应的物理构成是错误的。

分区表分区字段的update操作的更多相关文章

  1. 分区表的表进行update操作

    今天对一张创建了分区表的表进行update操作,正好需要修改的是创建分区的那一列,由于是要修改在分区表范围内的数据,所以无法修改. 然后搜了一下,需要修改row movement这个属性:alter ...

  2. Oracle 分区字段数据更新

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

  3. Hive分区表新增字段及修改表名,列名,列注释,表注释,增加列,调整列顺序,属性名等操作

    一.Hive分区表新增字段 参考博客:https://blog.csdn.net/yeweiouyang/article/details/44851459 二.Hive修改表名,列名,列注释,表注释, ...

  4. MySQL 分区表 partition线上修改分区字段,后续进一步学习partition (1)

    公司线上在用partition,有一个表的分区字段错了,需要重建,结果发现没有办法像修改主键字段或者修改索引字段那样直接一条sql搞定.而是需要建临时表,有down time,所以去仔细看了文档,研究 ...

  5. hive分区表新增字段,已有分区显示为null

    如果在hive的分区表新增非分区字段,那么原有的分区的数据即使重新运行也会显示为null. 必须先删除该分区,再重新跑数据.

  6. 如何让spark sql写mysql的时候支持update操作

    如何让sparkSQL在对接mysql的时候,除了支持:Append.Overwrite.ErrorIfExists.Ignore:还要在支持update操作 1.首先了解背景 spark提供了一个枚 ...

  7. 使用merge同时执行insert和update操作

    SQL点滴18—SqlServer中的merge操作,相当地风骚   今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在tech ...

  8. mysql update操作

    update语法 Single-table语法: UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=ex ...

  9. MYSQL的分区字段,必须包含在主键字段内

    MYSQL的分区字段,必须包含在主键字段内   MYSQL的分区字段,必须包含在主键字段内 在对表进行分区时,如果分区字段没有包含在主键字段内,如表A的主键为ID,分区字段为createtime ,按 ...

随机推荐

  1. MySQL 使用pt-table-checksum 检查主从数据一致性 (实例转)

    1.基本环境: Mysql版本:5.6.12-log Percona-toolkit:2.2.18 Linux:centos6.5 2.安装 源码安装: # 一些依赖包 yum install per ...

  2. 使用Json Template在Azure China创建ARM类型的虚拟机

    前面几篇文章介绍过Azure的两种VM的模式,包括ASM和ARM.并且介绍了如何用Azure CLI和PowerShell创建虚拟机.本文将介绍如何采用Json的Template来创建基于ARM的VM ...

  3. Unix文件指令-Mac终端命令应用

    pwd:查看当前文件夹 cd: 打开文件夹 ls:列出当前路径下所有文件 ls -l :列出当前路径下的所有文件详细信息. mkdir: 新建文件夹 touch: 创建文件   eg: touch t ...

  4. OpenWrt添加启动脚本

    1.在 /etc/init.d 目录下建立文件 vi silabs #!/bin/sh /etc/rc.common # Copyright (C) 2006 OpenWrt.org START=93 ...

  5. delphi 10.2.2.2004 Tokyo 安装步骤

    delphi 各版本的安装,其XX工具都附有详细说明.遵守其安装步骤,很容易成功. 本教就以 delphi 10.2.2.2004 为例,演示一下整个安装过程.其它各版本就自行尝试. 附: delph ...

  6. 如何删除offline数据文件/表空间上的分区

    接上一篇"Oracle 10g RAC全库flashback " http://www.cnblogs.com/cqubityj/p/3265552.html 在打开数据库之前把2 ...

  7. leetcode429

    这道题目是属于树的层次遍历,使用两层的队列非空判断. class Solution { public: vector<vector<int>> levelOrder(Node* ...

  8. 将openfire部署到CentOS云服务器上

    http://ishere.cn/2014/07/25/centos-64bit-openfire.html      CentOS 64位安装openfire http://www.cnblogs. ...

  9. DAY2-python数据类型、字符编码、文件处理

    阅读目录 一.引子 二.数字 三.字符串 四.列表 五.元祖 六.字典 七.集合 八.数据类型总结 九.运算符 十.字符编码 十一.文件处理 一.引子 1 什么是数据? x=10,10是我们要存储的数 ...

  10. spring bean属性及子元素使用总结

    spring bean属性及子元素使用总结 2016-08-03 00:00 97人阅读 评论(0) 收藏 举报  分类: Spring&SpringMVC(17)  版权声明:本文为博主原创 ...