Oracle在线重定义法迁移表——详细步骤与属性

Oracle在线重定义法迁移表

适用于迁移不能停止的业务表

本文是作者根据官方文档研究所得,步骤清晰,所需调用过程的属性全面,方便使用时进行取舍:

原理:增量物化视图刷新

步骤:
**1、验证表能否被在线重定义,两种方式皆可,但是至少要满足一种
(验证能否使用PK重定义)

begin
  dbms_redefinition.can_redef_table('用户','要迁移的表名',dbms_redefinition.cons_use_pk);
end;

(验证能否使用rowid重定义)

begin
  dbms_redefinition.can_redef_table('用户','要迁移的表名',dbms_redefinition.cons_use_rowid);
end;

2、如果上面有一种满足,则开始创建中间表(按照原表的ddl语句创建好,用户需一致,但是表空间需要指定为目标表空间):

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))……..

3、开始重定义,null代表所有的列名与原表一样,如果符合使用PK,则使用PK,否则应该改成rowid

begin
  dbms_redefinition.start_redef_table('用户','原表','中间表',null,dbms_redefinition.cons_use_pk);
end;

4、复制依赖对象到中间表,后几个参数分别表示从原表复制索引、触发器、约束、权限、某一项复制出错跳过、复制过程中的出错数目、复制统计信息、复制物化视图日志(各选项凭需要取用,完毕后需检查num_errors的值,有错一定要查看,酌情处理)

DECLARE  
  num_errors PLS_INTEGER;  
BEGIN  
  DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS
('用户', '原表','临时表', DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, TRUE, num_errors, TRUE, TRUE);  
END;

5、同步中间表,保证数据一致性,最大化减少最后一步的锁表时间

begin
dbms_redefinition.sync_interim_table('用户','原表','中间表');
end;

6、完成重定义(会短暂锁表,大部分已经由上一步刷新)

begin
dbms_redefinition.finish_redef_table('用户','原表','中间表');
end;

7、检查原表的表空间是否改变,检查其数据、结构、索引等依赖对象是否正确

优点:按照这种方法,迁移时间估计会比较长,但不会阻塞原表的dml操作,除了最后一步。如果迁移失败(中途出错),原表也不会受到影响。建议先找一个不重要的表测试一下可行性与速度,中止重定义:

DBMS_REDEFINITION.ABORT_REDEF_TABLE (
   uname       IN VARCHAR2,
   orig_table  IN VARCHAR2,
   int_table   IN VARCHAR2,
  part_name    IN  VARCHAR2 := NULL);
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值