您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

Oralce EXCHANGE PARTITION 的示例

2024/4/25 22:14:55发布7次查看
--创建分区表create table test(x int,y int) partition by range(x) ( partition part0 values less than (100), partition p
--创建分区表
create table test(x int,y int)
 partition by range(x)
 (
 partition part0 values less than (100),
 partition part1 values less than (maxvalue)
);
--创建索引
create index idx_test_x on test(x) local;
create index idx_test_y on test(y);
--创建交换堆表
create table tmp_test(x int, y int);
--创建索引
create index idx_tmp_test_x on tmp_test(x);
--初始化分区表数据
 begin
 for i in 1..200 loop
 insert into test values(i,i-1);
 end loop;
 commit;
 end;
--初始化堆表数据
begin
for i in 1..50 loop
insert into tmp_test values(i,i-1);
end loop;
commit;
end;
--查看表的元数据
sql> select object_name,
  2        subobject_name,
  3        object_id,
  4        data_object_id,
  5        object_type,
  6        status
  7    from dba_objects
  8  where object_name in ('test', 'tmp_test')
  9  order by object_name;
object_name          subobject_name        object_id data_object_id object_type        status
-------------------- -------------------- ---------- -------------- ------------------- -------
test                part1                    60040          60040 table partition    valid
test                part0                    60039          60039 table partition    valid
test                                                60038                table              valid
tmp_test                                        60045          60045 table              valid
----索引的元数据
sql> select object_name,
  2  subobject_name,
  3  object_id,
  4  data_object_id,
  5  object_type,
  6  status
  7  from dba_objects
  8  where object_name in ('idx_test_x', 'idx_test_y','idx_tmp_test_x');
object_name          subobject_name        object_id data_object_id object_type        status
-------------------- -------------------- ---------- -------------- ------------------- ------
idx_tmp_test_x                                60047          60047 index              valid
idx_test_y                                    60044          60044 index              valid
idx_test_x                                    60041                index              valid
idx_test_x          part0                    60042          60042 index partition    valid
idx_test_x          part1                    60043          60043 index partition    valid
--交换表及已有的索引
alter table test exchange partition part0 with table tmp_test including indexes;
--查看数据已交换成功
sql> select count(*) from tmp_test;
count(*)
----------
        99
sql> select count(*) from test partition(part0);
count(*)
----------
        50
--查看表元数据的变化,可以得出结论exchange 只是交换的是数据段编号
sql> select object_name,
  2        subobject_name,
  3        object_id,
  4        data_object_id,
  5        object_type,
  6        status
  7    from dba_objects
  8  where object_name in ('test', 'tmp_test')
  9  order by object_name;
object_name          subobject_name        object_id data_object_id object_type        status
-------------------- -------------------- ---------- -------------- ------------------- -------
test                part1                    60040          60040 table partition    valid
test                part0                    60039          60045 table partition    valid
test                                                  60038                    table              valid
tmp_test                                        60045          60039 table              valid
--查看索引元数据的变化,可以看出index的变化:交换了段编号
sql> select object_name,
  2  subobject_name,
  3  object_id,
  4  data_object_id,
  5  object_type,
  6  status
  7  from dba_objects
  8  where object_name in ('idx_test_x', 'idx_test_y','idx_tmp_test_x','idx_tmp_test_y');
object_name          subobject_name        object_id data_object_id object_type        status
-------------------- -------------------- ---------- -------------- ------------------- -------
idx_tmp_test_x                                  60047          60042  index              valid
idx_test_y                                          60044          60044  index              valid
idx_test_x                                          60041                      index              valid
idx_test_x          part0                    60042          60047 index partition    valid
idx_test_x          part1                    60043          60043 index partition    valid
--查看索引的状态
--发现分区表test的global索引已不可用,需要重新创建,local的分区索引显示为n/a,我们需要查询另外一个视图来确定是否可用
--经测试在交换分区的时候 加上 update indexes 则可以避免global索引失效的情况。
sql> select index_name,table_name,status from dba_indexes where table_name in ('test','tmp_test');
index_name                    table_name                    status
------------------------------ ------------------------------ --------
idx_test_x                    test                          n/a
idx_test_y                    test                          unusable
idx_tmp_test_x                tmp_test                      valid
--local分区索引仍然是有效的
sql>  select index_name,status from user_ind_partitions where index_name in ('idx_test_x');
index_name                    status
------------------------------ --------
idx_test_x                    usable
idx_test_x                    usable
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录