两数据库同步,快照问题

cjf1009 2005-12-17 11:46:25
远程数据库S1,A用户下有表NAME,INFO,NAME与INFO关联字段ID。
本地数据库S2,B用户下有相同的两个表NAME,INFO,NAME与INFO关联。

需求:S2的这两个表需要定时(10分钟)或及时的得到S1里的更新的部分数据(select * from NAME,INFO where NAME.XING='程' AND NAME.ID=INFO.ID),存储在S2的这两个表内。有人说用快照和job,可是看了些资料后我还是不懂,请指点。

疑问:网络条件是专用广域网,如果遇到断线等问题,会不会造成S2里的数据不全?怎么解决?
...全文
268 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ciyanhao 2006-02-05
  • 打赏
  • 举报
回复
如果S1也要得到S2的更新数据,应该怎么办啊?
cjf1009 2005-12-23
  • 打赏
  • 举报
回复
呵呵,谢谢大家,如果讲到这我还不会做,我也太笨了,再问也得开新贴呀,给分。
deon 2005-12-21
  • 打赏
  • 举报
回复
我觉得zjp8310(z一阵风z)的回答非常好!应该给分他
软侠 2005-12-21
  • 打赏
  • 举报
回复
另外,也可以使用MV的方式來同步數據,原理差不多,這個我就不多說了,呵呵!
软侠 2005-12-21
  • 打赏
  • 举报
回复
我以為 boydgmx(梦霄) 所说的不是很好,樓主的要求是使用快照。
其實用快照就可以了,樓主可以按以下步聚使用快照:
一、在遠程機上在要對其同步的表上建立快照日志(如果不建快照日志,則無法使用快速刷新);
二、在本地服務器上建一個到遠種機的DBLINK(假設名稱為MY_DBL);
三、在本地機上創建快照表:
--先建本地快照表NAME
CREATE SNAPSHOT NAME AS
SELECT t1.* from 方案名.NAME@远程 t1,方案名.INFO@远程 t2 where t1.XING='程' AND t1.ID=t2.ID;
--再建本地快照表INFO
SELECT t2.* from 方案名.NAME@MY_DBL t1,方案名.INFO@MY_DBL t2 where t1.XING='程' AND t1.ID=t2.ID;
--再設置同步方案
--1.完整刷新方案
Alter snapshot NAME refresh complete
  Start with sysdate+1/1440--表示快照建立一分鐘後開始完整刷新(同步)一次
next sysdate+1; --表示以後每隔一天就完整刷新(同步)一次

Alter snapshot INFO refresh complete
  Start with sysdate+1/1440
next sysdate+1;

--2.定時快速刷新方案
Alter Snapshot NAME refresh FAST
Start with sysdate+1/720--這裡表示快照建立兩分鐘後開始快速刷新一次
next sysdate+1/144; --這表示以後每十分鐘刷新(同步)一次

Alter Snapshot INFO refresh FAST
Start with sysdate+1/720
next sysdate+1/144;

經過我上述說的步聚後,樓主的數據就可以和遠程數據庫同步了,不過要注意,如果樓主的本地數據庫已有了Name和Info表的話,建議把它們改名,再創建快照表,或者把我上面建的快照表改名,再使用job定時從本地快照表中往你的Name和Info表中導入數據。
liuyi8903 2005-12-21
  • 打赏
  • 举报
回复
如果数据量太大的话.mv刷一次的代价是非常非常大的.

能详细说明你的业务量吗?
hevin 2005-12-21
  • 打赏
  • 举报
回复
同意boydgmx(梦霄) 所说


不过可以考虑用oracle的物化视图,比自己写job要方便,出错也小。
boydgmx 2005-12-19
  • 打赏
  • 举报
回复
0、在本地服务器的 tnsnames.ora 中配置远程数据库的 service_name,确保 tnsping 能通
1、在本地数据库中建立到远程数据库的 DBLINK
CREATE [PUBLIC] DATABASE LINK <link_name>
CONNECT TO <user_name>
IDENTIFIED BY <password>
USING '<service_name>';

2、定时执行一个 JOB,从远程数据中获取更新数据,同步到本地
select * from A.NAME@远程,A.INFO@远程 where NAME.XING='程' AND NAME.ID=INFO.ID

3、如果JOB出错,会写入 alert_sid.log 中,定期查看一下即可

如果设计合理的话,不用理会错误,只要下次同步成功就可以了。
cjf1009 2005-12-19
  • 打赏
  • 举报
回复
怎么没人进来呀,再顶
cjf1009 2005-12-19
  • 打赏
  • 举报
回复
没快照的事?
cjf1009 2005-12-18
  • 打赏
  • 举报
回复
glh0913 2005-12-17
  • 打赏
  • 举报
回复
做一个触发器,然后把提交不成功的写日志,或者保存到一个表中,最好做一个查询界面,查看出错信息,不过你这样做数据的实时性有问题.
软侠 2005-12-17
  • 打赏
  • 举报
回复
幫你UP!
cjf1009 2005-12-17
  • 打赏
  • 举报
回复
自己顶一下,请大家帮忙啊

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧