我现在有两个数据库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万条记录 请考虑一下速度问题)
在线等
在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万条记录 请考虑一下速度问题)
在线等
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);
我的个人意见:
我会给它建张接口表,并且把tjcshow库中相关的SP等改了,让它在tjcshow库发生变化时,同时插入变动的数据到接口表.
现在,只要用JOB快速的扫描接口表,当有数据时,做相应动作,然后清空接口表,等待下一次扫描.
用快照的话可以实现快速刷新 如果在主表上建立了快照日志的话
快速刷新只对有变化的行刷新
detect 日志表是否有数据,有的话,更新远程表,(不过此时远程表会出现类似死机现象,要考虑更新时间)
将此pl/sql块设成 oracle中的job 就可以了,每分钟detect一次吧!
一分钟需传送的数据量不会太大吧!这种方法肯定比定时用快照更新好。
千万不要相信oracle的快照,试想一下,oracle为什么不同时将操作数据库的所有sql语句生成一个
log(txt类型), 这样分析这个文件就可实现任何事情了。