##第四. Online Redefinition在线重定义对象
Online Redefinition在线重定义对象是Oracle中很酷的一种特性,它可以帮助我们在7*24在线的系统中从容地做出数据对象的在线定义修改,是Oracle数据库保证其高可用性的重要技术。
在线重定义Online Redefinition特性在许多场景中都是十分有用的,例如:
- 修改表的Storage存储参数
- 在同一Schema下将表移动到不同的表空间
- 转换非分区表为分区表
- 添加或删除分区
- 重新创建表以减少碎片,降低高水位
- 将堆组织的表改变为索引组织表
- 添加或删除列
使用Online Redefinition在线重定义需要用到DBMS_REDEFINITION程序包,EXECUTE_CATALOG_ROLE角色默认被赋予该PL/SQL Package的执行权限。除了执行该程序包的权限外,用户还需要拥有以下权限:
|
|
1,构造普通表t_objects
|
|
2,创建重定义需要的临时表
1234567891011121314151617181920212223242526 -- Create tablecreate table T_OBJECTS_TEMP(OWNER VARCHAR2(30),OBJECT_NAME VARCHAR2(128),SUBOBJECT_NAME VARCHAR2(30),OBJECT_ID NUMBER not null,DATA_OBJECT_ID NUMBER,OBJECT_TYPE VARCHAR2(19),CREATED DATE not null,LAST_DDL_TIME DATE,TIMESTAMP VARCHAR2(19),STATUS VARCHAR2(7),TEMPORARY VARCHAR2(1),GENERATED VARCHAR2(1),SECONDARY VARCHAR2(1),NAMESPACE NUMBER,EDITION_NAME VARCHAR2(30))partition by range(created)(partition P20130601 values less than (TO_DATE(' 2013-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))tablespace DBS_D_GRNOPHQ,partition P20140607 values less than (TO_DATE(' 2014-06-07 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))tablespace DBS_D_GRNOPHQ,partition P20140731 values less than (TO_DATE(' 2014-07-31 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))tablespace DBS_D_GRNOPHQ);3,开始重定义
|
|
4,开始拷贝表的属性
|
|
5,同步数据
|
|
6,收集中间表的统计信息(选做)
|
|
7,完成重定义
|
|
8,删除临时表
|
|
9,修改索引,约束名称和原表一致
|
|
10,ABORT_REDEF_TABLE使用, 在FINISH_REDEF_TABLE之前,可以使用abort_redef_table停止重定义
|
|