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

默认情况下,oracle的分区表对于分区字段是不允许进行update操作的,如果有对分区字段行进update,就会报错——ORA-14402: 更新分区关键字列将导致分区的更改。這種情況可以通過開啟表的行移動來允許對分區字段的update 操作:
      alter table xxx enable row movement;
     之後就可以成功update 分區字段,同時因為行的物理移動,導致rowid發生變化,對應列值的索引葉塊 會標記為刪除,插入新的葉塊,重定義完分區后,記得關閉行移動。
     alter table xxx disable row movement;

下面三種情況需要開啟row movement
      1.更新Partition Key
        分区表某一行更新时,如果更新的是分区列,并且更新后的列值不属于原来的这个分区,如果开启了这个选项,就会把这行从这个分区中delete掉,并加到更新后所属的分区。相当于一个隐式的delete+insert,但是不会触发insert/delete触发器。如果没有开启这个选项,就会在更新时报错ORA-14402;
      这一操作产生影响的特殊之处在于这是个DML操作,是和online transaction密切相关。对于这样一个UPDATE,实际上分为3步:先从原有分区将数据删除;将原数据转移到新分区上;更新数据。
      其影响就在于以下几个方面:
一个UPDATE被分解为DELET、INSERT、UPDATE三个操作,增加了性能负担。其中,DELETE的查询条件与原UPDATE的查询条件相同,新的UPDATE的查询条件是基于INSERT生成的新的ROWID,相应的Redo Log、Undo Log会增加;
      如果Update语句还涉及到了Local Index的字段的话,新、旧2个分区上的Local Index都要被更新。
      还有一点,Row Movement会和域索引(Domain Index)产生冲突:如果表上定义了域索引,开启Row Movement就会失败;反之亦然。

2. Flaskback table to 某時間
         Flashback Table实际是通过Flashback Query将表中数据进行了一次删除、插入操作,因此ROWID会发生变化
     3. Shrink Segment
         Shrink Segment能帮助我们压缩数据段、整理数据碎片、降低高水位,以提高性能、节省空间。

有必要說明一下,row movement并不是行遷移,最大的區別是行遷移的rowid是不變的,行遷移是update 行記錄時,數據塊沒有足夠的空閒容納數據行,Oracle將此行移到其他數據塊,同時保留此行的rowid不變,并在原數據塊建一指針指向新的行位置。這種情況下,讀取一行數據就會訪問2個數據塊,增加IO,導致性能下降。

如果直接創建主鍵,使用的global index,當某分區被drop后,主鍵會失效,

ALTER TABLE PHAECDA1.HCPSGLSINFOPZOW_NEW ADD CONSTRAINT PK_STAMP PRIMARY KEY(T_STAMP) tablespace xx;

改為 local index,但不包含分區段,報錯

ALTER TABLE PHAECDA1.HCPSGLSINFOPZOW_NEW ADD CONSTRAINT PK_STAMP PRIMARY KEY(T_STAMP) using index local tablespace  xxx;

ORA-14039: partitioning columns must form a subset of key columns of a UNIQUE

ORA-14039: 分区列必须构成 UNIQUE 索引的关键字列子集

Local index ,主鍵+分區鍵  作為新的主鍵,自動創建分區index ,index會按分區段Partition 分區到table的分區表空間

ALTER TABLE PHAECDA1.HCPSGLSINFOPZOW_NEW ADD CONSTRAINT PK_STAMP PRIMARY KEY(T_STAMP,CLDATE) USING INDEX LOCAL;

先創建index ,再創建主鍵,

當然,主鍵也可直接作為分區段

时间: 2024-08-24 03:22:24

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

ORA-14402:更新分区关键字列将导致分区更改(分区表注意)

建立完分区表后一定要和开发确认一点,就是是否会修改分区字段.因为update分区字段到其他分区时候,会报错.解决办法:开启表的行转移功能 alter table XX enable row movement 这样在update以后,会在老分区删除数据,新分区插入数据.

如何更新分区关键字

如何更新分区关键字 [原创 2008-8-7 10:51:14]  字号:大 中 小 为提高查询速度,经常为表建分区,但如何修改表中某条记录的分区呢? 如表A中,有个分区关键字为area,当update时,会报错: Ora-14402 更新分区关键字列将导致分区的更改. 解决办法如下: 1.执行如下命令,使表A允许记录转移到其他分区: alter table A enable row movement; 2.进行修改,就不会报错了. select * from A where emid='001

HBase Rowkey的散列与预分区设计

转自:http://www.cnblogs.com/bdifn/p/3801737.html 问题导读:1.如何防止热点?2.如何预分区?扩展:为什么会产生热点存储? HBase中,表会被划分为1...n个Region,被托管在RegionServer中.Region二个重要的属性:StartKey与EndKey表示这个Region维护的rowKey范围,当我们要读/写数据时,如果rowKey落在某个start-end key范围内,那么就会定位到目标region并且读/写到相关的数据.简单地说

Oracle 11g虚拟列上建分区

在Oracle 11g上,可以在虚拟列上做分区,这个特性还比较有用,下面来做一个测试: SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production PL/SQL Rele

仿百度壁纸客户端(五)——实现搜索动画GestureDetector手势识别,动态更新搜索关键字

仿百度壁纸客户端(五)--实现搜索动画GestureDetector手势识别,动态更新搜索关键字 我们重新来看看这个效果 想实现这个逻辑,其实就是监听两个View的显示隐藏加上一点小动画,所以我们在布局上是这样的 search_fragment.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.c

SQL Server分区键列必须是主键一部分

SQL Server分区键列必须是主键一部分. 必须把分区列包含在主键/唯一约束/唯一索引的键列中. USE tempdb GO -- 测试表 CREATE TABLE dbo.tb( id int, CONSTRAINT PK_id PRIMARY KEY CLUSTERED( id) ) INSERT dbo.tb SELECT 1 UNION ALL SELECT 10 GO -- 切换为分区表 -- 分区函数 CREATE PARTITION FUNCTION PF_test(int)

Atitit.分区对索引的影响&#160;分区索引和全局索引&#160;attilax总结

Atitit.分区对索引的影响 分区索引和全局索引 attilax总结 1. 分区的好处1 2. 分区键:2 3. 分区的建议:2 4. 分区索引和全局索引:2 5. 全局索引就是在全表上创建索引, 3 6. 总结4 7. refer4 1. 分区的好处 在一个表的数据超过过2000万条或占用2G空间时,建议建立分区表 分区使得数据管理操作如数据装载.索引建立和重建.备份和恢复等在分区级别上完成,这比在表级完成操作要明显的节省时间: 分区可以提高性能,在很多情况下,查询可以通过扫描某个分区来完成

(转)硬盘分区备忘(主分区,扩展分区和逻辑分区)以及Linux硬盘分区工具parted 介绍

场景:最近在学习Linux的基础知识,不可避免的设计到Linux的磁盘分区,以前做过总结,但是那种总结就是复制别人的文章,总结完就不想看第二遍,所以很容易就遗忘了!清楚明白的理解分区后,我就可以在自己的电脑上随意操作了! 1 主分区 我们知道硬盘的第一个扇区也就是第0扇区是用来存放主引导记录(MBR)的,因此也称MBR扇区. 一个扇区是512字节,因此MBR的大小也是512字节,其具体数据结构是:446个字节的引导代码.64个字节的分区表及2个字节的签名值"55AA". 由于MBR的分

Oracle Spatial分区应用研究之四:不同分区粒度+全局空间索引效率对比

1.实验目的 在实验之前先回答这样一个问题--对同一份数据使用不同的分区粒度,但均创建全局空间索引,问:它们的全局空间索引一致吗? 怎样算是一致的呢?R-TREE的树结构一致算一致吗?空间索引条目数及大小一致算一致吗?严格的一致,当然是指索引条目数.索引大小.R-TREE树结构完全一致.但经过分析发现,它们的索引条目数.R-TREE树结构是完全一致的,但索引大小有微小的差别.但我们仍然认为它们的全局索引是一致的,这是因为,R-TREE树结构才是决定空间索引是否一致的关键. 基于上述前提条件,思考