在 UltraLite 中,同步首先打开通过配置的通信流(也称为网络协议)进行的与 MobiLink 服务器之间的特定连接。除了对直接网络连接的同步支持之外,Palm OS 设备还支持 HotSync 同步,Windows CE 设备还支持 ActiveSync 同步。
与 MobiLink 服务器同步的每个 UltraLite 远程数据库都通过网络协议进行同步。使用同步流参数设置网络协议。支持的网络协议包括 TCP/IP、HTTP、HTTPS 和 TLS。对于所选择的协议,还需要提供用于定义其它必需连接信息(例如 MobiLink 服务器主机和端口)的流参数。
还必须通过 user_name 和版本参数提供 MobiLink 用户信息和同步脚本版本。
可以通过设置不同的同步参数来控制同步行为。设置参数的方式取决于您所使用的特定 UltraLite 接口。
要考虑的重要行为包括:
同步方向 缺省情况下,同步为双向。如果仅需要单向同步,则记得使用相应的 upload_only 或 download_only 参数。通过执行单向同步,可最大程度缩短所需的同步时间。另外,对于仅下载同步,不必在同步前提交对 UltraLite 数据库进行的所有更改。对同步中未涉及的表的未提交更改不会进行上载,因此,未完成的事务不会导致问题发生。
若要使用仅下载同步,必须确保不在本地更改与下载重叠的行。如果有任何数据进行了本地更改,则 UltraLite 应用程序中的同步将失败,并出现 SQLE_DOWNLOAD_CONFLICT 错误。
同步期间的并发更改 在上载阶段,UltraLite 应用程序可以用只读方式访问 UltraLite 数据库。在下载阶段,允许进行读写访问,但如果应用程序更改了下载随后试图要更改的行,则下载将失败并回退。可以通过设置 disable_concurrency 同步参数来禁用同步期间对数据的并发访问。
以同步信息结构字段的形式为会话提供所需的同步参数和协议选项。
例如,使用 C/C++ API 时,通过在 ul_synch_info 结构中设置相应的值,向 UltraLite 应用程序添加同步:
ul_synch_info info; // define a sync structure named "info" ULEnableTcpipSynchronization( &sqlca ); // use a TCP/IP stream conn->InitSynchInfo( &info ); // initialize the structure info.stream = ULSocketStream(); // specify the Socket Stream info.stream_parms= UL_TEXT( "host=myMLserver;port=2439" ); // set the MobiLink host information info.version = UL_TEXT( "custdb 11.0" ); // set the MobiLink version information info.user_name = UL_TEXT( "50" ); // set the MobiLink user name info.download_only =ul_true; // make the synchronization download-only |
初始化同步。
对于基于 TCP/IP 的直接同步,将调用 API 特定的同步函数。这些函数将返回一个布尔值,指明同步操作是成功还是失败。如果同步失败,可查看另一结构中的详细错误状态字段,以获取更多的错误信息。
对于 HotSync 同步,必须使用 ULSetSynchInfo 函数,从而以参数形式提供 ul_synch_info 结构。这将 ul_synch_info 结构附加到当前数据库,以供用于随后的同步。
对于 ActiveSync 同步,必须从 ActiveSync 提供程序捕获同步消息,并使用 DoSync 函数调用 ULSynchronize。
如果要向用户报告同步进度,可使用观察器回调函数。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |