首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 高分求助两台数据库之间实现同步 [已结贴,结贴人:linzhangs]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • linzhangs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-19 09:28:01 楼主
    两台数据库IP地址分别为192.168.1.120和192.168.1.130.    120数据库为主数据库,130数据库为辅数据库。现在120和130里的数据表结构和数据完全相同。现在要做个同步,使得120数据库中的一部分表,增加删除修改数据,而130数据库都可以同步的增加删除或修改。注意此同步为单向同步,就是让130数据库中跟120数据库中数据相同。表结构不会发生变化。
    网上给的建议是使用dblink,再使用快照。然后再写触发器。我先创建dblink connect120测试成功。
    再创建快照如下,语句执行成功。
    Create snapshot log on Aa_Database_Log;
    --Aa_Database_Log是我要映射的表
    Create snapshot sn_Aa_Database_Log as select * from Aa_Database_Log@connect120;
    --创建快照
    Alter snapshot sn_Aa_Database_Log refresh fast Start with sysdate+1/24*60 next sysdate+1/24*60;
    --oracle自动在1分钟后进行第一次快速刷新,以后每隔1分钟快速刷新一次

    EXEC DBMS_SNAPSHOT.REFRESH('sn_Aa_Database_Log','F');
    结果快照表建成功了。但并没有同步刷新。我手动刷新了下。还是不可以。网上介绍说,快照进程没启动起来。我的是oracle 10g。不知道怎样启动快照进程。
    另外还有其他方法实现我这个问题的,可以给建议。

    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oracledbalgtu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 09:53:171楼 得分:30
    120同步表建立物化视图日志。
    130建立物化视图。
    创建刷新组:DBMS_REFRESH.MAKE
    要刷新的物化视图添加到刷新组DBMS_REFRESH.ADD
    ok了。
    引用楼主 linzhangs 的帖子:
    两台数据库IP地址分别为192.168.1.120和192.168.1.130.    120数据库为主数据库,130数据库为辅数据库。现在120和130里的数据表结构和数据完全相同。现在要做个同步,使得120数据库中的一部分表,增加删除修改数据,而130数据库都可以同步的增加删除或修改。注意此同步为单向同步,就是让130数据库中跟120数据库中数据相同。表结构不会发生变化。
    网上给的建议是使用dblink,再使用快照。然后再写触发器。我先创建dblink conne…
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wjlsmail
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 10:06:052楼 得分:20
    可参考我发的http://topic.csdn.net/u/20080819/10/4acdea17-4d99-4e0b-a7c7-da7d01d261ce.html
    中的方法。

    另外对多用户的同步,如有经验请指点一下,多谢!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • linzhangs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 10:22:333楼 得分:0
    引用 1 楼 oracledbalgtu 的回复:
    120同步表建立物化视图日志。
    130建立物化视图。
    创建刷新组:DBMS_REFRESH.MAKE
    要刷新的物化视图添加到刷新组DBMS_REFRESH.ADD
    ok了。
    引用楼主 linzhangs 的帖子:
    两台数据库IP地址分别为192.168.1.120和192.168.1.130.    120数据库为主数据库,130数据库为辅数据库。现在120和130里的数据表结构和数据完全相同。现在要做个同步,使得120数据库中的一部分表,增加删除修改数据,而130数据库都可以同步的增加删除或修改…

    可以给我个步骤写把代码也写清楚不?写好我直接给分。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • linzhangs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:11:374楼 得分:0
    请问大家再提供一些同步两台数据库的方法!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • linzhangs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 14:42:315楼 得分:0
    高手帮忙。给解决方案!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oracledbalgtu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 14:44:116楼 得分:0
    SQL code
    --在主数据库和物化视图数据库分别创建连接对方的数据库连接(database link),假如为ddbb --把要复制的数据表导入到物化视图数据库的对应用户下 --在主数据库(待复制的数据)创建要进行数据复制的表的物化视图日值 CREATE MATERIALIZED VIEW LOG ON tt WITH ROWID, PRIMARY KEY, SEQUENCE INCLUDING NEW VALUES; --在物化视图数据库(复制到的目的地)把要复制的表创建物化视图; CREATE MATERIALIZED VIEW tt ON PREBUILT TABLE REFRESH FAST ON DEMAND AS SELECT * FROM tt@ddbb; --在物化视图数据库上创建刷新组,指定10分钟刷新一次 BEGIN DBMS_REFRESH.MAKE( name => 'ABCDX', list => '', next_date => SYSDATE, interval => '/*10:Mins*/ sysdate + 10/(60*24)', implicit_destroy => FALSE, lax => FALSE, job => 0, rollback_seg => NULL, push_deferred_rpc => FALSE, refresh_after_errors => TRUE, purge_option => NULL, parallelism => NULL, heap_size => NULL); END; / --把要定期刷新的物化视图添加到刷新组 BEGIN DBMS_REFRESH.ADD( name => 'ABCDX', list => 'TT', lax => TRUE); END; /
    引用 3 楼 linzhangs 的回复:
    引用 1 楼 oracledbalgtu 的回复:
    120同步表建立物化视图日志。
    130建立物化视图。
    创建刷新组:DBMS_REFRESH.MAKE
    要刷新的物化视图添加到刷新组DBMS_REFRESH.ADD
    ok了。
    引用楼主 linzhangs 的帖子:
    两台数据库IP地址分别为192.168.1.120和192.168.1.130.    120数据库为主数据库,130数据库为辅数据库。现在120和130里的数据表结构和数据完全相同。现在要做个同步,使得120数据库中的一部分表,增加删除修改数据…
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • linzhangs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 16:15:287楼 得分:0
    我做完之后,没有实现同步阿。并且在目的数据库中修改数据库,提示次试图的数据操纵操作非法。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oracledbalgtu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 16:50:498楼 得分:20
    晕倒。。。
    因为是单向复制,所以不能修改目的数据库,只能修改源数据库。

    引用 7 楼 linzhangs 的回复:
    我做完之后,没有实现同步阿。并且在目的数据库中修改数据库,提示次试图的数据操纵操作非法。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liuyi8903
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

    发表于:2008-08-20 09:00:049楼 得分:0
    10G 可以用streams

    另外,你的另一台库是干什么的?容灾?还是做查询?或者要做正常业务?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • linzhangs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 09:06:0210楼 得分:0
    引用 9 楼 liuyi8903 的回复:
    10G 可以用streams

    另外,你的另一台库是干什么的?容灾?还是做查询?或者要做正常业务?

    streams是什么?能详细介绍下吗
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • linzhangs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 09:11:2211楼 得分:0
    另外一台数据库就是做正常业务的。就是尽可能的使两台数据库同步。一台数据是用来增删改,另外一台同步增删改。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vc555
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 12:59:3712楼 得分:30
    如果只在一台做DML操作,另一台只需同步这些操作数据而自生不做任何操作,可以用data guard

    如果要在两台服务器都能各自做各种DML操作,并且要求它们同步,那就用楼上说的streams

    具体使用你要看手册了,操作步骤很多,一两句话说不清。


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • linzhangs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 13:33:0813楼 得分:0
    我要做的是单向同步,并且只需要做一部分表的同步。大概有40个表。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vc555
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 13:49:0114楼 得分:0
    只同步部分表,那就用streams或者advanced replication,不过这些个配置不如DG简单。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved