设为首页 收藏本站
查看: 1133|回复: 0

[经验分享] 用exchange partition和split partition将表分区。

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-6-26 08:50:02 | 显示全部楼层 |阅读模式


本文是以下面文章为基础做练习测试:

http://www.oracle-base.com/artic ... hange-partition.php

这个方法更适合在生产环境中将普通表变为分区表。

主要方法有分区转换与分区分裂。
一.创建一个模拟环境

1. 创建一个小表

SQL> create table lookup(

id number(10),

description varchar2(50)

);

加主键

SQL> alter table lookup add ( constraint lookup_pk primary key(id));

插入数据

SQL> INSERT INTO lookup (id, description) VALUES (1, 'ONE');

INSERT INTO lookup (id, description) VALUES (2, 'TWO');

INSERT INTO lookup (id, description) VALUES (3, 'THREE');



2.创建一个大表

SQL> CREATE TABLE big_table (

id  NUMBER(10),

created_date  DATE,

lookup_id  NUMBER(10),

data  VARCHAR2(50)

);

增加数据:



SQL> declare

t_lookup_id lookup.id%TYPE;

t_create_date date;

begin

for i in 1 .. 1000000 loop

if mod(i,3)=0 then

t_create_date:=add_months(sysdate,-24);

t_lookup_id :=2;

elsif mod(i,2)=0 then

t_create_date:=add_months(sysdate,-12);

t_lookup_id :=1;

else

t_create_date:=sysdate;

t_lookup_id:=3;

end if;

INSERT INTO big_table(id, created_date, lookup_id, data) VALUES (i, t_create_date, t_lookup_id, 'This is some data for ' || i);

end loop;

commit;

end;

/

加主键

ALTER TABLE big_table ADD (

  CONSTRAINT big_table_pk PRIMARY KEY (id)

);

加外键

ALTER TABLE big_table ADD (

  CONSTRAINT bita_look_fk

  FOREIGN KEY (lookup_id)

  REFERENCES lookup(id)

);

加索引

CREATE INDEX bita_created_date_i ON big_table(created_date);

CREATE INDEX bita_look_fk_i ON big_table(lookup_id);



收集表信息

EXEC DBMS_STATS.gather_table_stats(USER, 'LOOKUP', cascade => TRUE);

EXEC DBMS_STATS.gather_table_stats(USER, 'BIG_TABLE', cascade => TRUE);
二.创建一个分区的目标表。

SQL> create table big_table2 (

  2  id number(10),

  3  created_date date,

  4  lookup_id number(10),

  5  data varchar2(50)

  6  )

  7  partition by range (created_date)

  8  (partition big_table_2013 values less than (maxvalue));

增加主键:

SQL> alter table big_table2 add (

  2  constraint big_table_pk2 primary key(id)

  3  );

增加相应的索引

SQL> create index bita_created_date_i2 on big_table2(created_date) local;

SQL> create index bita_look_fk_i2 on big_table2(lookup_id) local;



增加外键

SQL>

  1  alter table big_table2 add(

  2  constraint bita_look_fk2

  3  foreign key(lookup_id)

  4* references lookup(id))

SQL> /
三.分区交换(EXCHANGE PARTITION)

SQL> alter table big_table2

  2  exchange partition big_table_2013

  3  with table big_table

  4  without validation

  5  update global indexes;

SQL> drop table big_table;

SQL> rename big_table2 to big_table;

SQL> alter table big_table rename constraint big_table_pk2 to big_table_pk;

SQL> alter table big_table rename constraint bita_look_fk2 to bita_look_fk;

SQL> alter index big_table_pk2 rename to big_table_pk;

SQL> alter index bita_look_fk_i2 rename to bita_look_fk_i;

SQL> alter index bita_created_date_i2 rename to bita_created_date_i;
四.分区分裂(SPLIT PARTITION)

SQL> alter table big_table

  2  split partition big_table_2013 at(to_date('31-dec-2010 23:59:59','DD-MON-YYYY HH24:MI:SS'))

  3  into (partition big_table_2010,

  4  partition big_table_2013)

  5  update global indexes;



SQL> alter table big_table

  2  split partition big_table_2010 at(to_date('31-dec-2008 23:59:59','DD-MON-YYYY HH24:MI:SS'))

  3  into (partition big_table_2008,

  4  partition big_table_2010)

  5  update global indexes;

SQL> alter table big_table

  2  split partition big_table_2013 at(to_date('31-dec-2012 23:59:59','DD-MON-YYYY HH24:MI:SS'))

into (partition big_table_2012,

partition big_table_2013)

update global indexes;



SQL> exec dbms_stats.gather_table_stats(user,'big_table',cascade=>true);
五.进行检查:

SQL> select partitioned from user_tables

  2  where table_name='BIG_TABLE';



PAR

---

YES

SQL> select partition_name,num_rows from user_tab_partitions

where table_name='BIG_TABLE';  2



PARTITION_NAME                   NUM_ROWS

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

BIG_TABLE_2008                          0

BIG_TABLE_2010                          0

BIG_TABLE_2012                     666667

BIG_TABLE_2013                     333333





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-21037-1-1.html 上篇帖子: 解决 Exchange2013提示“出现意外错误,无法处理您的请求”... 下篇帖子: 在Exchange 2013 OWA登录页面中修改密码 exchange
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表