5千万数据的普通表更改字段的数据类型,varchar2-->number
环境: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.对于这类需求,有没有更好的实现方法? 如果有停机时间 不如用 CTAS 来的好
页:
[1]