在部署应用程序时,必须为每个数据库指派一个不同的标识号。您可以通过多种方法来创建和分发标识号。一种方法是将值放置在表中,并根据某些其它的唯一属性(例如远程 ID)将合适的行下载到每个数据库。
在 SQL Anywhere 中,可通过设置公共选项 global_database_id 的值来设置数据库的全局 ID。该标识号必须为非负的整数。请参见global_database_id 选项 [数据库]。
在 UltraLite 中,可通过设置 global_id 选项来设置数据库的全局 ID。请参见UltraLite global_database_id 选项。
全局数据库 ID 在 SQL Anywhere 中使用公共选项 global_database_id 来设置,而在 UltraLite 中使用 global_id 选项来设置。
每个数据库中的全局数据库 id 选项都必须设置为唯一的非负整数。某一特定数据库的缺省值范围是从 pn + 1 到 p(n + 1),其中 p 为分区大小,而 n 为全局数据库 ID 的值。例如,如果分区大小为 1000 而全局数据库 ID 设置为 3,则范围就是从 3001 到 4000。
SQL Anywhere 和 UltraLite 使用以下规则选择缺省值:
如果在当前分区中列不包含任何值,则第一个缺省值为 pn + 1,其中 p 为分区大小,而 n 为全局数据库 ID 的值。
如果列包含当前分区中的值,但都小于 p(n + 1),则下一个缺省值为该范围内上一个最大值加 1。
缺省列值不受列中当前分区外的值的影响;也就是说,不受小于 pn + 1 或大于 p(n + 1) 的值的影响。如果通过 MobiLink 同步从另一个数据库中复制了这些值,则这些值就可能存在。
如果全局数据库 ID 设置为缺省值 2147483647,则将向该列插入一个空值。如果不允许空值,则插入行的尝试将导致错误。例如,如果列包含在表的主键中,便会发生这种情况。
因为全局数据库 ID 不能设置为负值,所以所选值始终为正数。最大标识号仅受列数据类型和分区大小的限制。
当分区内的可用值用完时,也会生成空缺省值。在此情况下,应向数据库指派一个新全局数据库 ID 值,以允许从其它分区选择缺省值。如果该列不允许使用空值,则插入空值的尝试将导致错误。要检测提供的未使用值是否太小并处理此情况,可创建一个 GlobalAutoincrement 类型的事件。
如果一个特定分区中的值已接近用完,您可以为该数据库指派一个新的全局数据库 ID。您可以使用任何简便的方式指派新的数据库 ID。但是,一种可行的方法是维护未使用的数据库 ID 值的池。该池的维护与主键池的维护方法相同。
可以设置一个事件处理程序,在分区快要用尽时自动通知数据库管理员(或执行其它操作)。有关 SQL Anywhere 数据库的信息,请参见定义事件的触发条件。
在 SQL Anywhere 数据库中,以下语句将数据库标识号设置为 20。
SET OPTION PUBLIC.global_database_id = 20 |
如果特定列的分区大小为 5000,则在 100001-105000 范围内选择此数据库的缺省值。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |