日期:2014-05-17  浏览次数:20772 次

远程数据库的表插入本地更新解决
    需要调用远程数据库的几张表,发现这几张表某几个字段没有加索引,调用查询很慢慢.
    于是把这几张表全部数据拷贝放入本地数据库中的同名表中,再加上索引,即解决了数据查询速度的问题.
    方法: 第一次,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楼。。。

引用:
引用:

用Oracle的merge into,只插入本地没有的数据如何?


可以这样吗,只更新本地没有的数据倒是好方法,不知道怎么弄

------其他解决方案--------------------
现在是我不能控制远程数据库的,我只能查询远程数据库中的表,触发器肯定是不能建的
------其他解决方案--------------------
求解决啊,高分相送啊
------其他解决方案--------------------
方法是没问题,可是操作起来太慢了,有没有更好的方法啊
------其他解决方案--------------------
比较理想的办法是goldengate,另一种方法是truncate->删除索引->将表设为nologging->插入数据->重建索引->将表设为logging
------其他解决方案--------------------
引用:
用Oracle的merge into,只插入本地没有的数据如何?


可以这样吗,只更新本地没有的数据倒是好方法,不知道怎么弄