mysql 重定义分隔符,通过在线重定义来增加大表列默认值

其中提到11G之前,可以通过在线重定义表的方式,来进行列的增加(且有默认值)。

之前的文章讨论过11G中关于大表增加列的新特性 ,

其中提到11G之前,可以通过在线重定义表的方式,来进行列的增加(且有默认值)。

在线重定义权限需求:

grant create any table to 用户;

grant alter any table to 用户;

grant drop any table to 用户;

grant lock any table to 用户;

grant select any table to 用户;

grant create any trigger to 用户;

grant create any index to 用户;

1.SQL获取原始表的DDL

可通过如下设置,,将storage 子句去除,也可以不去执行

begin

Dbms_Metadata.Set_Transform_Param(Dbms_Metadata.Session_Transform,

'SQLTERMINATOR',

True);

Dbms_Metadata.Set_Transform_Param(Dbms_Metadata.Session_Transform,

'STORAGE',

False);

end;

获取原始表的DDL语句(这里例子为T)

set pagesize 5000

set long 50000

Select Dbms_Metadata.Get_Ddl(Object_Type => 'TABLE', Name => 'T') from dual

union all

select Dbms_Metadata.Get_Dependent_Ddl(Object_Type => 'CONSTRAINT',Base_Object_Name => 'T') from dual

union all

select Dbms_Metadata.Get_Dependent_Ddl(Object_Type => 'INDEX',Base_Object_Name => 'T') from dual

union all

select Dbms_Metadata.Get_Dependent_Ddl('OBJECT_GRANT', 'T', 'SCOTT') from dual;

2.将获取的语句中的 表名T,替换为T2,之后建立。

3.给t2表 增加字段(带有默认值)

alter table t2 add MrDai varchar2(10) default 'MrDai';

4.检查一下能否T表能否进行重定义,如果执行成功,则表示可以,否则将会报错显示为什么不可以

exec Dbms_Redefinition.Can_Redef_Table(USER, 'T');

5.开始重定义

注意:如原始表有未提交的事物,该过程会一直在等待,等待事件为enq: TX - row lock contention

exec dbms_redefinition.start_redef_table(uname => USER,orig_table => 'T',int_table => 'T2',options_flag => DBMS_REDEFINITION.cons_use_pk);

6.完成重定义

exec dbms_redefinition.finish_redef_table(uname=>USER,orig_table=>'T',int_table=>'T2');

查看重定义以后的t

SQL> desc t;

Name Null? Type

----------------------------------------- -------- ----------------------------

OWNER VARCHAR2(30)

OBJECT_NAME VARCHAR2(128)

SUBOBJECT_NAME VARCHAR2(30)

OBJECT_ID NOT NULL NUMBER

.

.

.

MRDAI VARCHAR2(10)

已经添加列完成。

logo.gif

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值