阿里巴巴数据库操作手册 25_在线重定义

V1.0

Revision

Author/Modifier Comments

No.

Date

1.0 2012.02 沈金 初稿

一、 目的

明确在线重定义操作的风险及标准流程,最大限度避免在线重定义操作带来的故障。

二、 适用范围

l 修改,删除表字段

l 修改表的物理参数:如tablespace,pctfree等

l 重组数据从而减少碎片

l 修改分区结构(10gR2)

l 修改普通表为IOT表,或相反

注:以下不支持online redefinition操作

             表上有物化视图(10g开始可以)
                  表上有物化视图日志(11g开始可以)
                  IOT表有overflow table
                  使用BFILE,LONG 或用户自定义类型的表

三、 风险评估

l 需要重定义的表必须有PK,(BY ROWID 存在BUG)

l DBMS_REDEFINITION.START_REDEF_TABLE 此阶段不影响DML

l 周期的执行SYNC_INTERIM_TABLE从而保证物化视图日志不会过大的增长(重定义默认会为表创建物化视图日志)

l 在FINISH_REDEF_TABLE 完成之前,临时表上的触发器不会执行

l 完成后,原表相关的游标都会失效

l 统计信息无法拷贝(9i)

l  FINISH_REDEF_TABLE 会被表上的DML阻塞
l  必须保证表空间足够
l  表上不能够存在长时间的事务,如果发生阻塞,建议KILL原事务
l  如果存在EROSA解析,需要重新解析原日志()?

四、 操作流程

1. 准备工作

a) 确认是否可以进行重定义:DBMS_REDEFINITION.can_redef_table

b) 确认表相关的触发器,约束(9i)

2. 执行过程

a) 创建空的临时表(和原表相似,修改必要的字段或物理属性)

b) (可选)开启并行:

i. alter session force parallel dml parallel degree-of-parallelism;

ii. alter session force parallel query parallel degree-of-parallelism;

c) 开启重定义:

DBMS_REDEFINITION.START_REDEF_TABLE (

uname IN VARCHAR2,

orig_table IN VARCHAR2,

int_table IN VARCHAR2,

col_mapping IN VARCHAR2 := NULL, –指定列的对应关系

options_flag IN BINARY_INTEGER := 1, –默认根据PK

orderby_cols IN VARCHAR2 := NULL, –根据某字段排序ASC/DESC(10g)

part_name IN VARCHAR2 := NULL); –分区(10g)

如果以上过程失败,可以调用DBMS_REDEFINITION.ABORT_REDEF_TABLE回滚

检查是否存在错误select * from dba_redefinition_errors;(10g)

d) 在临时表上创建需要的触发器,索引,约束和权限(9I)

推荐:自己整理脚本,并使用以下存储过程自动拷贝权限和统计信息

(可选 >9i)使用自动COPY;特点:重定义完成后,依赖对象名称不变

DECLARE

num_errors PLS_INTEGER;

BEGIN

DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS

(uname =>‘ALP’,

orig_table =>‘TEST’,

int_table =>‘TEST_ONLINE_DEF’,

copy_indexes =>0, 不自动拷贝

copy_triggers =>FALSE,

copy_constraints =>FALSE,

copy_privileges =>TRUE,

ignore_errors =>TRUE, 遇到错误继续

num_errors =>num_errors,

copy_statistics => TRUE,

copy_mvlog => FALSE); –11g新

dbms_output.put_line(num_errors);

END;

/

检查是否存在错误select * from dba_redefinition_errors;(10g)

手动修正,如果还是需要保持依赖对象名称不变,可以通过运行DBMS_REDEFINITION.REGISTER_DEPENDENT_OBJECT进行手工注册?

e) 同步数据

       DBMS_REDEFINITION.SYNC_INTERIM_TABLE

f) 结束在线重定义

       DBMS_REDEFINITION.FINISH_REDEF_TABLE

3. 验证方案

a) 常规检查:@dbcheck

b) 数据库是否正常:@active

五、 核心对象风险

不建议使用

六、 回退方案

无需回退

七、 历史故障及教训

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓