分区表 行移动

简介: oracle  oracle 8.0中没有行移动功能,在这个版本中,必须先删除该行,再重新将其插入 测试环境oracle 11.
oracle 

oracle 8.0中没有行移动功能,在这个版本中,必须先删除该行,再重新将其插入

测试环境oracle 11.2.0.3.0




-- Create table
create table GH_RANGE_EXAMPLE
(
  id         VARCHAR2(100),
  range_date DATE not null
)
partition by range (RANGE_DATE)
(
  partition RANGE_15 values less than (TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    tablespace TS_ZYK_DATA
    pctfree 10
    initrans 1
    maxtrans 255
    storage
    (
      initial 8M
      next 1M
      minextents 1
      maxextents unlimited
    ),
  partition RANGE_16 values less than (TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    tablespace TS_ZYK_DATA
    pctfree 10
    initrans 1
    maxtrans 255
    storage
    (
      initial 8M
      next 1M
      minextents 1
      maxextents unlimited
    ),
  partition RANGE_MAX values less than (MAXVALUE)
    tablespace TS_ZYK_DATA
    pctfree 10
    initrans 1
    maxtrans 255
);


SQL> select * from gh_range_example t;
ID                                                                               RANGE_DATE
-------------------------------------------------------------------------------- -----------
100                                                                              2015/6/16 1
100                                                                              2016/6/15 1


SQL> update gh_range_example t set t.id=t.id+1;
2 rows updated

SQL> select * from gh_range_example t;
ID                                                                               RANGE_DATE
-------------------------------------------------------------------------------- -----------
101                                                                              2015/6/16 1
101                                                                              2016/6/15 1



SQL> update gh_range_example t set t.range_date=trunc(sysdate) where t.range_date < trunc(sysdate)-10;
update gh_range_example t set t.range_date=trunc(sysdate) where t.range_date < trunc(sysdate)-10
ORA-14402: updating partition key column would cause a partition change


SQL> select rowid from gh_range_example t where t.range_date < trunc(sysdate)-10;
ROWID
--------------------------------------------------------------------------------
AAADfLAAGAAABq3AAA

SQL> alter table gh_range_example enable row movement;
Table altered

SQL> update gh_range_example t set t.range_date=trunc(sysdate) where t.range_date < trunc(sysdate)-10;
1 row updated

SQL> commit;
Commit complete

SQL>  select rowid from gh_range_example t where t.range_date = trunc(sysdate);
ROWID
--------------------------------------------------------------------------------
AAADfMAAGAAACU6AAA

SQL> 


行rowid发生变化,代表索引也是重新变化

如果遇到ORA-14402: updating partition key column would cause a partition change
开启 row movement;
目录
相关文章
|
存储 缓存 安全
分区表 MBR| 学习笔记
快速学习分区表 MBR
分区表 MBR| 学习笔记
|
OLAP 数据库 索引
分区表
分区表
168 0
|
关系型数据库 PostgreSQL 索引
|
SQL 测试技术 Go
|
SQL 索引 数据库
|
索引 SQL
对已存在的表进行分区时遇到的坑
在网上能够找到很多关于表分区的资料,可是大部分都是在介绍如何给一个新表创建表分区,而对已存在的表如何做分区的文章相对比较少,因此一些坑没有被“挖掘”出来或者“曝光率”比较低。
1554 0
|
测试技术 索引
非分区表是否可以创建分区索引?
有同事问一个问题, 一张非分区表,是否可以创建分区索引? 答案是可以,但分区索引的类型有限制。 MOS这篇文章给出了答案,以及一些例子,What Is The Global Partitioned Index On Non Partitioned Table? (文档 ID 1612359.1)。
1149 0