从服务器A的表table1中拿数据,然后删除服务器B的表table2中的数据,再将取到的数据insert到服务器B的表table2中语句我知道怎么写,关键是table1中有1000多万条数据,怎么插入到table2中?
解决方案 »
- 关于Ibatis中Iterator的问题
- RAMN备份遇到的问题
- VC预编译PC文件问题
- opensolaris 安装oracle报错,大家帮帮忙了阿
- 高分求解!
- oracle/dms/instrument/ExecutionContextForJDBC的问题
- 哪位兄弟帮忙看看:在设置最大角色数时为什么会出现在ORA-32001错误!
- oracle网站上的“Oracle ODBC Drivers ”是做什么用的?如何安装?
- 创建触发器权限不足?!
- startup mount与startup restrict mount有何区别
- 使用语句查询索引、主键
- Oralce如何实时将数据库A一个表A产生的记录搬到另一个数据库B同结构的表B,并将数据库A的表A原记录删除
两台服务器需要dblink了
可以在table1表中设置触发器,当有更新的时候把数据更新到table2中
rename A to B
alter table B nologging ;insert into B select * from A@dblink where ...;--如果是增量,可以在条件里限制。
commit;
如果不是,还是用DBLINK吧操作放在B上,建一个DBLINK -> A 就可以了
至于性能方面,好像没有具体说到环境、表的设计等其它方面,插入慢,数据量只是参考点之一。
也可以考虑在原来A上建立分区表 一部分一部分的往新B 里插入 可能一次插入太多 消耗资源太多
imp/exp
alter table b nologginginsert /* +append */ into b select * from a@dblink;
也可以采用exp imp 也很好
insert /* +paralle*/
insert bulk into
nolog
> append table_nameb(name1,name2) -
> using select * from tabl_nameacopy from 这个功能据说要去掉了,被exp/imp 取代。不过还是挺好用的,
我导过2、3百万的数据用了 不到十分钟吧。
最好是导出导入 ,要是想insert就得先把归档关掉 ,你考虑吧 导入导出 是没日志的
备份数据,关日志、del索引,插,建索引,检查数据,开日志,ok
小心回滚段和日志文件.建议用exp/imp.
expdp impdp 这个速度是相当快的