Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » MobiLink - 服务器管理 » 使用 MobiLink 服务器技术 » 同步技术 » 处理失败的下载

 

恢复失败的下载

下载故障是由下载过程中的通信错误或用户取消下载引起的。MobiLink 服务器保存客户端尚未接收的下载数据以用于可重新启动的下载。使用 -ds 选项,减小分配给可重新启动下载的最大数据量,可降低发生下载故障的可能性。服务器仅在发生以下情况之一时才释放下载数据:

  • 用户成功完成下载。

  • 用户通过新的同步请求进行恢复,但未启用下载恢复。

  • 进来的请求需要使用高速缓存。此时将优先清除最早未成功的下载。

MobiLink 能够帮助恢复下载故障,并防止重新传输整个下载。此功能对 SQL Anywhere 和 UltraLite 远程数据库有不同的实现方法。请参见-ds 选项

SQL Anywhere 远程数据库

下载过程中同步失败时,下载的数据不应用到远程数据库,但成功传输的下载部分会存储在远程设备的临时文件中。Dbmlsync 使用此文件来避免进行长时间的数据重新传输,以及从下载故障中恢复过来。

有三种方法可以实现此功能。在任何情况下,如果存在要上载的新数据,dbmlsync 都会中止,恢复的下载也会失败。

  • -dc   下载失败后,下次启动 dbmlsync 时可使用 -dc 恢复下载。如果失败下载的部分内容已被传输,则 MobiLink 服务器将仅传输该下载的剩余部分。

    有关详细信息,请参见-dc 选项

  • ContinueDownload (cd) 扩展选项   在 dbmlsync 命令行上使用时,cd 扩展选项的作用与 -dc 选项相同。也可以将此选项存储在数据库中,或使用 sp_hook_dbmlsync_set_extended_options 在单一同步中设置此选项。

    请参见ContinueDownload (cd) 扩展选项sp_hook_dbmlsync_set_extended_options

  • sp_hook_dbmlsync_end 挂接   可以使用 restart 参数来恢复下载。如果将 restartable download 参数设置为 true,则下载是可以恢复的。如果下载文件存在而且大小一定,则还可以在挂接中创建逻辑以恢复下载。

    请参见sp_hook_dbmlsync_end

UltraLite 远程数据库

可以如下所示控制 UltraLite 应用程序在下载失败后的行为:

  • 如果在同步时将 Keep Partial Download 同步参数设置为 true,且下载在完成前失败,则 UltraLite 会应用已下载的部分更改。UltraLite 还会将 Partial Download Retained 同步参数设置为 true。

    此时,UltraLite 数据库可能会处于不一致状态。根据应用程序的不同,您可能希望确保同步成功完成或在允许对数据进行更改之前回退。请参见Keep Partial Download 同步参数Partial Download Retained 同步参数

  • 要恢复下载,请将 Resume Partial Download 同步参数设置为 true 并再次进行同步。请参见Resume Partial Download 同步参数

    重新启动的同步不执行上载,而只下载那些本应由失败的下载所下载的更改。也就是说,它将完成失败的下载,但不同步自上一次尝试以来所做的更改。要获得这些更改,您需要在失败的下载完成后再次进行同步,或调用 Rollback Partial Download 并进行同步(将 Resume Partial Download 设置为 false)。

    重新启动下载时,会自动再次使用失败同步的许多同步参数。例如,将忽略发布参数:同步会下载初始下载时要求的那些发布。唯一需要设置的参数是 Resume Partial Download 参数(必须设置为 true)和 User Name 参数。此外,如果设置的话,应遵循对以下参数的设置:

    • Keep Partial Download(在出现进一步中断的情况下)
    • DisableConcurrency
    • observer
    • User Data
  • 要在不恢复同步的情况下回退失败的下载所做的更改,请调用回退更改的函数。对于嵌入式 SQL,该函数是 ULRollbackPartialDownload 函数。对于 UltraLite 组件,它是一种针对 Connection 对象的方法。

    如果由于服务器或网络不可用等原因导致无法完成同步,而您想在允许最终用户继续工作的同时保持一致的数据集,那么您可能希望回退失败的下载所做的更改。

有关通信错误的详细信息,请参见错误消息

注意

如果 send_download_ack 同步参数设置为 true,则恢复的下载将会忽略该设置。