我们这里用upload_fetch:
CALL ml_add_table_script(
'remote1',
'upload_fetch',
'SELECT empno, empname, gender, deptno, last_modified FROM emp WHERE empno = ?'
) |
出现冲突时,可以使用临时表(或永久表)和 resolve_conflict 脚本加以解决。
例如,我们可以先建两个临时表,然后在upload_old_row_insert表事件中把统一数据库的旧值插入专门存放旧值的临时表,然后再 upload_new_row_insert表事件中把想要更新的值插入专门存放新值的临时表。接下来就可以在resolve_conflict表事件中解决冲突了。
当然,除了通过resolve_conflict事件解决冲突,我们也可利用upload_update、end_upload来解决冲突。在本部分的屏幕录像中,我们先展示了没有自定义冲突处理时候MobiLink对冲突的默认解决方案,即后者决定的策略。在此之后,我们又自定义了新的MobiLink冲突解决方案,让部门号较小的更新成为最终值。
本部分的脚本如下:
先建立两个目录:remote1 & remote2。
把数据库分别拷贝。
启动个数据库,中心叫center,其余两个一个叫remote1,一个叫remote2。
对3个库分别执行:
ALTER TABLE emp ADD last_modified
TIMESTAMP DEFAULT TIMESTAMP
dbisql:
remote1:
CREATE PUBLICATION Lab_05
(
TABLE emp
)
CREATE SYNCHRONIZATION USER "remote1"
CREATE SYNCHRONIZATION SUBSCRIPTION TO Lab_05
FOR "remote1"
TYPE 'TCPIP'
ADDRESS 'host=localhost;port=2439'
OPTION ScriptVersion='remote1'
remote2:
CREATE PUBLICATION Lab_05
(
TABLE emp
)
CREATE SYNCHRONIZATION USER "remote2"
ALTER SYNCHRONIZATION SUBSCRIPTION TO Lab_05
FOR "remote2"
TYPE 'TCPIP'
ADDRESS 'host=localhost;port=2439'
OPTION ScriptVersion='remote1'
center:
CALL ml_add_table_script('remote1', 'emp',
'download_cursor', 'SELECT * FROM emp WHERE
last_modified > ?');
CALL ml_add_table_script('remote1', 'emp',
'upload_update', 'UPDATE emp SET empname=?,
gender=?, deptno=? WHERE empno=?');
COMMIT | |
阅读(482) | 评论(0) | 转发(0) |