Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6548473
  • 博文数量: 1005
  • 博客积分: 8199
  • 博客等级: 中将
  • 技术积分: 13071
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-25 20:19
个人简介

脚踏实地、勇往直前!

文章分类

全部博文(1005)

文章存档

2020年(2)

2019年(93)

2018年(208)

2017年(81)

2016年(49)

2015年(50)

2014年(170)

2013年(52)

2012年(177)

2011年(93)

2010年(30)

分类: Oracle

2011-09-06 08:50:34

Exchange分区的时候,同时可以交换索引,分区表的索引必须是本地索引.
-- 创建分区表并初始话数据
  1. Create Table tb_hxl_hash
  2. (
  3.  Id Number Not Null,
  4.  cnt Number
  5. )
  6. Partition By Hash(Id)
  7. (
  8.   Partition p_h1,
  9.   Partition p_h2,
  10.   Partition p_h3,
  11.   Partition p_h4,
  12.   Partition p_h5,
  13.   Partition p_h6,
  14.   Partition p_h7,
  15.   Partition p_h8
  16. );


  17. Declare
  18. Begin
  19.   For i In 1 .. 100000 Loop
  20.     Insert Into Tb_Hxl_Hash Values (i, i * 10);
  21.   End Loop;
  22.   Commit;
  23. End;
  24. /


  25. Create Unique Index idx_Tb_Hxl_Hash_u1 On Tb_Hxl_Hash(Id);


  26. Create Table Tb_Hxl_Hash_mid
  27. As
  28. Select * From Tb_Hxl_Hash Where 1=2;


  29. Create Unique Index idx_Tb_Hxl_Hash_mid_u1
  30. On Tb_Hxl_Hash_mid(Id);


  31. Create Unique Index idx_Tb_Hxl_Hash_u1 On Tb_Hxl_Hash(Id);

-- 全局索引不能交换分区索引

  1. Alter Table Tb_Hxl_Hash Exchange Partition p_h1
  2. With Table Tb_Hxl_Hash_mid Including Indexes;

  3.                 *
  4. ERROR at line 2:
  5. ORA-14098: index mismatch for tables in ALTER TABLE EXCHANGE PARTITION

--创建本地索引

  1. Drop Index idx_Tb_Hxl_Hash_u1;
  2. Create Unique Index idx_Tb_Hxl_Hash_u1 On Tb_Hxl_Hash(Id)
  3. Local;
-- 交换前各自索引大小

 

  1. SQL> Select A.Bytes, a.segment_name
  2. 2 From Dba_Segments a
  3. 3 Where A.Segment_Name In ('IDX_TB_HXL_HASH__MID_U1')
  4. 4 Or (A.Segment_Name = 'IDX_TB_HXL_HASH_U1' And
  5. 5 A.Partition_Name = 'P_H1')
  6. 6 /
  7. BYTES SEGMENT_NAME
  8. ------- ------------------------------
  9. 65536 IDX_TB_HXL_HASH__MID_U1
  10. 262144 IDX_TB_HXL_HASH_U1

-- 交换本地索引

  1. Alter Table Tb_Hxl_Hash Exchange Partition p_h1
  2. With Table Tb_Hxl_Hash_mid Including Indexes;

--交换后各自索引的大小,从大小改变可以发现两个表之间的索引已经交换

 

  1. SQL> Select A.Bytes, a.segment_name
  2. 2 From Dba_Segments a
  3. 3 Where A.Segment_Name In ('IDX_TB_HXL_HASH__MID_U1')
  4. 4 Or (A.Segment_Name = 'IDX_TB_HXL_HASH_U1' And
  5. 5 A.Partition_Name = 'P_H1')
  6. 6 /
  7. BYTES SEGMENT_NAME
  8. ------- ------------------------------
  9. 262144 IDX_TB_HXL_HASH__MID_U1
  10. 65536 IDX_TB_HXL_HASH_U1

交换子分区

  1. Alter Table tb_hxl_user_mid
  2. Exchange subpartition P_20110518_P_01
  3. With Table tb_hxl_user_mid_0518;

 

 

阅读(5225) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~