oracle交换分区(exchange partition)提供了一种方式,让你在表与表或分区与分区之间迁移数据,由于其采用了更改数据字典的方式,几乎不涉及io操作,因此效率极高。exchange partition适用于所有分区格式,可以将数据从分区表迁移到非分区表,也可以从非分区表迁移至分区表,但不支持range partition 和range partition之间交换。探究测试一:创建本地索引SQL>CREATE TABLE ou_a (a INTEGER) PARTITION BY RANGE(a) (PARTITION p1 VALUES LESS THAN (5), PARTITION p2 VALUES LESS THAN (6), PARTITION p3 VALUES LESS THAN (7), PARTITION p4 VALUES LESS THAN (8), PARTITION p5 VALUES LESS THAN (9) );SQL> insert into ou_a values(5);SQL> insert into ou_a values(6);SQL> insert into ou_a values(7);SQL> insert into ou_a values(8);SQL> commit;SQL> create index index_ou on ou_a(a) local; SQL> create table ou_temp (a integer); SQL> insert into ou_temp values(8); SQL> commit; SQL> alter table ou_a exchange partition p2 with table ou_temp; ORA-14099: 未对指定分区限定表中的所有行 此处说明当交换分区表时,临时表的数据分区键值超出分区的临界值时会报ORA-14099错误,如需要屏蔽该错误,则需使用Without validation,如下:SQL> alter table ou_a exchange partition p2 with table ou_temp without validation; Table alteredSQL> select a.Partition_Name, a.status from User_Ind_Partitions a where a.Index_Name = 'INDEX_OU'; PARTITION_NAME STATUS ------------------------------ -------- P1 USABLE P2 UNUSABLE P3 USABLE P4 USABLE此时查看索引状态会发现,交换分区后本地索引在分区p2里失效,变为不可用。SQL> select * from ou_a where a=8; A -------------------- 8 SQL> select * from ou_a; A -------------------- 8 6 7 8当索引失效时,查看全表是可以查到两条为8的数据,而走where a=8时确只能查到一条数据。这是因为where a=8时,oracle通过分区修剪去找分区p5,而此时因为8的两个值一个存储在p2一个存储在p5,所以说当使用without validation时会造成很多无效的数据,同时亦会造成索引失效的问题。那如何保证索引不失效勒,oracle提供了一个参数including indexes,可保证交换分区后索引是有效的。如下:SQL> alter table ou_a exchange partition p2 with table ou_temp including indexes without validation;SQL> select status from User_Ind_Partitions a where a.Index_Name = 'INDEX_OU'; STATUS -------- USABLE USABLE USABLE USABLE USABLE此时发现索引交换过来了,说明including indexes可以将索引交换过来。以上实验 的知识点1、exchange partition,交换分区是分区表与表之间的交换,不支持分区表与分区表之间的交换,可做实验验证。同时是数据的迁移过程。2、without validation,可避免ORA-14099错误,但需注意的是有可能会造成索引失效问题。3、including indexes,交换分区时可将索引相互交换,可用来避免索引的失效。探究测试一:创建全局索引SQL> create table ou_part (a integer) partition by range(a) ( PARTITION OU_PART_01 VALUES less than(10) tablespace TS_OU_01, partition ou_part_02 values less than(20) tablespace ts_ou_02, partition ou_part_03 values less than(30) tablespace ts_ou_03, partition ou_part_04 values less than(40) tablespace ts_ou_04 );SQL>insert into ou_part values (1);SQL>insert into ou_part values (2);SQL>insert into ou_part values (3);SQL>insert into ou_part values (11);SQL>insert into ou_part values (12);SQL>insert into ou_part values (13);SQL>insert into ou_part values (21);SQL>insert into ou_part values (22);SQL>insert into ou_part values (23);SQL>insert into ou_part values (31);SQL>insert into ou_part values (32);SQL>insert into ou_part values (33);SQL> commit;SQL> create index index_glo on ou_part (a) Global;SQL> create table t (a integer);SQL> insert into t values(51);SQL> commit;SQL> alter table ou_part exchange partition OU_PART_01 with table t without validation;SQL> select status from User_Indexes a where a.index_name = 'INDEX_GLO' ; STATUS -------- UNUSABLE此时发现索引已失效,针对本地索引失效后并不会影响其他分区索引的查询,那全局索引失效后,会有什么后果勒?SQL> select * from ou_part where a=11; ORA-01502: 索引 'SCOTT.INDEX_GLO' 或这类索引的分区处于不可用状态此时如果去查询表,则会报ORA-01502错误,Oracle针对索引可不用状态提供了一参数skip_unusable_indexes,默认值为false,表示是否跳过unusable索引。当skip_unusable_indexes=true时,oracle Optimizer会跳过索引,不检查索引的状态。如下所示:SQL> alter session set skip_unusable_indexes=true; SQL> select * from ou_part where a=11; A --------------------------------------- 11 此时Oracle没有报ORA-01502错误。此实验知识点:1、交换分区会使全局索引失效2、当全局索引失效且session set skip_unusable_indexes=false时,查询时会报ORA-01502错误。
oracle交换分区所引起的索引失效问题探究测试
来源:这里教程网
时间:2026-03-03 16:30:24
作者:
编辑推荐:
- oracle交换分区所引起的索引失效问题探究测试03-03
- 【SQL】Oracle BLOB 批量导入导出图片到文件夹相关语句03-03
- 在真正的linux环境测试: SCOTT@book> @ ver103-03
- Select vs Assign – How To Assign PLSQL Variables.txt03-03
- 50 = 0x96 4.如果看jonathan Lewis中文版本P60:03-03
- 数据库常用的事务隔离级别都有哪些?都是什么原理?03-03
- 检查联机后的43 号文件信息:alter database datafile 43 online;03-03
- Oracle12c更改数据库字符集为ZHS16GBK03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 数据库常用的事务隔离级别都有哪些?都是什么原理?
数据库常用的事务隔离级别都有哪些?都是什么原理?
26-03-03 - 检查联机后的43 号文件信息:alter database datafile 43 online;
- DG Broker学习5(管理数据保护模式)
DG Broker学习5(管理数据保护模式)
26-03-03 - DG Broker学习1(管理DG Broker Configuration)
- Oracle SGA大小调整策略
Oracle SGA大小调整策略
26-03-03 - Oracle恢复方法(表、包)
Oracle恢复方法(表、包)
26-03-03 - 使用PL/SQL Developer修改Oracle数据库的表
使用PL/SQL Developer修改Oracle数据库的表
26-03-03 - Linux服务器shell脚本调用sql脚本
Linux服务器shell脚本调用sql脚本
26-03-03 - windows 下 文件内容清理且不删除-拾亿
windows 下 文件内容清理且不删除-拾亿
26-03-03 - Oracle 19c rac 安装补丁 Patch 32226239
Oracle 19c rac 安装补丁 Patch 32226239
26-03-03
