新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > Sybase教程 > 正文:MobiLink开发资源集之数据分区第一部分

MobiLink开发资源集之数据分区第一部分

新客网 XKER.COM 2007-08-03 来源: 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"。

 

共2页: 上一页 [1] [2] 下一页
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐