我有两张表a和b,表结构不一样,两张表的索引都是id,并且a.id和b.id可以连接。现在需要查询出表a中a.id=b.id的所有数据,将这部分数据保留,然后把表a的数据全部清掉,导入保留的数据,a的数据量大概是一千多万,b的数据量最多几百万。我想将表a需要的数据导成dmp文件,然后再将dmp文件导到表a中,请问具体的操作步骤要怎么写?(用户名/口令假设为user/passwd)

解决方案 »

  1.   

    先建一个中间表C
    create table c as select * from a where exisits(select 1 from b where a.id=b.id);然后truncate table a;然后insert into a select * from c;不需要导出导入了吧
      

  2.   

    b里也有几百万的数据,直接insert几百万的数据时间上会不会很长?
      

  3.   

    一般性能的服务器,几百万数据INSERT应该是没有多大影响的~~~
    如果怕慢,可以考虑并行
      

  4.   

    exp name/pwd@test tables=(a) file=d:\a.dump;
    imp name/pwd@test file=d:\a.dump tables=(table1);如果表存在的情况下导入,需要加上ignore=y
    记得,导入的时候,a表需要truncate 或者drop 掉,这两者都是不可恢复的。
    如果用导入和导出的话速度是会快一些,不过为了保险,还是多做几次测试。可以再去网上查一下导入导出命令的具体用法。
      

  5.   

    可以,导出的时候就用EXPDP + SQL 语句过滤出你想要的清空后倒入即可