dbaccess CREATE DATABASE tmp WITH LOG; CREATE TABLE t (a int); CLOSE DATABASE; CREATE DATABASE tmp@apex WITH LOG; CREATE TABLE t (a int); CLOSE DATABASE; DATABASE tmp; BEGIN WORK; INSERT INTO t VALUES (2); INSERT INTO tmp@apex:t VALUES (2); COMMIT WORK; ### return code -698
addr len type xid id link ..... 17018 16 CKPOINT 0 0 13018 0 18018 20 BEGIN 2 1 0 08/27/91 10:56:57 3482 nhowe 1802c 32 HINSERT 2 0 18018 1000018 102 4 1804c 40 CKPOINT 0 0 17018 1 begin xid id addr user 1 2 1 1802c nhowe 19018 72 BEGPREP 2 0 1802c 6d69 1 19060 16 COMMIT 2 0 19018 08/27/91 11:01:38 1a018 16 ENDTRANS 2 0 19060 580543
addr len type xid id link ..... 16018 20 BEGIN 2 1 0 08/27/91 10:57:07 3483 pault 1602c 32 HINSERT 2 0 16018 1000018 102 4 1604c 68 PREPARE 2 0 1602c eh 17018 16 HEURTX 2 0 1604c 1 17028 12 CLR 2 0 1602c 17034 16 ROLLBACK 2 0 17018 08/27/91 11:01:22 17044 40 CKPOINT 0 0 15018 1 begin xid id addr user 1 2 1 17034 -------- 18018 16 ENDTRANS 2 0 17034 8806c3 ....
首先您要尝试将当前数据库服务器日志中的事务与 apex 数据库服务器日志中的事务相匹配。BEGPREP 和 PREPARE 日志记录均包含 GTRID。您可以通过使用 onlog -l 以及查看 BEGPREP 和 PREPARE 日志记录的数据部分来抽取 GTRID。GTRID 在数据部分中偏移了 22 字节,长为 68 字节。更为简单但是准确度较低的方法是查看 COMMIT 或 ROLLBACK 记录的时间。 虽然由于将落实(或回滚)消息从协调者传输至参与者所用时间而导致稍有延迟,但这两个时间必须很接近。(第二个方法缺乏准确度,因为虽然来自同一协调者的并发事务很可能不在同一时间落实,但并发事务是可以在同一时间落实的。)
DELETE FROM t WHERE rowid = 258