远程数据库的表插入本地更新解决
需要调用远程数据库的几张表,发现这几张表某几个字段没有加索引,调用查询很慢慢.
于是把这几张表全部数据拷贝放入本地数据库中的同名表中,再加上索引,即解决了数据查询速度的问题.
方法: 第一次,create table 本地表 as select * from 远程表;
再对本地表创建对应的几个字段的索引.
问题:
由于远程表数据每天都有新增更新数据,希望保持3天更新一次.远程表数据大约在300W左右,其中一张表由2000多W数据,
我的办法:(1)truncate table 本地表; (2) insert into 本地表 select * from 远程表; 但是真正实行起来速度太慢了,特别是本地表已经创建了索引,重新插入速度太慢,耗内存,耗临时表空间
请问碰到这种方法,该如何解决????
------最佳解决方案--------------------采用触发器或物化视图,如果是物化视图,并不是时时的更新,有更新频率的,把refresh fast next..的值设置短一些,则会接近时时更新,具体用法baidu搜下
你现在的处理方式应是作业处理的吧?
------其他解决方案--------------------merge into 本地表。
------其他解决方案--------------------你的方法没问题,truncate之后 禁用索引,数据过来之后再rebulid 索引。。
------其他解决方案--------------------要么你本地再建一个表,每天同步一次,然后第三天的时候 从这个表把数据同步到你的正式表中,把工作消化在平时。。。。
------其他解决方案--------------------用Oracle的merge into,只插入本地没有的数据如何?
------其他解决方案--------------------当然不可以,因为merge into 需要把本地表和远程表关联,在你这个特定的需求下会更慢。。。。
请看7楼。。。
------其他解决方案--------------------现在是我不能控制远程数据库的,我只能查询远程数据库中的表,触发器肯定是不能建的
------其他解决方案--------------------求解决啊,高分相送啊
------其他解决方案--------------------方法是没问题,可是操作起来太慢了,有没有更好的方法啊
------其他解决方案--------------------比较理想的办法是goldengate,另一种方法是truncate->删除索引->将表设为nologging->插入数据->重建索引->将表设为logging
------其他解决方案--------------------
可以这样吗,只更新本地没有的数据倒是好方法,不知道怎么弄