高分求助两台数据库之间实现同步

范佩西_11 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。不知道怎样启动快照进程。
另外还有其他方法实现我这个问题的,可以给建议。

...全文
307 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
vc555 2008-08-20
  • 打赏
  • 举报
回复
如果只在一台做DML操作,另一台只需同步这些操作数据而自生不做任何操作,可以用data guard

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

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



范佩西_11 2008-08-20
  • 打赏
  • 举报
回复
另外一台数据库就是做正常业务的。就是尽可能的使两台数据库同步。一台数据是用来增删改,另外一台同步增删改。
范佩西_11 2008-08-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 liuyi8903 的回复:]
10G 可以用streams

另外,你的另一台库是干什么的?容灾?还是做查询?或者要做正常业务?
[/Quote]
streams是什么?能详细介绍下吗
liuyi8903 2008-08-20
  • 打赏
  • 举报
回复
10G 可以用streams

另外,你的另一台库是干什么的?容灾?还是做查询?或者要做正常业务?
vc555 2008-08-20
  • 打赏
  • 举报
回复
只同步部分表,那就用streams或者advanced replication,不过这些个配置不如DG简单。
范佩西_11 2008-08-20
  • 打赏
  • 举报
回复
我要做的是单向同步,并且只需要做一部分表的同步。大概有40个表。
范佩西_11 2008-08-19
  • 打赏
  • 举报
回复
请问大家再提供一些同步两台数据库的方法!
范佩西_11 2008-08-19
  • 打赏
  • 举报
回复
[Quote=引用 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数据库都可以同步的增加删除或修改…
[/Quote]
可以给我个步骤写把代码也写清楚不?写好我直接给分。
wjlsmail 2008-08-19
  • 打赏
  • 举报
回复
可参考我发的http://topic.csdn.net/u/20080819/10/4acdea17-4d99-4e0b-a7c7-da7d01d261ce.html
中的方法。

另外对多用户的同步,如有经验请指点一下,多谢!
oracledbalgtu 2008-08-19
  • 打赏
  • 举报
回复
120同步表建立物化视图日志。
130建立物化视图。
创建刷新组:DBMS_REFRESH.MAKE
要刷新的物化视图添加到刷新组DBMS_REFRESH.ADD
ok了。
[Quote=引用楼主 linzhangs 的帖子:]
两台数据库IP地址分别为192.168.1.120和192.168.1.130. 120数据库为主数据库,130数据库为辅数据库。现在120和130里的数据表结构和数据完全相同。现在要做个同步,使得120数据库中的一部分表,增加删除修改数据,而130数据库都可以同步的增加删除或修改。注意此同步为单向同步,就是让130数据库中跟120数据库中数据相同。表结构不会发生变化。
网上给的建议是使用dblink,再使用快照。然后再写触发器。我先创建dblink conne…
[/Quote]
oracledbalgtu 2008-08-19
  • 打赏
  • 举报
回复
晕倒。。。
因为是单向复制,所以不能修改目的数据库,只能修改源数据库。

[Quote=引用 7 楼 linzhangs 的回复:]
我做完之后,没有实现同步阿。并且在目的数据库中修改数据库,提示次试图的数据操纵操作非法。
[/Quote]
范佩西_11 2008-08-19
  • 打赏
  • 举报
回复
我做完之后,没有实现同步阿。并且在目的数据库中修改数据库,提示次试图的数据操纵操作非法。
oracledbalgtu 2008-08-19
  • 打赏
  • 举报
回复

--在主数据库和物化视图数据库分别创建连接对方的数据库连接(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;
/
[Quote=引用 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数据库中的一部分表,增加删除修改数据…
[/Quote]
范佩西_11 2008-08-19
  • 打赏
  • 举报
回复
高手帮忙。给解决方案!

17,377

社区成员

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

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