一个表有9亿的数据,要改一个字段的类型?

[复制链接]
查看11 | 回复9 | 2005-12-27 14:11:11 | 显示全部楼层 |阅读模式
表A有a,b,c,d4个字段,分别是int,int,varchar2,varchar2,其中a,b两个为pk。现在要把c从varchar2改为number,表中都是测试数据,9亿多条,其中c中的值都是‘test_value’现在现在需要c字段变为number然后填值(随便填)。
哪位有什么好方法么?
一天以内要搞定...




回复

使用道具 举报

千问 | 2005-12-27 14:11:11 | 显示全部楼层
新建一个改过字段的表,把旧表的数据插进去(用/*+append*/),把旧表drop掉,新表改成旧表的名字,很快的,9亿条一般也就最多2个小时
回复

使用道具 举报

千问 | 2005-12-27 14:11:11 | 显示全部楼层
哦? 我试试,希望下班前能弄完
阿门。。。。
回复

使用道具 举报

千问 | 2005-12-27 14:11:11 | 显示全部楼层
先把c字段的数据都update成‘1’,然后更改为number或者integer类型,为什么不行那? 我反过来就可以改~~
回复

使用道具 举报

千问 | 2005-12-27 14:11:11 | 显示全部楼层
楼主,想问一下哦。你那个9亿条的表,是怎么知道这个表记录是9亿条的呀?直接select count(*) ????????????????????很快吗?
回复

使用道具 举报

千问 | 2005-12-27 14:11:11 | 显示全部楼层
直接改会产生很多undo的。
采用waityou81 mm的方法,nologging append + parallel 是个很好的方法。
回复

使用道具 举报

千问 | 2005-12-27 14:11:11 | 显示全部楼层
最初由 wayne_lau 发布
[B]先把c字段的数据都update成‘1’,然后更改为number或者integer类型,为什么不行那? 我反过来就可以改~~ [/B]

先把c字段的数据都update成 null ,
然后更改为number或者integer类型
update成 1
回复

使用道具 举报

千问 | 2005-12-27 14:11:11 | 显示全部楼层
郑重声明,俺是男滴,这地方mm是很希缺滴
回复

使用道具 举报

千问 | 2005-12-27 14:11:11 | 显示全部楼层
最初由 wang_and_yang 发布
[B]楼主,想问一下哦。你那个9亿条的表,是怎么知道这个表记录是9亿条的呀?直接select count(*) ????????????????????很快吗? [/B]

以前别人统计的,报告中看到的,一个表大约占用了28g的空间
回复

使用道具 举报

千问 | 2005-12-27 14:11:11 | 显示全部楼层
最初由 玉面飞龙 发布
[B]直接改会产生很多undo的。
采用waityou81 mm的方法,nologging append + parallel 是个很好的方法。 [/B]


insert/*+append*/ into A_NEW
select a,b,1,d from A;
是这样么?
加了append是不是不写回滚段?而且需要alter table nologging 才能产生较少的redo么?
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行