日期:2014-5-17 浏览次数:20193次

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

------解决方案--------------------
先建一个中间表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;

不需要导出导入了吧
------解决方案--------------------
一般性能的服务器,几百万数据INSERT应该是没有多大影响的~~~
如果怕慢,可以考虑并行
探讨
引用:
先建一个中间表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;

不需要导出导入了吧

b里也有几百万的数据,直接insert几……

------解决方案--------------------
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 掉,这两者都是不可恢复的。
如果用导入和导出的话速度是会快一些,不过为了保险,还是多做几次测试。可以再去网上查一下导入导出命令的具体用法。