在下载过程中记录参照完整性违规。
名称 | 值 | 说明 |
---|---|---|
publication_n (in) |
发布 |
不建议使用。改用 subscription_n。正被同步的发布,其中 n 是一个整数。每个正在同步的发布都有一个 publication_n 条目。n 的编号从零开始。 |
MobiLink user (in) |
MobiLink 用户名 |
您正在为其进行同步的 MobiLink 用户。 |
foreign key table (in) |
表名 |
包含为其调用挂接的外键列的表。 |
primary key table (in) |
表名 |
为其调用挂接的外键所引用的表。 |
role name (in) |
角色名 |
为其调用挂接的外键的角色名。 |
script version (in) |
脚本版本名称 |
将用于同步的 MobiLink 脚本版本。 |
subscription_n (in) | 预订名称 | 正在进行同步的预订的名称,其中 n 是一个整数。每个正在同步的预订都有一个 subscription_n 条目。n 的编号从零开始。 |
当下载中的行违反了远程数据库的外键关系时,会发生下载 RI 违规。使用此挂接可以在发生下载 RI 违规时记录 RI 违规,以便在以后调查违规原因。
下载完成后,但在提交之前,dbmlsync 将检查 RI 违规。如果 dbmlsync 发现任何 RI 违规,它将确定有 RI 违规的外键并调用 sp_hook_dbmlsync_download_log_ri_violation(如果实现了此存储过程)。然后调用 sp_hook_dbmlsync_download_ri_violation(如果实现了此存储过程)。如果仍有冲突,dbmlsync 会删除违反外键约束的行。对剩下的有 RI 违规的外键重复此过程。
只有在 RI 违规涉及当前正在同步的表时,才调用此挂接。如果 RI 违规涉及的表当前没有同步,则不调用此挂接并且同步失败。
此挂接在 dbmlsync 用于下载的一个单独的连接上被调用。此挂接所使用的连接的隔离级别是 0,从而此挂接可以看到从尚未提交的下载中应用的行。此挂接的操作在其完成后立即提交,以便保留此挂接所做的更改,不论下载是被提交还是被回退。
由于此挂接是在单独的连接上执行的,因此您在访问在挂接过程中正在同步的表时应谨慎使用,因为 dbmlsync 可能会锁定这些表。这些锁定可能会导致挂接中的操作失败或无限期等待。
不要试图用此挂接修正 RI 违规问题。此挂接应该只用于记录。使用 sp_hook_dbmlsync_download_ri_violation 来解决 RI 违规。
假定您使用下面的表记录参照完整性违规。
CREATE TABLE DBA.LogRIViolationTable ( entry_time TIMESTAMP, pk_table VARCHAR( 255 ), fk_table VARCHAR( 255 ), role_name VARCHAR( 255 ) ); |
以下示例记录当在远程数据库上检测到参照完整性违规时的外键表名、主键表名和角色名。信息存储在远程数据库的 LogRIViolationTable 中。
CREATE PROCEDURE sp_hook_dbmlsync_download_log_ri_violation() BEGIN INSERT INTO DBA.LogRIViolationTable VALUES( CURRENT_TIMESTAMP, (SELECT value FROM #hook_dict WHERE name = 'Primary key table'), (SELECT value FROM #hook_dict WHERE name = 'Foreign key table'), (SELECT value FROM #hook_dict WHERE name = 'Role name' ) ); END; |
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |