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

SQL Anywhere 12.0.0 (中文) » MobiLink - 服务器管理 » MobiLink 事件 » 编写同步脚本 » 编写用于下载行的脚本

 

编写 download_delete_cursor 脚本

编写 download_delete_cursor 脚本以从远程数据库中删除行。您必须为下载涉及的远程数据库中的每个表编写其中一个脚本。如果您不希望删除行,请将每个脚本定义为 --{ml_ignore}。或者,您可以使用 ml_add_missing_dnld_scripts 系统过程将缺失的下载脚本定义为已忽略。请参见ml_add_missing_dnld_scripts 系统过程

仅在统一数据库中删除行,不能使它们在远程数据库中消失。您需要跟踪已删除行的主键,以便使用 download_delete_cursor 选择这些主键。有两种常用技术可以实现这一点:

  • 逻辑删除   不在统一数据库中物理删除行。而是用一个状态列来跟踪行是否有效。这简化了 download_delete_cursor。但是,可能需要对 download_cursor 和其它应用程序进行修改,以使它们能识别和使用状态行。如果您有一个记录删除时间的上次修改列,而且您还对每个远程数据库的上次下载时间进行跟踪,则在所有远程下载时间都晚于删除时间时,即可物理地删除该行。

  • 影子表   为您想要跟踪其删除操作的每个表创建一个包含两个列的影子表:一个列存放该表的主键,另一列存放时间戳。创建一个只要行被删除就会向影子表中插入主键和时间戳的触发器。然后,您的 download_delete_cursor 就可以从这个影子表中进行选择。与逻辑删除一样,一旦所有远程数据库都下载了相应的数据,您就可以将该行从影子表中删除。

MobiLink 服务器通过从统一数据库选择主键值并将这些值传递到远程数据库,来实现远程数据库中行的删除。如果这些值与远程数据库中的主键值相匹配,则该行将被删除。

  • 您要下载删除的每个 download_delete_cursor 脚本必须包含一个 SELECT 语句或对返回结果集的存储过程的调用。MobiLink 服务器将使用此语句在统一数据库中定义游标。

  • 如果您始终不希望 download_delete_cursor 选择任何行,请将脚本定义为 --{ml_ignore}。

  • 此语句必须选择与远程数据库表中的主键列对应的所有列。统一数据库中的列可以与远程数据库中相应的列具有不同的名称,但是列的类型必须相互兼容。

  • 必须按照与值对应的列在远程数据库中定义的顺序选择值。此顺序是用于创建表的 CREATE TABLE 语句中的列顺序,而不是列在定义主键的语句中出现的顺序。

  • 如果您通过 download_delete_cursor 删除远程数据库中的父记录,则子记录也会自动删除。

    有关删除子记录的详细信息,请参见参照完整性与同步

 删除表中的所有行
 示例
 注意
 另请参见