网页教学网
 当前位置: 网页教学网 >> 网络编程 >> 数据库编程技术 >> 阅读:解析MobiLink实现基于时间戳的分区同步
[ HTML ] [ FW ] [ DW ] [ FP ] [ JS ] [ XML ] [ CSS ] [ 图象 ] [ FLASH ] [ .NET ] [ ASP ] [ JSP ] [ PHP ] [ 数据 ] [ 系统 ] [ 安全 ] [ 素材 ] [ 建站 ] [ 主机 ] [ 入门 ] [ 技巧 ]

解析MobiLink实现基于时间戳的分区同步

http://www.webjx.com  更新日期:2007-08-06 09:10  出处:网页教学网  作者:

一 建库及数据源

1.建立数据库

在cmd下执行,中央数据库consol

D:\mobilink>dbinit consol

两个远程数据库zhou1 zhou2

D:\mobilink>dbinit zhou1
D:\mobilink>dbinit zhou2

2.启动服务

在命令行下敲dbsrv9,在弹出的对话框中选择数据库文件,并敲入相应的服务名, 按照这种方式启动consol zhou1 zhou2 服务。

3.建立odbc数据源

consol zhou1 zhou2

二 处理中央数据库

1.dbisql 连接到consol数据库

执行以下语句:

-- 建表,owner列作为分区用, active 用作逻辑删除 last_modified 用作时间戳同步,只在中央数据库需要这三列,远程数据库不需要。

create table employee(id int NOT NULL PRIMARY KEY,
name varchar(128),
owner varchar(128),
active int default 1, last_modified
timestamp DEFAULT timestamp)
-- 录入数据      
insertinto employee(id, name, owner,
active ) values (1, '小桥', 'zhou1', 1)
insert into employee(id, name, owner,
active ) values (2, '流水', 'zhou2', 1)
insert into employee(id, name, owner,
active ) values (3, '人家', 'zhou1', 1)
commit
go
-- 加入脚本版本及脚本
  call ml_add_table_script( 'version1',
'employee', 'upload_insert', 'insert into
employee(id, name) values (?,?)' )
  go
  call ml_add_table_script( 'version1',
'employee', 'upload_update', 'update employee
set name=? where id = ?' )
  go
  call ml_add_table_script( 'version1',
'employee', 'upload_delete', 'delete from
employee where id = ?' )
  go
  call ml_add_table_script( 'version1',
'employee', 'download_cursor','select id,
name from employee where last_modified > ?
and owner = ? and active = 1' )
  go
  call ml_add_table_script( 'version1',
'employee', 'download_delete_cursor',
'select id from employee  where last_modified>?
and (owner !=? or active = 0)' )
  go

-- 注意go 前面不要有空格。为了保持格式,这里是有空格的,执行时要注意。

2.注册两个同步用户zhou1

zhou2密码分别是zhou1 zhou2 在cmd下执行

dbmluser -c "dsn=consol" -u zhou1 -p zhou1
dbmluser -c "dsn=consol" -u zhou2 -p zhou2

三 处理远程数据库zhou1

用dbisql 连接到zhou1,执行以下语句:

-- 建表
  create table employee(id int  NOT NULL PRIMARY KEY,
 
  name varchar(128))
  insert into employee(id, name ) values (1, '小桥')
  insert into employee(id, name ) values (3, '流水')
  commit
  go
  -- 建立发布
  CREATE PUBLICATION pub_employee (
  TABLE employee
  )
  go
  -- 建立同步用户
  CREATE SYNCHRONIZATION USER zhou1
  go
  -- 为zhou1用户建立预定
  CREATE SYNCHRONIZATION SUBSCRIPTION
  TO pub_employee
  FOR zhou1
  TYPE 'tcpip'
  ADDRESS 'host=localhost'
  OPTION sv='version1';
  go

四、处理远程数据库zhou2

用dbisql 连接到zhou2,执行以下语句:

create table employee(id int NOT NULL PRIMARY KEY, name varchar(128))
  insert into employee(id, name) values (2, '孙红')
  commit
  -- 建立发布
  CREATE PUBLICATION pub_employee (
  TABLE employee
  )
 
  -- 建立同步用户
  CREATE SYNCHRONIZATION USER zhou2
 
  -- 为zhou2用户建立预定
  CREATE SYNCHRONIZATION SUBSCRIPTION
  TO pub_employee
  FOR zhou2
  TYPE 'tcpip'
  ADDRESS 'host=localhost'
  OPTION sv='version1';

五 插入并删除

做些数据,向consol数据库分别插入zhou1 zhou2的数据,并删除各删除一条。

insert into employee(id, name, owner, active )
values (4, 'zhou1新增', 'zhou1', 1)
  insert into employee(id, name, owner, active )
values (5, 'zhou2新增', 'zhou2', 1)
  update employee set active = 0 where id = 1
  update employee set active = 0 where id = 2
  commit

六、启动同步服务器

dbmlsrv9 -c "dsn=consol" -o mlserver.mls -v+ -dl

七 启动客户端

dbmlsync -c "dsn=zhou1" -o
dbmlsync1.out -v  -u zhou1 -mp zhou1
 dbmlsync -c "dsn=zhou2" -o
dbmlsync2.out -v  -u zhou2 -mp zhou2

八 结果

zhou1数据库
id,name
3,'人家'
4,'zhou1新增'
zhou2数据库
id,name
5,'zhou2新增'

可以看到,新增的zhou1的数据只同步到zhou1数据库,新增的zhou2的数据只同步到zhou2数据库,实现了分区。

通过限制last_modified,实现了时间戳同步。有兴趣可以试试在zhou1 zhou2修改数据,同步到中央数据库。

关键词:数据库,MobiLink
推荐给好友】【关闭】【收藏本文
最新五条评论
查看全部评论
评论总数 0
您的评论
用户名: 新注册) 密 码: 匿名:
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为