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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Sybase

2008-04-10 20:50:12

来源:赛迪网    作者:Sybase

步骤清单:

上一部分,我们了解了MobiLink的大致工作机理,并且介绍了一些事件和事件内的脚本。上一部分中,有一个脚本是这样的:

CALL ml_add_table_script('demo2', 'emp', 
'download_cursor', 'SELECT * FROM emp WHERE 
deptno=''0001''');

它是为版本为demo2的脚本建立了一个对emp表下载时的命令,要求之下载符合deptno = '0001'的数据。但是我们来想象一个情况,我们往往都是喜欢灵活的一些SQL。例如,不同部门的人下载不同的数据,而且可能要求下载或者上传自上次同步以来的数据,即增量同步。这两种需求都可以通过我们的数据分区来实现。也就是说,我们把数据中心的数据按照一定的规则划分,每次只下载/上传部分数据。

在这一部分,我们先看如何将数据分区的第一部分:根据用户分区数据。

在很多事件里,尤其是表事件,都会有一个事件参数,叫ml_username。它是一个VARCHAR(128)的变量,MobiLink的用户名会传入该事件中,我们即可使用该变量以达到数据分区的效果。我们来看一个例子,例如download_cursor表事件,里面有两个事件参数,第一个是 last_download,TIMESTAMP数据类型;第二个参数是ml_username,VARCHAR(128)数据类型。这两个参数都可以在事件脚本中用?代替。同步时,MobiLink会将参数一一传送给?。所以,第一个?接收第一个参数,第二个?接收第二个参数。参看这个语句:

CALL ml_add_table_script(
'demo3',
'emp',
'download_cursor',
'SELECT * FROM emp WHERE ? IS NOT NULL AND deptno = ?');

其中,?IS NOT NULL中的?是用来接收last_download这个参数的,所以这个?在这里只是占位符,没有实际意义;第二个问号,也就是deptno = ?是用来接收ml_username的。所以,在以上语句中,download_cursor仅会让deptno符合ml_username的数据下载。其他很多事件中都有这个参数。具体参考《MobiLink 同步技术用户指南》。

所以,在此之前,你可以建立一个用户,叫:

0002:CREATE SYNCHRONIZATION USER "0002"

然后将该用户添加至MobiLink服务器端:dbmluser -c "dsn=center" -u 0002 -p abcdefg

在同步的时候,MobiLink服务器端不要开启-zu+开关,客户端触发同步时,分别用-u和-mp参数指定用户名和口令:

dbmlsync -c "dsn=remote" -o dbmlsync.out -v 
-u 0002 -mp abcdefg -e "sv=demo3"。
阅读(314) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~