`

ORACLE-分区表分区字段的update操作

阅读更多

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

分享到:
评论

相关推荐

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    大牛出手Oracle SQL优化实例讲解

    1.Oracle如何得到一个很大的表 2.loop insert 实例 3.autotrace验证索引的性能...15.增加字段时指定default值和先增加再update哪个性能好? 16.分区表实例讲解 17.分区索引实例讲解 18.分区表管理实例,以及常见的错误

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    3.1.1 如何选择全扫描操作 56 3.1.2 全扫描与舍弃 59 3.1.3 全扫描与多块读取 60 3.1.4 全扫描与高水位线 60 3.2 索引扫描访问方法 65 3.2.1 索引结构 66 3.2.2 索引扫描类型 68 3.2.3 索引唯一扫描 71 ...

    Oracle数据库设计策略及规范.docx

    USER_ID VARCHAR 创建用户ID CREATE_DATETIME DATE 创建时间 LAST_UPDATE_USER_ID VARCHAR 更新用户ID LAST_UPDATE_DATETIME TIMESTAMP 更新时间 不要用Identify字段作为表的主键与其它表关联。 4.3 索引设计 常规...

    最全的oracle常用命令大全.txt

    如果我们想知道user_indexes表各字段名称的详细含义,可以用下面这条SQL语句: SQL>select column_name,comments from dict_columns where table_name='USER_INDEXES'; 依此类推,就可以轻松知道数据字典的详细...

    Oracle执行计划不走索引的原因总结

    在Oracle数据库操作中,为什么有时一个表的某个字段明明有索引,当观察一些语的执行计划确不走索引呢?如何解决呢?本文我们主要介绍这部分内容,接下来让我们一起来了解一下。  不走索引大体有以下几个原因: ...

    数据库操作语句大全(sql)

    因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引) 14、说明:前10条记录 select top 10 * form ...

    Oracle事例

    20.oracle8中扩充了group by rollup和cube的操作。有时候省了你好多功夫的。 下面的语句可以进行总计 select region_code,count(*) from aicbs.acc_woff_notify group by rollup(region_code); <2> 对第1个字段...

    经典SQL语句大全

    因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引) 14、说明:前10条记录 select top 10 * form table...

    sql经典语句一部分

    因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引) 14、说明:前10条记录 select top 10 * form table...

    Oracle9i的init.ora参数中文说明

    Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...

    Toad 使用快速入门

    SQL编辑器中不仅包括标准的编辑命令,也包括一些增强的功能,如快速查询表中的字段、将SQL语句的内容格式化等等。这个窗口可以处理大到4GB 的内容,对大的开发项目来说非常有用。便捷的书签可以让开发人员非常容易地...

    mysql和oracle的区别(功能性能、选择、使用它们时的sql等对比)

    虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。 oracle: oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    5.6.6 谨慎使用分区表功能 211 5.7 mysql5.6同步复制新特性详解 213 第6章 备份与恢复 223 6.1 冷备份 224 6.2 逻辑备份 224 6.2.1 mysqldump增加了一个重要参数 225 6.2.2 取代mysqldump的新工具mydumper ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例070 网页版九九乘法表 104 实例071 读取数组购物车中的数据 105 实例072 图像验证码的生成 106 2.6 跳转语句 107 实例073 控制页面中表情图的输出 107 实例074 控制页面中数据的输出数量 108 实例075 动态改变...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例070 网页版九九乘法表 104 实例071 读取数组购物车中的数据 105 实例072 图像验证码的生成 106 2.6 跳转语句 107 实例073 控制页面中表情图的输出 107 实例074 控制页面中数据的输出数量 108 实例075 动态改变...

Global site tag (gtag.js) - Google Analytics