Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

3

主题
1#
发表于 2014-10-14 11:23:01 | 查看: 2367| 回复: 1
环境:RHEL 5.7 + Oracle 11.2.0.3
现有一张表,数据量5千多万。没有分区。
需求是修改一个字段的数据类型,varchar2(64)改成number

我采用如下方法实现更改数据类型的需求:

//定义变量并赋值
define table_name = 表名
define col_temp = 列名_temp
define col_old = 列名
define datatype_old = varchar2(64)
define datatype_new = number

//执行
prompt 1.alter table &table_name add &col_temp &datatype_old;
alter table &table_name add &col_temp &datatype_old;

prompt 2.update &table_name set &col_temp = &col_old;       
update &table_name set &col_temp = &col_old;       
commit;

prompt 3.update &table_name set &col_old = null;       
update &table_name set &col_old = null;       
commit;

prompt 4.alter table &table_name modify &col_old &datatype_new;
alter table &table_name modify &col_old &datatype_new;

prompt 5.update &table_name set &col_old = &col_temp;
update &table_name set &col_old = &col_temp;
commit;

prompt 6.alter table &table_name drop column &col_temp;
alter table &table_name drop column &col_temp;

我现在的问题是:
1.之前几十万数据量的表的采用这种方法更改没有问题,10s完成需求。但对于这张5kw+的数据表,这个方法相当于有3个更新操作,怕会大量消耗undo空间,所以不知这个方案是否可行?有没有优化的方法?
2.对于这类需求,有没有更好的实现方法?
2#
发表于 2014-10-15 11:56:02
如果有停机时间 不如用  CTAS 来的好

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-21 01:34 , Processed in 0.054619 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569