目前很多软件厂商针对移动设备的数据库同步解决方案,这些方案主要分为两种:第一种,是针对某种特定数据库提供的数据同步方案,比如SQL Sever的RDA和Replication、Oracle Lite和Sybase SQL Anywhere等;第二种是ISV开发的针对不同数据库的数据同步方案。
SQL Mobile支持两种数据同步的方法:Remote data access(RDA)和Replication。这两种方法都支持从远程的SQL Server服务器中下载数据到设备端的SQL Mobile数据库中,在本地对数据进行浏览和修改,再将修改结果更新到SQL Server服务器中。
RDA和Replication都需要配置SQL Mobile Server Tools,也就是说,必须要有一个运行IIS的Web Server。Server Tools的主要作用是将移动设备通过网络发送的数据库访问请求,转发给SQL Server数据库,并将结果集发送回移动设备中。根据智能设备应用程序的用途、功能、规模和要求来决定在 Microsoft SQL Server 2005 Mobile Edition (SQL Server Mobile) 应用程序中使用远程数据访问 (RDA) 还是使用复制。每个连接数据解决方案都有不同的优点和缺点。
一、 RDA架构
运行于设备上的 Microsoft SQL Server 2005 Mobile Edition (SQL Server Mobile) 应用程序可以使用远程数据访问 (RDA):
应用程序可以组合使用这些技术。例如,销售支持应用程序可能将价格列表下载到设备上,并在设备上捕获和上载新的订单。应用程序还可以直接将 SQL 语句提交到 SQL Server 数据库。
远程数据访问 (RDA) 使用 Microsoft SQL Server 2005 Mobile Edition (SQL Server Mobile) 的三个组件:SQL Server Mobile 数据库引擎、SQL Server Mobile 客户端代理和 SQL Server Mobile 服务器代理。
RDA 使用 Microsoft Internet 信息服务 (IIS) 作为服务器上 SQL Server 数据库和设备上 SQL Server Mobile 数据库之间的通信机制。SQL Server Mobile 数据库引擎、SQL Server Mobile 客户端代理和 SQL Server Mobile 服务器代理协同工作才可以完成 RDA,如下面的关系图所示。
二、 复制的架构
在 Microsoft SQL Server 2005 Mobile Edition (SQL Server Mobile) 中,复制使用下列组件:
SQL Server Mobile 数据库引擎
SQL Server Mobile 数据库引擎 可管理设备上的本地数据库。对于订阅数据库,SQL Server Mobile 数据库引擎 可通过维护每条记录的更改跟踪信息,跟踪所有插入、更新或删除的数据库记录。
SQL Server Mobile 客户端代理
SQL Server Mobile 客户端代理是设备上主要的 SQL Server Mobile 复制组件。SQL Server Mobile 客户端代理可实现 SQL Server Mobile Replication 对象接口。应用程序可调用此接口,通过编程方式控制复制。
SQL Server Mobile 服务器代理
SQL Server Mobile 服务器代理是负责管理 SQL Server 和 SQL Server Mobile 之间通信的组件。SQL Server Mobile 服务器代理位于运行 Microsoft Internet 信息服务 (IIS) 的服务器上,可以处理从 SQL Server Mobile 客户端代理发出的所有 HTTP 请求。
SQL Server 协调器和 SQL Server Mobile 复制提供程序
在执行同步时,SQL Server 协调器将调用 SQL Server Mobile 复制提供程序。SQL Server 协调器和 SQL Server Mobile 复制提供程序都位于运行 IIS 的服务器上,该服务器上还安装有 SQL Server Mobile 服务器工具。在启动 SQL
三、 RDA和复制的比较
RDA 和复制都适用于无线传输。使用压缩可减小传输的数据量。在传输期间可以使用加密来保护敏感的用户数据。
功能 |
复制 |
RDA |
交换所跟踪的数据更改 |
在服务器和客户端之间复制更改 列级跟踪 – 通过仅传输更改的列数据,减少数据传输量 行级跟踪 – 传输整行 |
仅从客户端到服务器推送更改。完成接收服务器更改所需的客户端数据的更新。 行级跟踪 – 传输整行 |
可以从其传播数据的表的数量 |
多个表 – 与在发布中定义的一样多 |
每个 RDA 方法对应一个表。 |
可以传播的表的类型 |
控制数据流的不同类型的表 在发布(服务器)中添加或删除表是自动复制的,而无须在客户端上重新初始化订阅 |
不适用 在服务器上添加或删除表不会自动复制到客户端。 |
约束和索引 |
引用完整性约束和索引是从服务器自动复制的。 |
不会复制引用完整性约束,可以选择复制索引。其他架构定义必须在客户端上定义。 |
冲突 |
冲突包括由不同用户更改的数据 和因错误而未应用的行。 在服务器上解决和管理冲突 支持内置和自定义冲突解决程序。 |
冲突仅包括因错误而未应用的行。RDA 不检测数据是否已由其他用户更改。 不管理冲突,但可以选择在客户端上的错误表中进行报告。 无冲突解决程序。 |
架构更改 |
可以复制架构更改(如添加/删除列、添加/删除约束或更改列定义)。 |
不允许进行架构更改。如果架构已更改,则客户端必须删除客户端上的表,并再次从服务器请求所有数据。根据架构更改的不同,推送可能会失败。 |
标识列 |
手动和自动处理标识范围。支持 BigInt 和 Int 列。 |
手动处理标识范围。支持 BigInt 和 Int 列。 |
数据/架构定义 |
配置发布时在服务器上进行;创建订阅时在客户端上自动对其进行定义。 |
将数据从服务器请求到客户端时,在客户端上进行数据和架构定义。 |
工具 (UI) |
支持用于创建和管理订阅的大量工具,以及用于管理多个订阅、观察性能和同步时间的监视工具 |
不支持任何工具。 |
服务器入侵 |
将表和列添加到服务器数据库以管理复制。 |
不对服务器上的数据库进行更改。 |
四、 mobile数据同步的配置
大家也可以参考 Sql server 2005 book online ,但是有些东西,觉得它写的不是很清楚。
我们需要一下五步来完成我们的数据同步,当然了机器上必须要安装上开发环境。开发环境的具体配置我们等下再说。
1、创建 sql server 2005的数据库发布。
2、配置该发布的web同步(也就是配置IIS)
3、创建订阅(于创建发布对应)
4、创建应用程序
5、部署发布并测试
预备工作:
软件要求如下:
1. xp系统
2. IIS(5.0以上)默认安装的系统是没有安装IIS的
安装步骤:
(1)、插入windows xp安装光盘,打开控制面板,然后打开其中的“添加/删除程序”
(2)、在添加或删除程序窗口左边点击“添加/删除Windows组建”
(3)、捎带片刻系统会启动Windows组建向导,在Internet信息服务(IIS)前面选勾,点击下一步:
(4)、系统安装成功,系统会自动在系统盘新建网站目录,默认目录为:C:/Inetpub/wwwroot
3.SQL Server 2005,XP不能用SQL Server 服务器版,要用开发版或个人版,开发版功能和服务器版差不多,下载地址如下:http://www.downsite.cn/rj/cs_sql_2005_dev_all_dvd.rar
推荐完全安装,注意要把客户端组件安装上。
创建数据库并在其中填充数据
(1) 打开 SQL Server Management Studio。
(2) 当提示您连接服务器时,请在“服务器名称”中键入 (local),然后单击“连接”。
(3) 打开一个新查询窗口。创建一个 SQLMobile 数据库,并在该数据库中填充数据。
USE master;
GO
DROP Database SQLMobile;
GO
CREATE DATABASE SQLMobile;
GO
USE SQLMobile;
GO
CREATE TABLE MembershipData (MemberID INTEGER IDENTITY (1,1) CONSTRAINT pkMemberID PRIMARY KEY, MemberName NVarChar (50));
CREATE TABLE FlightData (MemberID INTEGER FOREIGN KEY REFERENCES MembershipData(MemberID), Destination NVarChar (50), FlightStatus NVarChar(50), ArrivalDate DATETIME, FlownMiles INTEGER);
INSERT INTO MembershipData (MemberName) VALUES ('Mr Don Hall');
INSERT INTO MembershipData (MemberName) VALUES ('Mr Jon Morris');
INSERT INTO MembershipData (MemberName) VALUES ('Ms TiAnna Jones');
INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (1, 'Seattle', 'Flight Delayed 1 hour', '8/25/00', '20000');
INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (2, 'London', 'Flight on time', '9/12/00', '15000');
INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (3, 'Sydney', 'Flight Gate Closing', '11/5/00', '30000');
INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (1, 'Tokyo', 'Delayed Fog', '5/25/00', '25000');
INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (2, 'Minneapolis', 'Flight on time', '5/1/00', '1000');
INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (3, 'Memphis', 'Flight Gate Closing', '1/5/00', '1000');
(4) 单击“执行(!)”运行该脚本并创建数据库。
注意: |
您还可以按 F5,或者从“查询”菜单中选择“执行”来运行该查询。 |
此时,将运行该脚本,创建一个名为 SQLMobile 的新数据库。
现在我们开始我们的数据同步工作
1, 为Sql Server Agent 创建一个用户。
(1)、在“开始”菜单上,右键单击“我的电脑”,然后选择“控制面板”-〉“管理工具”。
(2)、在“计算机管理”中,展开“系统工具”,展开“本地用户和组”,右键单击“用户”,然后选择“新用户”。
(3)、在“新用户”对话框中,键入以下信息,然后单击“创建”,在这里我们用"SnycTest"帐户,设置密码"admin",,隶属于administrators,并只设置密码永不过期的属性。
2、创建快照文件夹。
在盘符中创建新的文件夹,并为它赋予相应的权限。
创建办法:我的电脑→C:→新建文件夹→命名为"snapshot"→右键→共享和安全→共享→共享此文件→权限→添加→高级→立即查找→选择SnycTest→确定→并付给权限:更改和读取。安全选项卡→如同上面添加SnycTest用户→并设置权限为一下四个:读取和运行,列出文件夹目录,读取,写入。 (如果电脑的文件夹没有设置用户权限的选项,工具->文件夹选项->查看->去掉"简单文件共享"前的钩就行了;是NTFS才有安全选项)
至此我们的准备工作就可以了。
3,创建发布。
具体方法:
(1)、在对象资源管理器中,展开“(本地)”节点(如果当前尚未展开),然后展开“复制”。
(2)、右键单击“发布”文件夹,然后选择“新建发布”。
(3)、在新建发布向导简介屏幕上,单击“下一步”。
1. 如果以前未曾在此计算机上创建发布,将提示您配置分发服务器。选择第一个选项将本地计算机作为它自己的分发服务器,然后单击“下一步”。
2. 如果以前未曾在此计算机上创建发布,将提示您指定快照文件夹。键入在前面过程中创建的快照文件夹的共享路径。以 //servername/share 格式键入共享路径,不要键入本地路径。在此演练中,我们建议您键入 //computer/snapshot(其中 computer 是您计算机的名称),然后单击“下一步”。
3. 在数据库列表中,选择“SQLMobile”,然后单击“下一步”。
在发布类型列表中,选择“合并发布”,然后单击“下一步”。 下一步我们选择要发布的数据库SQLMobile,→发布类型,在这里有个四个发布类型
快照发布:
发布服务器按预定的时间间隔向订阅服务器发送已发布数据的快照。
事务性发布:
在订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器。
具有可更新订阅的事务性发布:
在 SQL Server 订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器。来自订阅服务器的事务被应用于发布服务器。
合并发布:
在订阅服务器收到已发布数据的初始快照后,发布服务器和订阅服务器可以独立更新已发布数据。更改会定期合并。Microsoft SQL Server Mobile
Edition 只能订阅合并发布。
4. 在“订阅服务器类型”页中,选择“是”启用对 SQL Server Mobile 订阅服务器的支持,然后单击“下一步”。
5. 在要发布的对象列表中,选中“表”复选框。如果展开“表”,您将发现 SQLMobile 数据库中的两个表都已被选中。单击“下一步”。
6. 会通知您将向表中添加唯一标识符。所有合并项目都需要一个 uniqueindentifier 列。单击“下一步”。
7. 在“筛选表行”页中,现在即可添加对已发布数据的筛选器。对于此演练,您将无需筛选数据。单击“下一步”。
8. 在“快照代理”页中,您可以配置创建快照的时间以及快照代理运行的频率。单击“下一步”以接受默认设置。
9. 在“代理安全性”对话框中,单击“安全设置”。
在“快照代理安全性”对话框中,输入前面过程中所创建帐户的登录信息。进程帐户为 computer_name/SnycTest(其中 computer_name
是您计算机的名称),密码为 admin。
单击“确定”以保存设置。
a. 单击“确定”以保存设置。
b. 在“代理安全性”页中,单击“下一步”。
10. 在“向导操作”屏幕上,您可以确定创建发布的时间以及是否希望创建脚本文件。单击“下一步”以接受默认选择。
11. 在“完成该向导”屏幕上,键入 SQLMobile 作为发布的名称,然后单击“完成”。
12. 将创建发布。向导完成后,单击“关闭”。
您必须为快照代理帐户和 IIS 匿名用户帐户授予权限。还必须将 IIS 匿名用户帐户添加到发布访问列表 (PAL) 中。
4.1设置数据库权限
1. 在 的对象资源管理器中,展开“安全性”,右键单击“登录名”,然后选择“新建登录名”。
2. 在“新建登录名”对话框中,选择“Windows 身份验证”,单击“搜索”,在“输入要选择的对象名称”框中键入 computername/SnycTest(其中 computername 为您的计算机名称),单击“检查名称”,然后单击“确定”。
3. 在导航窗格中,选择“用户映射”窗格。
4. 在数据库列表中,选择“distribution”和“db_owner”角色,选择“SQLMobile”和“db_owner”角色,然后单击“确定”。
5. 右键单击“登录名”,然后选择“新建登录名”。
6. 在“新建登录名”对话框中,选择“Windows 身份验证”,单击“搜索”,在“输入要选择的对象名称”框中键入 computername/iusr_computername(其中 computername 为您的计算机名称),单击“检查名称”,然后单击“确定”。
7. 在导航窗格中,选择“用户映射”窗格。
8. 在数据库列表中,选择“distribution”和“SQLMobile”,然后单击“确定”。
4.2 授予发布权限
1. 在对象资源管理器中,展开“复制”,展开“发布”,右键单击“[SQLMobile]:SQLMobile”发布,然后单击“属性”。
2. 在导航窗格中,选择“发布访问列表”。
3. 单击“添加”。在“添加发布访问项”对话框中,列出了 IUSR 帐户。选择该帐户,然后单击“确定”。
4. 请确保 IUSR 帐户当前位于 PAL 中,然后单击“确定”。
只有在创建发布快照之后才可对 SQLMobile 发布的订阅进行初始化。
创建发布快照
在进行下一操作之前,请确保已成功完成快照作业。
5、配置 Web 同步
既然 SQL Server 已经配置了发布,您必须使该发布可以被 SQL Server Mobile 客户端通过网络进行访问。SQL Server Mobile 通过 IIS 连接到 SQL Server。特别是,您可以创建并配置一个虚拟目录,以允许客户端访问 SQL Server Mobile 服务器代理。
1. 在 Windows 资源管理器中,导航到以下目录:
C:/Program Files/Microsoft SQL Server/90/Tools/Binn/VSShell/Common7/IDE(如果装在D盘,可能在D:/Program Files/Microsoft SQL
Server/90/Tools/Binn/VSShell/Common7/IDE)
2. 双击 sqlce30setupen.msi 运行安装程序。
3. 在“安装”向导的简介屏幕上,单击“下一步”。
4. 阅读并接受 EULA 条款,然后单击“下一步”。
5. 在“系统配置检查”屏幕上,确保所有项都通过检查。如果尚未安装 SQL Server 2000,将列出该列表的最后一项作为警告。因为您正在使用 SQL Server 2005,这并不是问题。单击“下一步”。
6. 在接下来的屏幕上,单击“下一步”,然后单击“安装”开始安装。
7. 单击“Finish”。
1. 在 SQL Server Management Studio 的对象资源管理器中,展开“(本地)”计算机节点。
2. 右键单击“复制”文件夹,然后选择“配置 Web 同步”。
3. 在该向导的简介屏幕上,单击“下一步”。
4. 在“订阅服务器类型”屏幕上,选择“SQL Server Mobile Edition”,然后单击“下一步”。
5. 在“Web 服务器”屏幕的“运行 IIS 的计算机”文本框中,键入您计算机的名称(如果尚未提供),然后单击“创建新的虚拟目录”。
6. 在显示的树中,展开该计算机,展开“网站”,然后选择“默认网站”。
7. 单击“下一步”。
8. 在“虚拟目录信息”屏幕上的“别名”文本框中,键入 SQLMobile,然后单击“下一步”。
9. 在“客户端身份验证”屏幕上,选择“客户端将以匿名方式进行连接”,然后单击“下一步”。
10. 在“匿名访问”屏幕上,单击“下一步”接受默认设置。
11. 在“快照共享访问”屏幕上,键入 //computer/snapshot(其中 computer 是您计算机的名称),然后单击“下一步”。
如果收到快照共享为空的警告,请单击“是”。
12. 单击“Finish”。
13. 单击“关闭”。
5.3 SQL Server Mobile 任务
在部署将要使用 SQL Server Mobile 的应用程序之前,预先创建 SQL Server Mobile 数据库和订阅通常会节省时间。SQL Server Management Studio 允许您在本地计算机上创建并使用 SQL Server Mobile 数据库。然后,您可以在开发应用程序时使用此数据库。
1. 在 SQL Server Management Studio 的对象资源管理器中,单击“连接”,然后选择“SQL Server Mobile”。
2. 在“数据库文件”字段中,选择“<新建数据库…>”。
3. 在文件名文本框中,键入 c:/sqlmobile.sdf,然后单击“确定”。
4. 在“连接到服务器”对话框中,单击“连接”。
将在对象资源管理器中添加名为“SQL Server Mobile [My Computer/.../sqlmobile]”的新节点。
1. 在对象资源管理器中,展开“SQL Server Mobile”节点,展开“复制”,右键单击“订阅”,然后选择“新建订阅”。
2. 在简介屏幕上,单击“下一步”。
3. 在“选择发布”屏幕的“发布服务器”下拉列表中,选择“<查找 SQL Server 发布服务器…>”。
4. 在“连接到服务器”对话框,键入或选择本地计算机,然后单击“连接”。
5. 在“选择发布”屏幕的发布列表中,展开“SQLMobile”,选择“SQLMobile”发布,然后单击“下一步”。
6. 在“标识订阅”屏幕上,为订阅名称键入 SQLMobile,然后单击“下一步”。
7. 在“Web 服务器身份验证”屏幕上,键入前面过程中创建的虚拟目录的 URL。在此演练中,您已经创建了 URL 为 http://localhost/SQLMobile 的虚拟目录。
8. 单击“订阅服务器将以匿名方式进行连接”,然后单击“下一步”。
9. 在“SQL Server 身份验证”屏幕上,单击“下一步”接受默认设置。
在最终屏幕上,该向导将显示示例代码,您可以在应用程序中创建订阅时使用该代码。选择示例代码(Visual Basic 或 C#,取决于您在创建应用程序时使用的语言),然后复制代码。若要执行复制操作,请选择该代码并按 Ctrl+C。启动记事本或其他文本编辑器,然后粘贴示例代码。在使用下列步骤创建应用程序时,您将使用此代码。
10. 在复制示例代码之后,单击“完成”。
11. 单击“关闭”。