可行是可行,就是性能方面不太好。建议:就建个job之类的作业,给个指定时间运行,主要用来统计实时表的数据新增量是否存在 (这个你应该懂吧。SELECT COUNT(*) FROM 表 WHERE 时间 处理的更细些,就是做些自定义的判断等等,主要是知道表数据有没有新增,如果需要实时监控,就用循环) 如果数据存在,那么进入逻辑判断,开始数据同步,如何同步这个就不用多说了吧。这样就避免了触发器。例子: DECLARE p_Count NUMBER; BEGIN SELECT COUNT(*) INTO p_Count FROM 表 WHERE 时间; WHILE p_Count = 0 LOOP Dbms_Lock.Sleep(1200); ---10分钟之后再执行*\ --这里随便加些判断 SELECT COUNT(*) INTO p_Count FROM 表 WHERE 时间; --再次查看 END LOOP; IF p_Count > 0 THEN --逻辑判断 END IF; END;
我现在是将实时插入数据的采集端的表同步到本地服务器,是FAST方式,在同步到本地的物化视图上建立触发器当有新数据过来时将新数据插入到中间表中 ,这样同时有4、5张表会同时更新数据,同步更新的表的时间不一样有的时间5秒有的是1分中,有的是一天 新增的数据量就10W左右 我通过时间差来使触发器不在同一个时间点运行 这样可行吗 如果不写触发器的话 还有什么方式可以 求大神教教
(这个你应该懂吧。SELECT COUNT(*) FROM 表 WHERE 时间 处理的更细些,就是做些自定义的判断等等,主要是知道表数据有没有新增,如果需要实时监控,就用循环) 如果数据存在,那么进入逻辑判断,开始数据同步,如何同步这个就不用多说了吧。这样就避免了触发器。例子:
DECLARE
p_Count NUMBER;
BEGIN
SELECT COUNT(*) INTO p_Count FROM 表 WHERE 时间;
WHILE p_Count = 0 LOOP
Dbms_Lock.Sleep(1200); ---10分钟之后再执行*\
--这里随便加些判断
SELECT COUNT(*) INTO p_Count FROM 表 WHERE 时间; --再次查看
END LOOP;
IF p_Count > 0 THEN
--逻辑判断
END IF;
END;