在线重定义-操作步骤

本文详细描述了在Oracle数据库中如何按照主键或ROWID重定义表的过程,包括创建中间表、依赖对象复制、同步数据以及检查分区状态,确保数据一致性。
摘要由CSDN通过智能技术生成

第一步:验证表是否能被在线重定义

验证是否能按主键重定义(默认,最后一次参数可以不加)

1

2

3

4

begin

  --dbms_redefinition.can_redef_table('scott','tb_cablecheck_equipment_bak');

  dbms_redefinition.can_redef_table('scott','tb_cablecheck_equipment_bak',dbms_redefinition.cons_use_pk);

end;

验证是否能按rowid重定义:

1

2

3

4

begin

  --dbms_redefinition.can_redef_table('scott','tb_cablecheck_equipment_bak',2);

  dbms_redefinition.can_redef_table('scott','tb_cablecheck_equipment_bak',dbms_redefinition.cons_use_rowid);

end;

第二步:创建中间表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

create table scott.tb_cablecheck_equipment_bak2(

      equipment_id        NUMBER,

      equipment_code      VARCHAR2(100),

      equipment_name      VARCHAR2(500),

      area_id             NUMBER,

      address             VARCHAR2(500),

      res_type_id         VARCHAR2(10),

      res_type            VARCHAR2(20),

      manage_area_id      VARCHAR2(100),

      manage_area         VARCHAR2(100),

      management_mode     CHAR(10),

      isrelated           CHAR(1),

      staff_id            VARCHAR2(20),

      create_date         DATE,

      ischecked           CHAR(20),

      check_date          DATE,

      operate_staff       NUMBER,

      parent_area_id      NUMBER,

      grid_id             NUMBER(20),

      install_sbid        NUMBER,

      install_sbbm        VARCHAR2(100),

      install_dzbm        VARCHAR2(100),

      longitude           VARCHAR2(50),

      latitude            VARCHAR2(50),

      station_id          VARCHAR2(50),

      update_time         DATE,

      check_complete_time DATE

)

partition by range(create_date)(

      PARTITION tb_cablecheck_equipment_p1 VALUES LESS THAN (TO_DATE('2013-08-01','YYYY-MM-DD')),

      PARTITION tb_cablecheck_equipment_p2 VALUES LESS THAN(TO_DATE('2016-04-05', 'YYYY-MM-DD')),

      PARTITION tb_cablecheck_equipment_p3 VALUES LESS THAN(TO_DATE('2016-12-13', 'YYYY-MM-DD')),

      PARTITION tb_cablecheck_equipment_p4 VALUES LESS THAN(MAXVALUE)

);

第三步:开始进行重定义

1

2

3

begin

  dbms_redefinition.start_redef_table('scott','tb_cablecheck_equipment_bak','tb_cablecheck_equipment_bak2',null,2);

end;

复制依赖对象

1

2

3

4

5

6

DECLARE  

  num_errors PLS_INTEGER;  

BEGIN  

  DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS('SCOTT', 'tb_cablecheck_equipment_bak','tb_cablecheck_equipment_bak2',  

  DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, TRUE, num_errors);  

END;

第四步:同步中间表,保证数据的一致性

1

2

3

begin

dbms_redefinition.sync_interim_table('scott','tb_cablecheck_equipment_bak','tb_cablecheck_equipment_bak2');

end;

第六步:完成重定义

1

2

3

begin

dbms_redefinition.finish_redef_table('scott','tb_cablecheck_equipment_bak','tb_cablecheck_equipment_bak2');

end;

查看是否已被定义为分区表:

1

select * from tb_cablecheck_equipment_bak partition(tb_cablecheck_equipment_p1);

第七步:

1

drop table scott.tb_cablecheck_equipment_bak2;

  • 33
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值