ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 在線將普通大表改為分區表

在線將普通大表改為分區表

原创 Linux操作系统 作者:aishu521 时间:2012-11-30 09:40:05 0 删除 编辑

表的大小

. . exported "ECARD"."RECORDS_YX"                        1.020 GB 28966552 rows
rows

參考分區方法
partition by range (INTIME)
(
  partition P20090501 values less than (TO_DATE(' 2009-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',

'NLS_CALENDAR=GREGORIAN'))
    tablespace TBS_ECARD
    pctfree 10
    initrans 1
    maxtrans 255
    storage
    (
      initial 4M
      next 2M
      minextents 1
      maxextents unlimited
      pctincrease 0
    ),

  partition P20110501 values less than ('20110501')
    tablespace TBS_SFCDATA
    pctfree 10
    initrans 1
    maxtrans 255
    storage
    (
      initial 2M
      next 2M
      minextents 1
      maxextents unlimited
      pctincrease 0
    ),
開始建立


Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as system

1,測試
SQL> exec dbms_redefinition.can_redef_table('ECARD','RECORDS_YX');

PL/SQL procedure successfully completed
2
中建表
輔助建立
/*create table ECARD.RECORDS_YX_T
(
  IDX       NUMBER(10) not null,
  SNO       NUMBER(10) not null,
  DEVICEMAC VARCHAR2(8),
  INTIME    DATE,
  GETIME    DATE default sysdate
)
tablespace TBS_ECARD
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 2M
    minextents 1
    maxextents unlimited
    pctincrease 0
  )
partition by range(INTIME)
( PARTITION P201001 values less than (TO_DATE(' 2010-01-01 00:00:00', 'SYYYY-MM-DD

HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
  PARTITION P201101 values less than (TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD

HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
  PARTITION P201201 values less than (TO_DATE(' 2012-01-01 00:00:00', 'SYYYY-MM-DD

HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
  PARTITION P201206 values less than (TO_DATE(' 2012-06-01 00:00:00', 'SYYYY-MM-DD

HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
  PARTITION P201211 values less than (TO_DATE(' 2012-11-01 00:00:00', 'SYYYY-MM-DD

HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
  PARTITION P201304 values less than (TO_DATE(' 2013-04-01 00:00:00', 'SYYYY-MM-DD

HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
  PARTITION P201309 values less than (TO_DATE(' 2013-09-01 00:00:00', 'SYYYY-MM-DD

HH24:MI:SS','NLS_CALENDAR=GREGORIAN'))
);
3,步骤三、开始进行重定义
SQL> select count(*) from ECARD.RECORDS_YX;

  COUNT(*)
----------
  29028541

SQL> execute dbms_redefinition.start_redef_table('ECARD','RECORDS_YX','RECORDS_YX_T',null,2);

PL/SQL procedure successfully completed

SQL> select count(*) from ECARD.RECORDS_YX_T;

  COUNT(*)
----------
  29028541
步骤四、保证数据的一致性:
SQL> execute dbms_redefinition.sync_interim_table('ECARD','RECORDS_YX','RECORDS_YX_T');

PL/SQL procedure successfully completed
步骤五、开始重定义之后,完成重定义之前,需要在中间表上创建与源表对应的索引、外键、触发器等,而中

间表与源表对应的主键,如果需要按照主键重定义,需要再开始redefine之前创建,如果按照rowid进行重定义

,对应主键呢?
alter table ECARD.RECORDS_YX_T
  add constraint PK_RECORDS_YXX_T primary key (IDX)
  using index
  tablespace NDX_ECARD
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 2M
    minextents 1
    maxextents unlimited
    pctincrease 0
  );*/
-- Create/Recreate indexes
create index ECARD.INDEX_RECORDS_YXX_01_T on ECARD.RECORDS_YX_T (SNO)
  tablespace NDX_ECARD
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 2M
    minextents 1
    maxextents unlimited
    pctincrease 0
  );
create index ECARD.INDEX_RECORDS_YXX_02_T on ECARD.RECORDS_YX_T (INTIME)
  tablespace TBS_ECARD
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 2M
    next 2M
    minextents 1
    maxextents unlimited
    pctincrease 0
  );

步骤六、完成重定义

----完成重定义
SQL> execute dbms_redefinition.finish_redef_table('ECARD','RECORDS_YX','RECORDS_YX_T');

PL/SQL procedure successfully completed

SQL> select count(*) from ECARD.RECORDS_YX;

  COUNT(*)
----------
  29028541
步骤七:刪除中間表
SQL> DROP TABLE ECARD.RECORDS_YX_T;

Table dropped
步骤七:檢查表索引是否生效
 
  select * from dba_indexes where wner='ECARD' and table_name='RECORDS_YX';

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15187685/viewspace-750310/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-05-26

  • 博文量
    139
  • 访问量
    721088