[Oracle] 表在线重定义 - 普通表到分区表

对于一个7*24的在线生产系统来说,修改表定义(DDL)时一件非常痛苦的时,因为如果直接使用alter语句,将会在表上安放一个排他锁,也就是说在这期间所有的DML和select都无法操作,如果是一个大表,alter的时间将很长,在这期间应用会受到很大的影响。

幸好,从9i开始,Oracle提供了在线表重定义功能,在修改表定义的同时几乎不影响DML和select语句,因为排他锁只会在表上出现很短时间。但是在线表重定义需要额外的空间(大致等于原表空间大小)。

在线表重定义具有如下功能:

  • 修改表的存储参数;
  • 可以将表转移到其他表空间;
  • 增加并行查询选项;
  • 增加或删除分区;
  • 重建表以减少碎片;
  • 将堆表改为索引组织表或相反的操作;
  • 增加或删除一个列。
Oracle提供DBMS_REDEFINITION包来进行在线表重定义,下面以把一个普通表重定义成分区表为例,说明在线表重定义的主要步骤:

1. 执行CAN_REDEF_TABLE,验证目标表是否可以在线重定义:
表的原始定义如下:
 CREATE TABLE P95169.SHIFT_CASE
   (    SCID VARCHAR2(40) NOT NULL ENABLE,
        ESTID VARCHAR2(40),
        CLINICTYPEUUID VARCHAR2(40) NOT NULL ENABLE,
        EXPERTID VARCHAR2(40) NOT NULL ENABLE,
        CLINICADDRESS VARCHAR2(100),
        FEE NUMBER(10,0),
        UPDEPART VARCHAR2(50),
        GETTIME VARCHAR2(50),
        GETADDRESS VARCHAR2(100),
        ISOPEN NUMBER(1,0) NOT NULL ENABLE,
        SEXLIMIT NUMBER(1,0),
        AGETOPLIMIT NUMBER(3,0) DEFAULT 150,
        AGELOWERLIMIT NUMBER(3,0) DEFAULT 0,
        RCLIMIT NUMBER(8,0) NOT NULL ENABLE,
        SHIFTDATE CHAR(8) NOT NULL ENABLE,
        ISTIMEDIVISION NUMBER(1,0) NOT NULL ENABLE,
        ISSELECT NUMBER(1,0) NOT NULL ENABLE,
        WEEKDAY NUMBER(1,0) NOT NULL ENABLE,
        DAYSECTION NUMBER(1,0) NOT NULL ENABLE,
        ORDERINGCOUNT NUMBER(8,0) NOT NULL ENABLE,
        SHARERCCOUNT NUMBER(8,0) NOT NULL ENABLE,
        CREATETIME CHAR(14) NOT NULL ENABLE,
        STATE NUMBER(2,0) NOT NULL ENABLE,
        UPDATETIME DATE,
        CHANGEREASON VARCHAR2(1000),
        STATETIME CHAR(14) NOT NULL ENABLE,
        RELATEID VARCHAR2(40),
        HOSPDEPTUUID VARCHAR2(40) DEFAULT null NOT NULL ENABLE,
        TASKFLAG NUMBER(1,0),
        COL01 VARCHAR2(200),
        COL02 VARCHAR2(200),
        COL03 VARCHAR2(200),
        COL04 VARCHAR2(200),
        COL05 VARCHAR2(200),
        CASETYPE NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE,
        HOSPRESOURCEID VARCHAR2(50),
        HOSPTIMESECTION VARCHAR2(50),
        HOSPTREATMENTTIME VARCHAR2(50),
        COMMENTS VARCHAR2(2000),
        HOSPITALUUID VARCHAR2(40),
        OPEN_TIME DATE,
         CONSTRAINT CK_SHIFTCASE_ORDERINGCOUNT CHECK (orde
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值