交换分区

本文介绍如何在Oracle数据库中创建范围分区表,并在不同分区插入数据。演示了创建全局索引及验证其有效性过程。同时展示了创建普通表、插入数据的方法,并通过交换分区操作实现数据迁移,最后检查索引状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建测试用分区表test_par

——选择范围分区


点击(此处)折叠或打开

  1. SQL> create table test_par
  2.   2 (
  3.   3 nid number(10) constraint pk_test_p primary key,
  4.   4 idcard varchar2(18),
  5.   5 pdd date not null
  6.   6 )
  7.   7 partition by range (pdd)
  8.   8 (
  9.   9 partition par_2000 values less than (to_date('2001-01-01','yyyy-mm-dd')),
  10.  10 partition par_2001 values less than (to_date('2002-01-01','yyyy-mm-dd')),
  11.  11 partition par_2002 values less than (to_date('2003-01-01','yyyy-mm-dd')),
  12.  12 partition part_maxvalue values less than (maxvalue)
  13.  13 );

  14. Table created.
  15. SQL>



创建全局索引


点击(此处)折叠或打开

  1. SQL> create index idx_test_par on test_par(idcard);

  2. Index created.

  3. SQL>



在不同的分区中插入测试用的数据


点击(此处)折叠或打开

  1. SQL> insert into test_par values(500,'2000',to_date('20000101','yyyymmdd'));

  2. 1 row created.

  3. SQL> insert into test_par values(501,'2001',to_date('20010201','yyyymmdd'));

  4. 1 row created.

  5. SQL> insert into test_par values(502,'2002',to_date('20020301','yyyymmdd'));

  6. 1 row created.

  7. SQL>
  8. SQL> commit;

  9. Commit complete.

  10. SQL>



查看索引,当前索引有效


点击(此处)折叠或打开

  1. SQL> select INDEX_NAME,STATUS from user_indexes where index_name='IDX_TEST_PAR';


INDEX_NAME                     STATUS

----------------------------- --------

IDX_TEST_PAR                   VALID


创建与分区表表结构相同的测试用表test,用于测试交换分区


点击(此处)折叠或打开

  1. SQL> create table test
  2.   2 (
  3.   3 nid number(10) constraint pk_test primary key,
  4.   4 idcard varchar2(18),
  5.   5 pdd date not null
  6.   6 );

  7. Table created.

  8. SQL>


向测试用test中插入数据

——数据范围选择日期为分区表中的par_2002分区中的日期范围


点击(此处)折叠或打开

  1. SQL> insert into test select rownum,rpad(rownum,18,'0'),to_date('20020101','yyyymmdd')+rownum from dual connect by rownum<=100;

  2. 100 rows created.

  3. SQL> commit;

  4. Commit complete.

  5. SQL>


通过查看插入数据最大值和最小值,确认数据是否符合par_2002分区范围

点击(此处)折叠或打开

  1. SQL> select min(pdd),max(pdd) from test;

MIN(PDD)  MAX(PDD)

--------- ---------

02-JAN-02 11-APR-02


分别确认test表和分区表test_par表的数据总数


点击(此处)折叠或打开

  1. SQL> select count(*) from test;


  COUNT(*)

----------

       100


点击(此处)折叠或打开

  1. SQL> select count(*) from test_par;


  COUNT(*)

----------

         3

SQL>

交换分区

——交换par_2002分区


点击(此处)折叠或打开

  1. SQL> alter table test_par exchange partition par_2002 with table test;

  2. Table altered.

  3. SQL>


验证

——查看test表中的数据,显示为之前par_2002分区中的一条记录


点击(此处)折叠或打开

  1. SQL> select * from test;

       NID IDCARD             PDD

--------- --------------- ---------

       502 2002               01-MAR-02



——查看test_par中已经有102条记录,其中单独查看par_2002分区数据为100条


点击(此处)折叠或打开

  1. SQL> select count(*) from test_par;

  COUNT(*)

----------

       102


点击(此处)折叠或打开

  1. SQL> select count(*) from test_par partition (par_2002);

  COUNT(*)

----------

       100



注:交换分区后,全局索引会失效


点击(此处)折叠或打开

  1. SQL> select INDEX_NAME,STATUS from user_indexes where index_name='IDX_TEST_PAR';


INDEX_NAME                     STATUS

----------------------------- --------

IDX_TEST_PAR                   UNUSABLE


——如果使用的是本地索引,则交换的分区索引失效,其它正常

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31399196/viewspace-2126132/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31399196/viewspace-2126132/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值