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

SQL Anywhere 11.0.1 (中文) » SQL Remote » SQL Remote 复制设计 » SQL Remote 复制设计和设置

 

为每个数据库指派唯一的标识号

必须为每个远程数据库指派一个不同的标识号。您可以通过多种方法来创建和分发标识号。一种方法是将这些值放置在一个表中,然后根据其它一些唯一属性(例如用户名)将该表中相应的行下载到每个数据库。

使用 global_database_id 选项

每个数据库中的公共选项 global_database_id 都必须设置为一个唯一的非负整数。某一特定数据库的缺省值范围是从 pn + 1 到 p(n + 1),其中 p 为分区大小,而 n 为公共选项 global_database_id 的值。例如,如果分区大小为 1000 而 global_database_id 设置为 3,则范围就是从 3001 到 4000。

当 global_database_id 设置为非负整数时,SQL Anywhere 将应用以下规则来选择缺省值:

  • 当列不包含当前分区中的任何值时,第一个缺省值为 pn + 1。

  • 如果列包含当前分区中的值,但都小于 p(n + 1),则下一个缺省值为该范围内上一个最大值加 1。

  • 缺省列值不受列中当前分区外的值的影响;也就是说,不受小于 pn + 1 或大于 p(n + 1) 的值的影响。如果通过 MobiLink 同步从另一个数据库中复制了这些值,则这些值就可能存在。

如果将公共选项 global_database_id 设置为缺省值 2147483647,则在列中插入空值。如果不允许空值,则插入行的尝试将导致错误。例如,如果列包含在表的主键中,便会发生这种情况。

由于不能将公共选项 global_database_id 设置为负值,因此所选值始终为正。最大标识号仅受列数据类型和分区大小的限制。

当分区内的可用值用完时,也会生成空缺省值。在此示例中,应为数据库指派一个新的 global_database_id 值,以便可以从另一个分区中选择缺省值。如果该列不允许使用空值,则插入空值的尝试将导致错误。若要检测提供的未用值是否过小并处理此情况,请创建一个 GlobalAutoincrement 类型的事件。

如果某特定分区中的值已用尽,您可以为该数据库指派一个新的数据库 ID。您可以通过任何简便的方式指派新的数据库 ID。但是,一种可行的方法是维护未使用的数据库 ID 值的池。该池的维护方式与主键池的维护方式相同。请参见使用主键池

可以设置一个事件处理程序,在分区快要用尽时自动通知数据库管理员(或执行其它操作)。请参见定义事件的触发条件

另请参见

设置 global_database_id 值
抽取数据库时设置唯一数据库标识号