Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92334566
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Sybase

2008-04-10 20:51:52

 来源:赛迪网    作者:Sybase

我们这里用upload_fetch:

CALL ml_add_table_script(
'remote1',
'upload_fetch',
'SELECT empno, empname, gender, deptno, last_modified FROM emp WHERE empno = ?'
)

出现冲突时,可以使用临时表(或永久表)和 resolve_conflict 脚本加以解决。

例如,我们可以先建两个临时表,然后在upload_old_row_insert表事件中把统一数据库的旧值插入专门存放旧值的临时表,然后再 upload_new_row_insert表事件中把想要更新的值插入专门存放新值的临时表。接下来就可以在resolve_conflict表事件中解决冲突了。

当然,除了通过resolve_conflict事件解决冲突,我们也可利用upload_update、end_upload来解决冲突。在本部分的屏幕录像中,我们先展示了没有自定义冲突处理时候MobiLink对冲突的默认解决方案,即后者决定的策略。在此之后,我们又自定义了新的MobiLink冲突解决方案,让部门号较小的更新成为最终值。

本部分的脚本如下:

先建立两个目录:remote1 & remote2。

把数据库分别拷贝。

启动个数据库,中心叫center,其余两个一个叫remote1,一个叫remote2。

重新建立remote1和remote2的ODBC

对3个库分别执行:

ALTER TABLE emp ADD last_modified 
TIMESTAMP DEFAULT TIMESTAMP

 

dbisql:

remote1:


CREATE PUBLICATION Lab_05
(
TABLE emp
)

CREATE SYNCHRONIZATION USER "remote1"

CREATE SYNCHRONIZATION SUBSCRIPTION TO Lab_05
FOR "remote1"
TYPE 'TCPIP'
ADDRESS 'host=localhost;port=2439'
OPTION ScriptVersion='remote1'


 

 

remote2:

CREATE PUBLICATION Lab_05
(
TABLE emp
)

CREATE SYNCHRONIZATION USER "remote2"

ALTER SYNCHRONIZATION SUBSCRIPTION TO Lab_05
FOR "remote2"
TYPE 'TCPIP'
ADDRESS 'host=localhost;port=2439'
OPTION ScriptVersion='remote1'



center:

CALL ml_add_table_script('remote1', 'emp',
 'download_cursor', 'SELECT * FROM emp WHERE 
last_modified > ?');

 

CALL ml_add_table_script('remote1', 'emp', 
'upload_update', 'UPDATE emp SET empname=?, 
gender=?, deptno=? WHERE empno=?');


COMMIT
阅读(461) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~