MobiLink开发资源集之同步数据冲突处理

http://tech.ddvip.com   2007年08月06日    社区交流

内容摘要:在 MobiLink 客户端向 MobiLink 同步服务器发送一个更新后的行时,发送的数据中不仅包含该行的新值(后映像),而且还将包含旧行值的副本(前映像)。如果前映像与统一数据库中的当前值不匹配,表示检测到了冲突。

  对remote2:

UPDATE emp SET deptno = '0005' WHERE empno = 1
COMMIT

  再次同步remote2

  dbmlsync -c "dsn=remote2" -v -o dbmlsync2.out -e "sv=remote1"

  对remote1

UPDATE emp SET deptno = '0002' WHERE empno = 1
COMMIT

  同步remote1

dbmlsync -c "dsn=remote1" -v -o
dbmlsync1.out -e "sv=remote1"

  对center:

CREATE GLOBAL TEMPORARY TABLE emp_new(

  empno INTEGER NOT NULL PRIMARY KEY,

  empname VARCHAR(20),

  gender BIT,

  deptno CHAR(4),

  last_modified TIMESTAMP);

  CREATE GLOBAL TEMPORARY TABLE emp_old(

  empno INTEGER NOT NULL PRIMARY KEY,

  empname VARCHAR(20),

  gender BIT,

  deptno CHAR(4),

  last_modified TIMESTAMP)

  CALL ml_add_connection_script(

  'remote1',

  'end_upload',

  'DROP TABLE emp_new;

  DROP TABLE emp_old');

  CALL ml_add_table_script(

  'remote1',

  'upload_fetch',

  'SELECT empno, empname, gender, deptno,

  last_modified FROM emp WHERE empno = ?'

  )

  CALL ml_add_table_script(

  'remote1',

  'emp',

  'upload_old_row_insert',

  'INSERT INTO emp_old VALUES(?,?,?,?)');

  CALL ml_add_table_script(

  'remote1',

  'emp',

  'upload_new_row_insert',

  'INSERT INTO emp_new VALUES(?,?,?,?)');

  CALL ml_add_table_script(

  'remote1',

  'emp',

  'resolve_conflict',

  'CALL ResolveConflictDemo()');

  COMMIT;

  ALTER OR REPLACE PROCEDURE ResolveConflictDemo()

  BEGIN

  UPDATE emp e

  SET e.deptno = en.deptno

  FROM emp_new en

  WHERE e.empno = en.empno

  AND en.deptno < e.deptno;

  DELETE FROM emp_new;

  DELETE FROM emp_old;

  END;

责编:豆豆技术应用

正在加载评论...