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 模型 » MobiLink 模型简介

 

MobiLink 模型的限制

下面是使用 [创建同步模型向导] 和 [模型] 模式时的一些限制:

  • 在模型之外作出的更改无法重新部署   如果部署模型后在该模型之外对其进行了更改,则这些更改不会保存在模型中。如果只是将模型用作起始点,而随后部署模型,接着在模型之外进行所有的更改,那么不会出现任何问题。但如果希望能够重新部署该模型,则最好在 [模型] 模式中进行更改,以便保存更改并能够重新部署这些更改。

  • DB2 主机   MobiLink 模型不使用 DB2 主机统一数据库。

  • MobiLink 系统数据库   不能使用 MobiLink 系统数据库。

  • 多个发布   不能创建多个发布。部署模型之后,可以使用非模型方法(如 CREATE PUBLICATION 语句)添加更多发布,但不能执行反向工程将这些添加的发布返回模型中。

  • 视图   在选择用于表映射的统一数据库表时,不能选择视图。

  • 生成的远程数据库   如果在 [创建同步模型向导] 中创建新的远程模式,则新的远程数据库各列将不包含统一数据库中各列的外键、索引或缺省列值。UltraLite 数据库不支持 NCHAR 或 NVARCHAR 列,因此不能使用具有这些数据类型列的统一数据库表来为 UltraLite 远程数据库生成新的远程模式。部署后,您可以创建或更改远程模式,然后更新模型的模式。

  • 计算列   如果想要同步具有计算列的统一数据库表,则不能上载到表。如果部署具有计算列的同步模型,则在创建用于基于时间戳下载的触发器时部署可能会发生错误。解决办法可以是将计算列从同步中排除,或者将表配置为仅下载(使用快照下载或编辑生成的统一 SQL 文件,将计算列从触发器定义中移除)。

    部署新的远程模式来创建新的远程数据库时,复制计算列会导致语法错误。处理计算列时应执行以下操作之一:

    • 将同步模型部署到现有远程数据库。

    • 从远程模式中排除计算列。请注意,如果要同步具有计算列的统一数据库表,则不能上载到该表。

    Microsoft SQL 服务器 AdventureWorks 示例数据库包含计算列。如果使用此数据库创建模型,请将这些计算列设置为仅下载或将其从同步中排除。

  • 逻辑删除   MobiLink 同步模型支持逻辑删除,它会假定逻辑删除列仅存在于统一数据库中,而不在远程数据库中。在将统一模式复制到新的远程模式时,将忽略所有与模型的同步设置中的逻辑删除列相匹配的列。对于新模型,将删除缺省列名称。

    将逻辑删除列名称添加至远程模式:

    1. 在向导中,选择 [使用逻辑删除]。

    2. 重命名逻辑删除列,以使其不与统一数据库中的任何列名称相匹配。

    3. 完成向导后,更新远程模式并保留缺省表选择。逻辑删除列名称将出现在模式更改列表中,并将被添加到远程模式中。

    注意

    您需要设置列映射,将远程数据库的逻辑删除列映射到统一数据库的逻辑删除列。

部署注意事项
  • 对象名过长   部署时创建的数据库对象名称的长度可能要超过数据库所支持的名称长度(因为新对象名称通过向基表名称添加后缀创建而成)。如果发生这种情况,请仅部署到文件(而非直接部署到数据库)并编辑生成的 SQL 文件以替换出现的所有该过长名称。

  • 新远程模式   如果在 [创建同步模型向导] 中创建新的远程模式,则新的远程数据库各列将不包含统一数据库中各列的索引。外键和缺省列值被复制到新的远程数据库中,但是,此支持依赖于由 ODBC 驱动程序返回的数据库元数据,并且可能会因为驱动程序问题而导致语法错误或其它错误。例如,如果驱动程序报告一个缺省列值,但采用的格式不能用于在 SQL Anywhere 或 UltraLite 远程数据库中声明此类缺省列值,则会产生错误(包括部署时的语法错误)。

    部署新的远程模式来创建新的远程数据库时,复制计算列会导致语法错误。处理计算列时应执行以下操作之一:将其部署到现有远程数据库以避免使用模型的远程模式,或者

    • 将同步模型部署到现有远程数据库。

    • 从远程模式中排除计算列。请注意,如果要同步具有计算列的统一数据库表,则不能上载到该表。

    UltraLite 数据库不支持 NCHAR 或 NVARCHAR 列,因此不能使用具有这些数据类型列的统一数据库表来为 UltraLite 远程数据库生成新的远程模式。

    部署后,您可以创建或更改远程模式,然后更新模型的模式。

  • 代理表   可以与用于将表代理到另一数据库的统一数据库表保持同步,但如果使用 TIMESTAMP 列来进行基于时间戳的下载,则还需要将 TIMESTAMP 列同时添加到基表和代理表中。[部署同步模型向导] 无法向代理表或其基表添加列,因此您需要使用基表和代理表中的现有列,或是使用影子表或快照下载。

  • 实例化视图   如果您在使用基于时间戳的下载并且选择了将时间戳列添加到统一表中,在部署前您必须禁用依赖于表的任何实例化视图。否则,在尝试变更表时可能会出错。对于 SQL Anywhere 统一数据库,使用 sa_dependent_views 系统过程找出表是否具有相关的实例化视图。请参见 sa_dependent_views 系统过程。

其它注意事项
  • 创建基于 Oracle 统一数据库的远程数据库   当使用 Oracle 统一数据库作为 SQL Anywhere 或 UltraLite 远程数据库的基础时,最好将统一数据库中的 DATE 列更改为 TIMESTAMP。否则,在上载时将丢失次秒级信息。

  • 代理表   如果要使用通过触发器维护的影子表,则触发器和影子表应在基表上。基表上的触发器无法修改用于为基表定义代理表的数据库中的影子表。