MobiLink开发资源集之MobiLink脚本综述
步骤清单:
在上一议题中,我们演示了一个最简单的数据同步情景。由此,我们有几点总结:
MobiLink 由服务器端(dbmlsrv9)和客户端(dbmlsync)组成。服务器端与数据中心连接,客户端与远程数据库连接。其中,数据中心可以是任何符合 ODBC标准的数据源,例如Oracle、IBM DB2、MS SQLServer与Sybase ASE等。
MobiLink在同步的过程中首先将远程数据库的数据上载,接着将数据中心的数据下载,以此完成一次同步。
在非常简单的情况下,不需要编写任何脚本。
但是情况总是会变化的。我们可能有特殊要求。例如,我们只需要某一个部门的数据,我们不想把所有的更改都上传到服务器上……那么,通过什么来指挥MobiLink上载或者下发哪些数据呢?就通过在统一服务器端编写的MobiLink的事件和事件中的脚本来控制。
首先,MobiLink的事件分为两大类, 第一大类是连接事件,这类事件在全局范围内指挥MobiLink的行为。第二类事件是表事件,这类事件在某表的范围内指挥MobiLink的行为。MobiLink在不同的阶段触发这些事件,书写在这些事件里面的脚本就能指挥MobiLink的行为。
连接事件:
|
两个特殊的连接事件:
|
表事件:
|
需要注意的是,在连接事件和表事件中有一些重复的事件,例如begin_upload,不过它们作用的级别不一样,触发的时间也不一样。对于所有的连接事件,我们都用调用ml_add_connection_script存储过程来实现其中的脚本;对于所有的表事件,我们都通过调用ml_add_table_script存储过程来实现其中的脚本。
例如:
|
第一个参数是代表脚本版本,第二个参数指明连接事件的名称,第三个参数指定连接事件触发时的逻辑,在这里是调用一个存储过程。再看一个表事件的例子:
|
第一个参数代表脚本版本,第二个参数指明该事件跟哪个事件相关,第三个参数指明事件的名称,第四个参数是事件触发时执行的语句。在这里,我们指定服务器只将emp中满足deptno='0001'的数据下载至远程。
upload_delete、upload_update和upload_insert里面的参数都是通过?占位符表示的。详细信息,请参看《MobiLink 同步技术用户指南》。
在本部分的屏幕录像中,我们仅使用了针对emp表的update_delete和download_cursor两个事件来指挥只有部门号为0001的数据能下载到远程数据库中,并且在远程数据库中做的删除动作能反映到中心数据库。在服务器启动的过程中去掉了-za+选项,让服务器不要自动生成脚本,去掉了-zu+的选项,通过dbmluser来添加用户,形成真实的用户验证。并且在同步dbmlsync触发同步的过程中,我们去掉了SendColumnNames=ON的扩展选项,因为我们在服务器端已经定义了同步脚本。
以下是屏幕录像中的全部脚本:
将在上一议题的Demo中备份的数据库文件拷贝过到新的文件夹下,在命令行中分别启动中心与远程数据库:
|
对于remote:
|
对center:
|
在控制台下:
|
其中,sv是ScriptVersion的简写。