在线重定义普通表转为分区表

一、重定义前准备工作
1、依赖对象
–select * from dba_dependencies where name=upper(‘ORDER’);
no rows selected
–select * from dba_dependencies where REFERENCED_NAME=‘BANK_PRE_PAY_ORDER’;
OWNER NAME TYPE REFERENCED_OWNER REFERENCED_NAME REFERENCED_TYPE REFERENCED_LINK DEPE


ANK PROC_ST_DATA_CHULI_LOOP PROCEDURE ANK BANK_PRE_PAY_ORDER TABLE HARD

select owner,object_name,object_type,status from dba_objects where object_name=‘PROC_ST_DATA_CHULI_LOOP’
OWNER OBJECT_NAME OBJECT_TYPE STATUS


ANK PROC_ST_DATA_CHULI_LOOP PROCEDURE VALID
2、权限
–select * from dba_tab_privs where table_name=upper(‘ORDER’);
no rows selected
3、所属表空间
确认有足够的空间去在线重定义
SQL> select segment_name,TABLESPACE_NAME from dba_segments where segment_name=‘ORDER’;

SEGMENT_NAME TABLESPACE_NAME


ORDER USERS

4、约束
SELECT constraint_name, table_name,CONSTRAINT_TYPE FROM dba_constraints WHERE table_name = upper(‘ORDER’);
CONSTRAINT_NAME TABLE_NAME C


SYS_C00158754 ORDER C
SYS_C00158518 ORDER C

CONSTRAINT_NAME TABLE_NAME C STATUS


SYS_C00183707 ORDER C ENABLED
SYS_C00183706 ORDER C ENABLED
二、开始重定义分区表
查询是否可以在线重定义
BEGIN
DBMS_REDEFINITION.CAN_REDEF_TABLE(‘ANK’,‘ORDER’,DBMS_REDEFINITION.CONS_USE_rowid);
END;
/

创建过渡表

select min(TRANS_TIME),max(TRANS_TIME) from ORDER;

SQL> select min(TRANS_TIME),max(TRANS_TIME) from ORDER;

MIN(TRANS_TIME) MAX(TRANS_TIME)


20150629 030629 20170903 120959

create table ORDER_TEST
partition by range(TRANS_TIME)
(
partition p1 values less than (‘20170301 000000’),
partition p2 values less than (‘20170401 000000’),
partition p3 values less than (‘20170501 000000’),
partition p4 values less than (‘20170601 000000’),
partition p5 values less than (‘20170701 000000’),
partition p6 values less than (‘20170801 000000’),
partition p7 values less than (‘20170901 000000’),
partition p8 values less than (‘20171001 000000’),
partition p9 values less than (‘20171101 000000’),
partition p10 values less than (‘20171201 000000’),
partition p11 values less than (‘20180101 000000’),
partition p12 values less than (‘20180201 000000’),
partition p13 values less than (‘20180301 000000’),
partition p14 values less than (‘20180401 000000’),
partition p15 values less than (‘20180501 000000’),
partition p16 values less than (‘20180601 000000’),
partition p17 values less than (‘20180701 000000’),
partition p18 values less than (‘20180801 000000’),
partition p19 values less than (‘20180901 000000’),
partition p20 values less than (‘20181001 000000’),
partition p21 values less than (‘20181101 000000’),
partition p22 values less than (‘20181201 000000’),
partition p23 values less than (‘20190101 000000’),
partition p24 values less than (‘20190201 000000’),
partition p25 values less than (‘20190301 000000’),
partition p26 values less than (‘20190401 000000’),
partition p27 values less than (‘20190501 000000’),
partition p28 values less than (‘20190601 000000’),
partition p29 values less than (‘20190701 000000’),
partition p30 values less than (‘20190801 000000’),
partition p31 values less than (‘20190901 000000’),
partition p32 values less than (‘20191001 000000’),
partition p33 values less than (‘20191101 000000’),
partition p34 values less than (‘20191201 000000’),
partition p35 values less than (‘20200101 000000’),
partition p36 values less than (‘20200201 000000’),
partition p37 values less than (‘20200301 000000’),
partition p38 values less than (‘20200401 000000’),
partition p39 values less than (‘20200501 000000’),
partition p40 values less than (‘20200601 000000’),
partition p41 values less than (‘20200701 000000’),
partition p42 values less than (‘20200801 000000’),
partition p43 values less than (‘20200901 000000’),
partition p44 values less than (‘20201001 000000’),
partition p45 values less than (‘20201101 000000’),
partition p46 values less than (‘20201201 000000’),
partition p47 values less than (‘20210101 000000’),
partition p48 values less than (‘20210201 000000’),
partition p49 values less than (‘20210301 000000’),
partition p50 values less than (‘20210401 000000’),
partition p51 values less than (‘20210501 000000’),
partition p52 values less than (‘20210601 000000’),
partition p53 values less than (‘20210701 000000’),
partition p54 values less than (‘20210801 000000’),
partition p55 values less than (‘20210901 000000’),
partition p56 values less than (‘20211001 000000’),
partition p57 values less than (‘20211101 000000’),
partition p58 values less than (‘20211201 000000’),
partition p59 values less than (‘20220101 000000’),
partition p60 values less than (‘20220201 000000’),
partition p61 values less than (‘20220301 000000’),
partition p62 values less than (‘20220401 000000’),
partition p63 values less than (‘20220501 000000’),
partition p64 values less than (‘20220601 000000’),
partition p65 values less than (‘20220701 000000’),
partition p66 values less than (‘20220801 000000’),
partition p67 values less than (‘20220901 000000’),
partition p68 values less than (‘20221001 000000’),
partition p69 values less than (‘20221101 000000’),
partition p70 values less than (‘20221201 000000’),
partition p71 values less than (‘20230101 000000’),
partition p72 values less than (‘20230201 000000’),
partition p73 values less than (‘20230301 000000’),
partition p74 values less than (‘20230401 000000’),
partition p75 values less than (‘20230501 000000’),
partition p76 values less than (‘20230601 000000’),
partition p77 values less than (‘20230701 000000’),
partition p78 values less than (‘20230801 000000’),
partition p79 values less than (‘20230901 000000’),
partition p80 values less than (‘20231001 000000’),
partition p81 values less than (‘20231101 000000’),
partition p82 values less than (‘20231201 000000’),
partition p83 values less than (‘20240101 000000’),
partition p84 values less than (‘20240201 000000’),
partition p85 values less than (‘20240301 000000’),
partition p86 values less than (‘20240401 000000’),
partition p87 values less than (‘20240501 000000’),
partition p88 values less than (‘20240601 000000’),
partition p89 values less than (‘20240701 000000’),
partition p90 values less than (‘20240801 000000’),
partition p91 values less than (‘20240901 000000’),
partition p92 values less than (‘20241001 000000’),
partition p93 values less than (‘20241101 000000’),
partition p94 values less than (‘20241201 000000’),
partition p95 values less than (‘20250101 000000’),
partition p96 values less than (‘20250201 000000’),
partition p97 values less than (‘20250301 000000’),
partition p98 values less than (‘20250401 000000’),
partition p99 values less than (‘20250501 000000’),
partition p100 values less than (‘20250601 000000’),
partition p_other values less than(maxvalue)
)
as select * from ORDER
where 1=2;

######创建分区索引
create index PAY_CUST_USER_ID_partition on ORDER_test(PAY_ACC_NO) local;
create index IMP_DATE_partition on ORDER_test(IMP_DATE) local;
create index TRADE_TYPE_partition on ORDER_test(PAY_INST) local;
create index PAY_CUST_CARD_NO_partition on ORDER_test(REC_CUST_NAME) local;
create index TRANS_ID_partition on ORDER_test(TRANS_ID) local;

BEGIN
DBMS_REDEFINITION.START_REDEF_TABLE(‘ANK’, ‘ORDER’,‘ORDER_TEST’,null,2);
END;
/

将主键和索引copy过来
4注意DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS是用来copy约束和索引的,

DECLARE
num_errors PLS_INTEGER;
BEGIN
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(‘ANK’,‘ORDER’,‘ORDER_TEST’,
DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, TRUE, num_errors);
END;
/

在做同步的过程中,oracle其实会创建一张临时表用来同步数据 以 MLOG f i n s h s e l e c t c o u n t ( ) f r o m M L O G _ 开头 后面为表名这个表用来最后进行finsh的时候保持数据同步,因为前面阶段不会锁表的 所以这样会保证数据的一致性 select count(*) from MLOG _ORDER;

BEGIN
DBMS_REDEFINITION.SYNC_INTERIM_TABLE(‘ANK’, ‘ORDER’, ‘ORDER_TEST’);
END;
/

BEGIN
DBMS_REDEFINITION.FINISH_REDEF_TABLE(‘ANK’, ‘ORDER’, ‘BANK_PRE_PAY_ORDER_TEST’);
END;
/

三、重定义分区表后,检查表原有的依赖对象及权限等是否正常

猜你喜欢

转载自blog.csdn.net/qq_41128383/article/details/86477023