类似insert into select from的办法当然是排除的了,因为数据量很大,转储频率也很高
原表中数据需要保留,之后对原表的更新不再反应到新表中,新表之后只有查询操作,不再更新

解决方案 »

  1.   

    直接使用create table table_Name as select col_..... from table_Name2;
    只有效率相对较高
      

  2.   

    insert/*+append*/ into select from 很快
      

  3.   

    可以用exp命令把源表导出成一个dmp文件,然后把源表换一个名字,再把exp出去的表再imp进来!!
    好象exp/imp命令要快一些~
    看这样能否解决问题?
      

  4.   

    楼主这种做法(分开存储,一个用来进行事务操作,一个用来进行查询操作)和secondeLife的做法很像,的确不错。
      

  5.   

    最快的办法是
    用exp和imp
    导入的时候要忽略错误。
      

  6.   

    我找了个中表(1000万记录-5GB)测试了一下,exp/imp的方法仅导出就要23分钟,导入我就没有试了
    create as的方法速度快一些,不含建索引只需要12分钟,就包含了导出+导入的操作,但是和insert的方式差不多,只是少了手工建表的步骤,但也使我不知道怎么指定表空间
    物化视图我上网随便看了一下,首先执行效率不敢保证,其次视图本身对数据更新都是有反映的,我需要是保存某个时点的状态数据,不能随原表的更新而更新,不知道有没可能实现
    对于大表操作(1亿条记录以上),我不知道如何避免长事务的发生,以前我在informix下是把表或库改为无日志方式来做的,oracle不知道支持这种方式否,也请指教
    问的问题有点多,分数好像给低了一点,我再加点吧,谢谢各位捧场的和帮忙的,谢谢!
      

  7.   

    支持bzszp的方案,有效地排除创建记录的复杂程度才是关键。文件读写的IO有一些是必须的,没有办法去优化他的。
    再加上tom_cheung提到的的appand关键字应该是很高效了。
    不支持使用Exp/imp这样的方式,毕竟让服务器自己做事情要比通过客户端和服务器交互要快得多。
    不管你的客户端是否安装在服务器本地。
      

  8.   

    1、create table t NOLOGGING as select * from
    2、或者使用Nologging建表以后使用下列语句插入
    insert /*+ append */ into select from 这就是oracle提供的对于大数据量导入的解决方案,如果你尝试比oracle聪明,那我敢保证你会撞墙。两种做法都不生成redo和undo日志。如果你不清楚这意味着什么,参见:expert one on one oracle: chapter 5
      

  9.   

    说句不客气的话,楼上大部分都是半桶水,如果不指定nologging,那么还是会生成redo log,即使使用了append也比简单的insert快不多少。尝试使用exp/imp的,就是试图比oracle聪明。其实这就像cpu明明提供了“加法”的指令你偏偏不用,非要使用“减去负的被减数”来实现加法功能一样,如果会更快那就有鬼了。ps:
    secondLife是一个多人在线游戏,虚拟社区。
      

  10.   

    向fenixshadow致谢,非常高兴问题得到真正的解决!!
      

  11.   

    不客气,如果你能把测试结果发到这里那就最好了,可以造福后人。
    比如:          普通insert       insert /*+ append*/     insert /*+ append*/  with nologging     CTAS         CATS with nologging   exp/imp
                       时间一          二                       三                                    四            五                    六
      

  12.   

    上网一搜nologging就可以找到很多测试结果,自己也可以试试呀
    我之前是不知道关键字该用什么
    以前是用informix的,那边叫raw
      

  13.   

    fenixshadow 
    不要以偏概全,即使使用了nologging关键字见表,索引有效的话仍然会有很多的redolog产生。
    append本身是消除oracle做执行计划的时间对redo的影响貌似不大的,当然他也有助于提高insert 的性能。
      

  14.   

    如果表中有clob或者blob字段呢?!