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