当前情况,在软件升级中,软件所运用的oracle数据库中有个表的一个column需要改变,以前是128个char,现在扩大成256char。
这张表存在几十万条数据。所以通过建立临时表copy主表数据,然后truncat主表,然后再把临时表数据一条条插入的方法不可行。
不知道下面的方法可行否?
exp导出这张表到磁盘,然后drop这张表(不用cascade,这样不会对trigger这类的相关东西产生影响)。然后create重新建立表(那个column的属性是256char),然后直接用import导入行否?
或者还有其他方法,不吝赐教。

解决方案 »

  1.   

    老兄,谢谢你的回复和提醒。
    这个方法对于少量数据的表是可行的,但是我的这张表是海量数据。是不允许复制来操作的。
    你看看我上面的exp和imp方法可以不。我测试过没看出有什么问题,但是我是新手,不能确定这个操作。
      

  2.   

    其实这个问题可以归结于imp表的问题,imp到一个空的但是column结构稍有不同的表中。如果数据库中没有该表就直接imp了。
    但是存在一个有不同结构的表是不是可以imp?我真的不知道。唉。谁能解说一下?
      

  3.   

    128个char,现在扩大成256char,
    直接改字段就可以了,几十万的数据量太少了。
      

  4.   

    Oracle 是禁止直接对非空的表作字段属性修改的!
      

  5.   

    说话要负责任哦,oracle没有这么弱智。
    直接更改字段长度不是不可行,不过性能没有测试过。
    几十万数据并不多,如果认为复制数据不行的话,exp/imp就更不用说了。
    只是在复制的时候禁掉log、断掉索引和触发器就可以了。
      

  6.   

    oracle直接对非空的表作字段属性修改?不能吧。
      

  7.   

    我要结贴了,该等的人没来。
    不过我的问题已经解决了。还是egyle大侠解决的。再次谢谢他。
    我的所用的方法是对的,就是采用exp/imp。对于大数据量的就是这么操作。小数据量的可以创建临时表做。
    谢谢各位。
      

  8.   

    可以,alter table tablename MODIFY(colname char(256));
    数据不会丢。