加载中…
个人资料
  • 博客等级:读取中…
  • 博客积分:读取中…
  • 博客访问:读取中…
  • 关注人气:读取中…
相关博文
加载中…
推荐博文
加载中…
谁看过这篇博文
加载中…
正文 字体大小:
异构数据库同步(2009-11-01 11:20:01)
标签:it 分类:数据库

MOBILINK

SQL Anywhere Studio MobiLink

异构数据库同步

sql   remote

使用MOBILINK进行同步复制,在sql2000上装一个MOBILINK同步服务器,在A\N之间配一个同步复制即可

 

MobiLink开发资源集之简单的数据同步

步骤清单:

相信大家都看过了这个屏幕录像,大概能明白MobiLink是做什么的了,简单说,MobiLink是做数据同步的。 [信息来源"岁月联盟"]

MobiLink 同步允许在符合 ODBC 标准的统一数据库和 Adaptive Server Anywhere 或 UltraLite 远程数据库之间进行复制。在本教程中使用的是 Adaptive Server Anywhere 远程数据库。统一数据库可以是使用 Sybase Adaptive Server Anywhere、Sybase Adaptive Server Enterprise、Oracle、Microsoft SQL Server 或 IBM DB2 生成的数据库。 (Syue.com)

MobiLink 适用于将一个统一数据服务器与大量远程数据库进行同步(通常包含多个移动数据库)。远程站点的管理和资源要求已降到了最低限度。此系统是基于连接的,并且远程站点可随时进行连接。在每次进行连接之后,数据库是完全同步的。 [Syue.com]

MobiLink 的工作方式是:将远程数据库上的多个事务的结果合并成一个更改集,然后应用到统一数据库中。因为同步始终在事务边界进行的,所以保持了参照完整性。不保留在组件事务过程中所做的各个更改的顺序:因为从不复制未提交的数据,所以保留了数据完整性。 信息来自"岁月联盟"

从体系结构上说,MobiLink分为服务器端和客户端两部分。MobiLink服务器与统一数据库连接(ASA、ASE、SQL Server、Oracle...),MobiLink客户端则与远程数据库连接(ASA或UltraLite)。 资源来自"岁月联盟"

进行同步时,当 MobiLink 远程站点打开与 MobiLink 同步服务器的连接时,通常便开始了同步过程。同步期间,远程站点的 MobiLink 客户端将上载自上一次同步以来对远程数据库所作的更改。MobiLink 同步服务器在收到这些数据时开始更新统一数据库,然后将统一数据库中的更改下载到远程数据库。

(www.Syue.com)

 

所以,我们需要在远程数据库上建立发布,CREATE PUBLICATION,告诉MobiLink Client,这些表的这些列是需要同步的。例如:

(www.Syue.com)

 

CREATE PUBLICATION Lab_all
(
TABLE dept,
TABLE emp
) 
WWW.SYUE.COM

以上语句表明,Lab_all这个发布将会让MobiLink客户端在同步时组织dept表和emp表的上载流数据。目前是组织两个表中的自上一次修改以来变化的所有数据作为上载流,当然,也可以通过在发布上加列,加条件完成。例如:

资源来自"岁月联盟"

 

CREATE PUBLICATION pub_customer 
( TABLE customer ( id, company_name, city, state ) 
WHERE status = 'active' )。 
WWW.SYUE.COM

共3页: [1]

 

当然,我们也需要在远程数据库上建立同步用户:

[内容来自"岁月联盟"]

 

CREATE SYNCHRONIZATION USER "SIMPLE" 
["岁月联盟"提供]

接下来,就建立一个SYNCHRONIZATION SUBSCRIPTION。这是为MobiLink用户定义预定发布。预定发布将告诉MobiLink客户端,在同步时,这个用户和其对应的发布将使用什么样的方式连接到MobiLink服务器,并使用MobiLink服务器端指定版本的同步脚本来进行同步。例如: ["岁月联盟"提供]

CREATE SYNCHRONIZATION SUBSCRIPTION TO Lab_all
FOR "SIMPLE"
TYPE 'TCPIP'
ADDRESS 'host=localhost;port=2439'
OPTION ScriptVersion='Lab01' [本文来自"岁月联盟"] 

这就是说,SIMPLE这个用户,在MobiLink客户端将使用Lab_all这个发布把数据进行上/下载。他使用TCPIP协议,通过与 localhost 2439端口通信连接上MobiLink服务器,并且在同步过程中使用MobiLink服务器端版本号为Lab01的同步脚本。

["岁月联盟"提供]

 

然后,作为最简单的例子,我们启动同步服务器: [资源来自"岁月联盟"]

dbmlsrv9 -c "dsn=center" -x tcpip -o 
mlserver.mls -v+ -dl -za -zu+ [信息来自"岁月联盟"] 

他将不进行用户验证(-zu+),也会自动生成同步脚本(-za)(因为在前面的步骤中我们没有建立同步脚本)。当然,MobiLink Server也将连接到中心数据库center。其他几个选项都是用于日志什么的。

["岁月联盟"提供]

 

启动同步服务器后,可以在同步客户端上触发同步:

SYUE.COM

 

dbmlsync -c "dsn=remote" -o dbmlsync.out -v 
-e "SendColumnNames=ON" 
[信息来源"岁月联盟"]
 

当MobiLink服务器端未建立同步脚本时,需要指定SendColumnNames=ON,以便让MobiLink客户端发送列名,以便MobiLink服务器端自动生成同步脚本。其他选项用于日志、连接远程数据库等。

"岁月联盟"提供

 

在本部分的屏幕录像中,我们即展示了这种最简单的同步方式,没有用户验证,没有错误处理,没有冲突处理,服务器端自动生成同步脚本。如需要这些进一步的功能,请继续关注我们后续的内容。

[资源来自"岁月联盟"]

 

以下是屏幕录像中的全部脚本:

资源来自"岁月联盟"

 

脚本: WWW.SYUE.COM

命令行: [www.Syue.com]

dbinit center.db

dbinit remote.db [www.Syue.com] 

建立ODBC center & remote ["岁月联盟"]

dbisql下,对center创建数据库模式:

本文来自"岁月联盟"

 

CREATE TABLE dept(
deptno CHAR(4) NOT NULL PRIMARY KEY,
deptname VARCHAR(20))

CREATE TABLE emp(
empno INTEGER IDENTITY NOT NULL PRIMARY KEY,
empname VARCHAR(20),
gender BIT,
deptno CHAR(4) NOT NULL,
FOREIGN KEY (deptno) REFERENCES dept (deptno)) www.Syue.com 

共3页: [2]

 

对center添加数据:

INSERT INTO dept VALUES('0000', 'HQ')
INSERT INTO dept VALUES('0001', 'Sales')
INSERT INTO dept VALUES('0002', 'Marketing')
INSERT INTO dept VALUES('0003', 'Admin')
INSERT INTO dept VALUES('0004', 'Education')
INSERT INTO dept VALUES('0005', 'Presales')
INSERT INTO dept VALUES('0006', 'Support')
COMMIT


BEGIN
DECLARE @count INTEGER
SET @count = 1
WHILE (@count <= 2000)
BEGIN
INSERT INTO emp(empname, gender, deptno) 
VALUES('PERSON' + STR(@count,4), MOD(@count, 2), 
'000' + str(MOD(@count, 7),1))
SET @count = @count + 1
END
END (www.Syue.com) 

对remote数据库: 内容来自"岁月联盟"

CREATE TABLE dept(
deptno CHAR(4) NOT NULL PRIMARY KEY,
deptname VARCHAR(20))

CREATE TABLE emp(
empno INTEGER IDENTITY NOT NULL PRIMARY KEY,
empname VARCHAR(20),
gender BIT,
deptno CHAR(4) NOT NULL,
FOREIGN KEY (deptno) 
references re_dept (deptno)) 
信息来自"岁月联盟"

建立publication: SYUE.COM

CREATE PUBLICATION Lab_all
(
TABLE dept,
TABLE emp
) [www.Syue.com] 

建立同步用户: "岁月联盟"

CREATE SYNCHRONIZATION USER "SIMPLE" 
"岁月联盟"

建立SYNCHRONIZATION SUBSCRIPTION:

[Syue.com]

 

CREATE SYNCHRONIZATION SUBSCRIPTION TO Lab_all
FOR "SIMPLE"
TYPE 'TCPIP'
ADDRESS 'host=localhost;port=2439'
OPTION ScriptVersion='Lab01' [信息来自"岁月联盟"] 

命令行下:

[来源"岁月联盟"]

 

启动同步服务器: "岁月联盟"提供

dbmlsrv9 -c "dsn=center" -x tcpip -o 
mlserver.mls -v+ -dl -za -zu+ (www.Syue.com) 

触发同步: [信息来源"岁月联盟"]

dbmlsync -c "dsn=remote" -o dbmlsync.out 
-v -e "SendColumnNames=ON" 来源"岁月联盟" 

共3页: [3]

阅读 评论 收藏打印举报
已投稿到:
加载中,请稍候......
  • 评论加载中,请稍候...

验证码: 请点击后输入验证码 收听验证码

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

新浪BLOG意见反馈留言板 不良信息反馈 电话:95105670 提示音后按2键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有