当 subscribe_by_remote 选项设置为 On 时,来自远程数据库的对 SUBSCRIBE BY 值为 NULL 或空字符串的行执行的操作会假定远程用户预订了该行。缺省情况下,subscribe_by_remote 选项设置为 On。
subscribe_by_remote 选项解决了在不使用该选项时某些发布可能会引发的问题。以下发布对 Customers 表预订表达式使用一个子查询,这是因为客户可能与若干个销售代表相关:
CREATE PUBLICATION SalesRepData ( TABLE SalesReps, TABLE Policy SUBSCRIBE BY rep_key, TABLE Customers SUBSCRIBE BY ( SELECT rep_key FROM Policy WHERE Policy.cust_key = Customers.cust_key ), ); |
例如,Marc Dill 是一个销售代表,他刚刚和一个新客户商定了一个策略。他在 Customers 表中插入一个新行并在 Policy 表中也插入一行以将这个新客户指派给他自己。
在统一数据库中,SQL Remote 会执行 Customers 行的插入操作,SQL Anywhere 会在插入操作执行时在事务日志中记录下预订值。
随后,当 SQL Remote 对事务日志进行扫描时,会从预订表达式生成一个预订者列表,但 Marc Dill 不在该列表中,因为还未应用 Policy 表中将客户指派给他的那个行。如果 subscribe_by_remote 被设置为 Off,则结果是将这个新客户作为一个 DELETE 语句发送回 Marc Dill。
只要 subscribe_by_remote 设置为 On,SQL Remote 就会假定该行与插入它的销售代表相关联,也不会将 INSERT 复制回 Marc Dill,并且复制系统保持原样。
如果 subscribe_by_remote 设置为 Off,则您必须确保 Policy 行在 Customers 行之前插入,并通过将检查推迟到事务结束来避免参照完整性违规。
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |