我现在有两个数据库tjcshow 和 oracle
在tjcshow库里建立了一些表
oracle库里建立了一些快照
快照如:
CREATE SNAPSHOT  "BNETUSER"."SNP_COP_BRIEF_REL_PARM"
BUILD IMMEDIATE 
REFRESH FAST WITH ROWID
NEXT sysdate + 1/24
AS
select * from COP_BRIEF_REL_PARM @tjcshow
可是这是一个小时刷新一次 
可是有时候需要马上刷新
有没有合适的解决方案 当tjcshow发生变化后 oralce库里的snapshot马上跟着变化
(注意 数据量大概100万条记录 请考虑一下速度问题)
在线等

解决方案 »

  1.   

    两个库之间建立dblink,然后再用触发器
      

  2.   

    有没有注意到快照建完后,多了一个JOB?这个JOB就是用来跑快照的,这下就好办了,要想立即刷新时,就把这个JOB运行一下。附:Oracle帮助RUN Procedure
    This procedure runs job JOB now. It runs it even if it is broken. Running the job recomputes next_date. See view user_jobs. Syntax
    DBMS_JOB.RUN ( 
       job       IN  BINARY_INTEGER,
       force     IN  BOOLEAN DEFAULT FALSE);Parameters
    Table 17-10 Run Procedure Parameters 
    Parameter  Description  
    job  Number of the job being run. 
     
    force  If this is TRUE, then instance affinity is irrelevant for running jobs in the foreground process. If this is FALSE, then the job can be run in the foreground only in the specified instance.  
     
     Example
    EXECUTE DBMS_JOB.RUN(14144);
      

  3.   

    一定要用快照吗?
    我的个人意见:
    我会给它建张接口表,并且把tjcshow库中相关的SP等改了,让它在tjcshow库发生变化时,同时插入变动的数据到接口表.
    现在,只要用JOB快速的扫描接口表,当有数据时,做相应动作,然后清空接口表,等待下一次扫描.
      

  4.   

    comcn(大XX)
    用快照的话可以实现快速刷新 如果在主表上建立了快照日志的话
    快速刷新只对有变化的行刷新
      

  5.   

    建一程序pl/sql吧!  
    detect 日志表是否有数据,有的话,更新远程表,(不过此时远程表会出现类似死机现象,要考虑更新时间)
    将此pl/sql块设成  oracle中的job 就可以了,每分钟detect一次吧!
    一分钟需传送的数据量不会太大吧!这种方法肯定比定时用快照更新好。
    千万不要相信oracle的快照,试想一下,oracle为什么不同时将操作数据库的所有sql语句生成一个
    log(txt类型),  这样分析这个文件就可实现任何事情了。
      

  6.   

    数据不光是新增啊。还有更新、删除。自已要写pl/sql同步还是比较麻烦。一直有用快照。