发生在Online Redefination上的一点小故事

    使用Online Redefination技术可极少停机时间, 不过也发生过一些小故事. 首先来看一下表能不能支持联机重定义:

SQL>  exec dbms_redefinition.can_redef_table( USER, 'T_DEF1') ;

PL/SQL procedure successfully completed.

    接下来正式开始进行联机重定义:

SQL> exec dbms_redefinition.START_REDEF_TABLE( USER, 'T_DEF1', 'T_DEF1_TMP');

PL/SQL procedure successfully completed.

    在将要结束前, 先同步一下变更的记录, 可以常跑这个过程, 以让结束时更快一些.

SQL> exec dbms_redefinition.sync_interim_table( USER, 'T_DEF1', 'T_DEF1_TMP');

PL/SQL procedure successfully completed.

    可是现在我在表上面加一个列呢?

SQL> alter table t_def1 add col1000 number;

Table altered.

    现在正式结束联机重定义:

SQL> exec dbms_redefinition.FINISH_REDEF_TABLE(USER, 'T_DEF1', 'T_DEF1_TMP');

PL/SQL procedure successfully completed.

    再来查查表结构?

SQL> desc T_DEF1
Name                   Null?    Type
---------------------- -------- -----------------
OBJECT_ID              NOT NULL NUMBER
......
SECONDARY                       VARCHAR2(1)

SQL> desc T_DEF1_TMP
Name                   Null?    Type
---------------------- -------- ------------------
OBJECT_ID              NOT NULL NUMBER
......
SECONDARY                       VARCHAR2(1)
COL1000                         NUMBER

    只有Temp表上有新增的列, 两个不同的人在同时做这两件事时, 真的很难预先想到这一点.

留言 (2)

纯属自己添乱. :)

不过我碰到一例真实的故障.

故事是这样的, SQL generate script 成批Online Redefin,单机数据库啥问题也没有.
4 Nodes RAC, run batch script on node3, redefin like 100 tables.
after successfully FINISH_REDEF_TABLE, no errors on node3.
But node1 can't see 3 of them.

于是引起网站不能注册新用户,关联到一些辅助表 和 审计表.

I never thought it's a RAC bug, after 2 hours fighting, restart all the nodes, got sync.

彻底摧毁了我对Oracle的信任,引脑撞击桌子角.

Oracle 10.1.0.4 on Linux, RHAS3.0, Hugh memory kernal. 3.7G SGA.

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • It opens at 8 am on weekdays, but at 9 at weekends.
  • 平日上午8点开, 但周末9点开.
  • What will you do the day after on next?
  • 后天你干什么?
  • What did you do the week before last?
  • 上上星期你干了什么?
  • I'll work for the next 5 days.
  • 我要工作5天(从明天算起)
  • It's been 5 years since I last saw you.
  • 我已5年没见你了.