程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase綜合文章 >> 解析MobiLink實現基於時間戳的分區同步

解析MobiLink實現基於時間戳的分區同步

編輯:SyBase綜合文章

一 建庫及數據源

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修改數據,同步到中央數據庫。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved