使用在线重定义方式将普通表转换成分区表
Jun 07, 2016 pm 03:28 PM1、创建一张普通表(源表:li.p_table) create table li.p_table(id_n number,date_n date); 2、向源表插入数据 insert into li.p_table values (1,to_date(2013-01-02 01:01:01,yyyy-mm-dd hh24:mi:ss)); insert into li.p_table values (2,to_date(2013-0
1、创建一张普通表(源表:li.p_table)
create table li.p_table(id_n number,date_n date); |
2、向源表插入数据
insert into li.p_table values (1,to_date('2013-01-02 01:01:01','yyyy-mm-dd hh24:mi:ss')); insert into li.p_table values (2,to_date('2013-02-02 01:01:01','yyyy-mm-dd hh24:mi:ss')); insert into li.p_table values (3,to_date('2013-03-02 01:01:01','yyyy-mm-dd hh24:mi:ss')); insert into li.p_table values (4,to_date('2013-04-02 01:01:01','yyyy-mm-dd hh24:mi:ss')); insert into li.p_table values (5,to_date('2013-05-02 01:01:01','yyyy-mm-dd hh24:mi:ss')); insert into li.p_table values (6,to_date('2013-06-02 01:01:01','yyyy-mm-dd hh24:mi:ss')); insert into li.p_table values (7,to_date('2013-07-02 01:01:01','yyyy-mm-dd hh24:mi:ss')); insert into li.p_table values (8,to_date('2013-08-02 01:01:01','yyyy-mm-dd hh24:mi:ss')); insert into li.p_table values (9,to_date('2013-09-02 01:01:01','yyyy-mm-dd hh24:mi:ss')); insert into li.p_table values (10,to_date('2013-10-02 01:01:01','yyyy-mm-dd hh24:mi:ss')); insert into li.p_table values (11,to_date('2013-11-02 01:01:01','yyyy-mm-dd hh24:mi:ss')); insert into li.p_table values (12,to_date('2013-12-02 01:01:01','yyyy-mm-dd hh24:mi:ss')); insert into li.p_table values (13,to_date('2014-01-02 01:01:01','yyyy-mm-dd hh24:mi:ss')); insert into li.p_table values (14,to_date('2014-02-02 01:01:01','yyyy-mm-dd hh24:mi:ss')); commit; |
3、创建一张临时分区表
创建的临时分区表的表结构必须与源表保持一致
create table li.p_partion_table(id_n number,date_n date) PARTITION BY RANGE (date_n) (PARTITION P_201301 VALUES LESS THAN (TO_DATE('2013-02-01 00:00:00','yyyy-mm-dd hh24:mi:ss')), PARTITION P_201302 VALUES LESS THAN (TO_DATE('2013-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss')), PARTITION P_201303 VALUES LESS THAN (TO_DATE('2013-04-01 00:00:00','yyyy-mm-dd hh24:mi:ss')), PARTITION P_201304 VALUES LESS THAN (TO_DATE('2013-05-01 00:00:00','yyyy-mm-dd hh24:mi:ss')), PARTITION P_201305 VALUES LESS THAN (TO_DATE('2013-06-01 00:00:00','yyyy-mm-dd hh24:mi:ss')), PARTITION P_201306 VALUES LESS THAN (TO_DATE('2013-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss')), PARTITION P_201307 VALUES LESS THAN (TO_DATE('2013-08-01 00:00:00','yyyy-mm-dd hh24:mi:ss')), PARTITION P_201308 VALUES LESS THAN (TO_DATE('2013-09-01 00:00:00','yyyy-mm-dd hh24:mi:ss')), PARTITION P_201309 VALUES LESS THAN (TO_DATE('2013-10-01 00:00:00','yyyy-mm-dd hh24:mi:ss')), PARTITION P_201310 VALUES LESS THAN (TO_DATE('2013-11-01 00:00:00','yyyy-mm-dd hh24:mi:ss')), PARTITION P_201311 VALUES LESS THAN (TO_DATE('2013-12-01 00:00:00','yyyy-mm-dd hh24:mi:ss')), PARTITION P_201312 VALUES LESS THAN (TO_DATE('2014-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')), PARTITION P_201401 VALUES LESS THAN (TO_DATE('2014-02-01 00:00:00','yyyy-mm-dd hh24:mi:ss')), PARTITION MAXVALUE VALUES LESS THAN (MAXVALUE)); |
4、检测源表(li.p_table)是否可以在线重定义(以ROWID方式)
EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(UNAME=>'LI',TNAME=>'p_table',OPTIONS_FLAG=>DBMS_REDEFINITION.CONS_USE_ROWID); |
如果由于某种原因不能在线重定义,则会报出相应错误提示。
(1)对于无主键的表,在使用DBMS_REDEFINITION.CAN_REDEF_TABLE检测表是否可以在线重定义时,指定以ROWID方式确定数据的唯一行性
(2)对于有主键的表,在使用DBMS_REDEFINITION.CAN_REDEF_TABLE检测表是否可以在线重定义时,指定以cons_use_pk方式确定数据的唯一行性
5、将源表的数据交换到临时表
EXEC DBMS_REDEFINITION.START_REDEF_TABLE(UNAME=>'LI',ORIG_TABLE=>'p_table',INT_TABLE=>'p_partion_table',OPTIONS_FLAG=>DBMS_REDEFINITION.CONS_USE_ROWID); |
6、将源表转换成分区表
EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(UNAME=>'LI',ORIG_TABLE=>'p_table',INT_TABLE=>'p_partion_table'); |
7、查看源表(li.p_table)的分区状态
select table_owner,table_name,partition_name from dba_tab_partitions where table_name='P_TABLE' and table_owner='LI' 结果如下: LI P_TABLE MAXVALUE LI P_TABLE P_201301 LI P_TABLE P_201302 LI P_TABLE P_201303 LI P_TABLE P_201304 LI P_TABLE P_201305 LI P_TABLE P_201306 LI P_TABLE P_201307 LI P_TABLE P_201308 LI P_TABLE P_201309 LI P_TABLE P_201310 LI P_TABLE P_201311 LI P_TABLE P_201312 LI P_TABLE P_201401 |
以上说明,到此步为止,源表li.p_table已经从非分区表转换成了按月分区的时间范围分区表
8、查看源表(li.p_table)各个分区的数据分布情况
select * from li.p_table partition (P_201301); 结果: 1 2013/1/2 1:01:01 select * from li.p_table partition (P_201303); 结果: 3 2013/3/3 1:01:01 |
说明,已经重定义成了分区表,而且数据还全部按照分区范围进行了分区存放
9、查看临时表(li.p_partion_table)的分区状态
select table_owner,table_name,partition_name from dba_tab_partitions where table_name='P_PARTION_TABLE' and table_owner='LI' 结果:空 select owner,table_name,partitioned from dba_tables where table_name='P_PARTION_TABLE' and owner='LI'; 结果: LI P_PARTION_TABLE NO |
原本创建的临时分区表名,这时已经是一张非分区表了。
另有一点需要注意:SYS用户下的表,是不允许重定义的。
本文为“踩点”原作,转发请说明出处!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Apakah perisian crystaldiskmark? -Bagaimana menggunakan crystaldiskmark?

Bagaimana untuk memuat turun foobar2000? -Cara menggunakan foobar2000

Cara menggunakan aplikasi Baidu Netdisk

Cara menggunakan NetEase Mailbox Master

Apa itu Discuz? Definisi dan pengenalan fungsi Discuz

Tutorial BTCC: Bagaimana untuk mengikat dan menggunakan dompet MetaMask pada pertukaran BTCC?

Ajar anda cara menggunakan ciri lanjutan baharu iOS 17.4 'Perlindungan Peranti Dicuri'

Cara menggunakan Thunder untuk memuat turun pautan magnet
