oracle在线重定义-普通表转分区表

前几天有一张40多G的普通表需要转为分区表,为了将对业务的影响降到最小,使用在线重定义的方式进行转换,使用这种方式转换,业务几乎感觉不到影响。

两种转换方式:若表有主键则基于主键,没有主键则基于rowid。

=================== 基于主键的在线重定义==============

一、准备阶段:
1、确认表能不能进行分区
1.1基于主键的确认

2、创建临时表:

3、检查字段类型、长度、索引、约束等是否一致。
非空约束不会创建过来,需要单独加:

4、用户授权:

二、开始重定义:
1、开始执行数据的迁移(原表向临时表迁移数据):

2、增量的数据迁移(该过程可选可不选):

3、进行权限对象的迁移

4、查询相关错误:

5、原表和临时表进行切换(这个过程也会进行增量数据的复制):

三、回退:
如果再执行的过程中发生错误,可以通过以下语句结束整个过程,还原原表:

======================================================

 

 

====================== 基于rowid的在线重定义=============
一、准备阶段:
1、确认表能不能进行分区,基于rowid的确认:

2、创建临时表:

3、检查字段类型、长度、索引、约束等是否一致。
非空约束不会创建过来,需要单独加:

4、用户授权:

二、开始重定义:
1、开始执行数据的迁移(原表向临时表迁移数据):

2、增量的数据迁移(该过程可选可不选):

3、进行权限对象的迁移

4、查询相关错误:

5、原表和临时表进行切换(这个过程也会进行增量数据的复制):

三、回退:
如果再执行的过程中发生错误,可以通过以下语句结束整个过程,还原原表:

 

发表回复