SCRIPT BEGIN --Before you start, create a session with the path "C:\EDBData" to run --this script, or change "EDBData" to something friendly for your PC. EXECUTE IMMEDIATE 'CREATE STORE "BackUp" AS LOCAL PATH ''C:\EDBData\BackUp'' '; EXECUTE IMMEDIATE 'CREATE DATABASE Laptop1 PATH ''C:\EDBData\Laptop1'' '; EXECUTE IMMEDIATE 'CREATE DATABASE Laptop2 PATH ''C:\EDBData\Laptop2'' '; EXECUTE IMMEDIATE 'CREATE DATABASE Server PATH ''C:\EDBData\Server'' '; USE Server; EXECUTE IMMEDIATE 'CREATE TABLE "Events" ( "ID" INTEGER NOT NULL, "StaffID" INTEGER, "DateStart" TIMESTAMP, "DateEnd" TIMESTAMP, "RequiresBudgeting" BOOLEAN, "EventsTypeID" INTEGER, "Memo" CLOB COLLATE "ANSI", "DateCreated" TIMESTAMP, "Complete" BOOLEAN ) VERSION 1.00 READWRITE UNENCRYPTED INDEX PAGE SIZE 4096 BLOB BLOCK SIZE 512 PUBLISH BLOCK SIZE 512 PUBLISH COMPRESSION 0 MAX ROW BUFFER SIZE 32768 MAX INDEX BUFFER SIZE 65536 MAX BLOB BUFFER SIZE 32768 MAX PUBLISH BUFFER SIZE 32768'; EXECUTE IMMEDIATE 'ALTER TABLE Events ADD CONSTRAINT "PK" PRIMARY KEY ("ID")'; EXECUTE IMMEDIATE 'INSERT INTO "Events" VALUES (1, 10037, TIMESTAMP ''2012-02-07 14:30'', TIMESTAMP ''2012-02-07 17:30'', FALSE, 10173, ''Staff meeting.'', TIMESTAMP ''2012-02-01 15:15:36.0542'', FALSE)'; EXECUTE IMMEDIATE 'INSERT INTO "Events" VALUES (2, 10037, TIMESTAMP ''2012-02-25 20:00'', TIMESTAMP ''2012-02-25 21:00'', FALSE, 10172, ''Alex birthday event'', TIMESTAMP ''2012-02-06 10:28:42.0252'', FALSE)'; EXECUTE IMMEDIATE 'INSERT INTO "Events" VALUES (3, 10037, TIMESTAMP ''2012-02-01 20:00'', TIMESTAMP ''2012-02-01 21:00'', FALSE, 10172, ''Drink with Jim, Princess Louise pub 208 High Holborn, on corner with Newton St, v. Close to Holborn tube.'', TIMESTAMP ''2012-01-24 22:19:13.0115'', FALSE)'; EXECUTE IMMEDIATE 'INSERT INTO "Events" VALUES (4, 10037, TIMESTAMP ''2012-01-27 20:00'', TIMESTAMP ''2012-01-27 21:00'', FALSE, 10172, ''Music event 336 brixton Rd with Richard.'', TIMESTAMP ''2012-01-24 22:24:15.0859'', FALSE)'; EXECUTE IMMEDIATE 'INSERT INTO "Events" VALUES (5, 10037, TIMESTAMP ''2012-01-30 14:00'', TIMESTAMP ''2012-01-30 16:00'', FALSE, 10173, ''Mark, Nathan RSPI Meeting.'', TIMESTAMP ''2012-01-30 17:07:39.0922'', FALSE)'; EXECUTE IMMEDIATE 'INSERT INTO "Events" VALUES (6, 10037, TIMESTAMP ''2012-02-09 18:00'', TIMESTAMP ''2012-02-09 23:00'', FALSE, 10173, ''"Designers get together" in pub The Water Poet 9-11 Folgate Street Spitalfields London E1 6BX We have some table booked for 6pm onwards. That''''s 6pm, Thursday 9th February.'', TIMESTAMP ''2012-02-01 15:34:50.0598'', FALSE)'; EXECUTE IMMEDIATE 'INSERT INTO "Events" VALUES (7, 10037, TIMESTAMP ''2012-02-02 20:00'', TIMESTAMP ''2012-02-02 21:00'', FALSE, 10173, ''Rob birthday meal'', TIMESTAMP ''2012-02-02 11:16:59.0533'', FALSE)'; EXECUTE IMMEDIATE 'INSERT INTO "Events" VALUES (8, 10037, TIMESTAMP ''2012-02-04 19:00'', TIMESTAMP ''2012-02-04 20:00'', FALSE, 10172, ''Int Inc 30 year celebration'', TIMESTAMP ''2012-02-02 11:17:19.0012'', FALSE)'; EXECUTE IMMEDIATE 'INSERT INTO "Events" VALUES (9, 10037, TIMESTAMP ''2012-02-06 19:00'', TIMESTAMP ''2012-02-06 23:00'', FALSE, 10172, ''South bank gig'', TIMESTAMP ''2012-02-03 14:58:51.0485'', FALSE)'; EXECUTE IMMEDIATE 'INSERT INTO "Events" VALUES (10, 10037, TIMESTAMP ''2012-02-04 10:00'', TIMESTAMP ''2012-02-04 17:00'', FALSE, 15, ''Work on PPP report'', TIMESTAMP ''2012-02-04 13:35:38.0281'', FALSE)'; EXECUTE IMMEDIATE 'INSERT INTO "Events" VALUES (11, 10037, TIMESTAMP ''2012-03-05 10:00'', TIMESTAMP ''2012-03-05 16:00'', FALSE, 15, ''EMBARCADERO DELPHI Workshop Tower 42 25 Old Broad Street London EC2N 1HQ '', TIMESTAMP ''2012-02-05 19:35:40.0369'', FALSE)'; EXECUTE IMMEDIATE 'BACKUP DATABASE Server AS "FirstData" TO STORE BackUp INCLUDE CATALOG'; EXECUTE IMMEDIATE 'RESTORE DATABASE Laptop1 FROM "FirstData" IN STORE BackUp INCLUDE CATALOG'; EXECUTE IMMEDIATE 'RESTORE DATABASE Laptop2 FROM "FirstData" IN STORE BackUp INCLUDE CATALOG'; EXECUTE IMMEDIATE 'PUBLISH DATABASE Server'; EXECUTE IMMEDIATE 'PUBLISH DATABASE Laptop1'; EXECUTE IMMEDIATE 'PUBLISH DATABASE Laptop2'; --PAUSE HERE AND MAKE SOME MANUAL CHANGES TO THE EVENTS TABLE IN LAPTOP 1 EXECUTE IMMEDIATE 'SAVE UPDATES FOR DATABASE Laptop1 as "UD1" TO STORE BackUp'; EXECUTE IMMEDIATE 'LOAD UPDATES FOR DATABASE Server FROM "UD1" IN STORE BackUp'; --PAUSE HERE AND CHANGE SERVER / EVENTS TABLE EXECUTE IMMEDIATE 'SAVE UPDATES FOR DATABASE Server as "UD2" TO STORE BackUp'; EXECUTE IMMEDIATE 'LOAD UPDATES FOR DATABASE Laptop1 FROM "UD2" IN STORE BackUp'; --UD2 syncs laptop1 but does not "add back" data already present, --or if it does this doesn't have a critical effect. EXECUTE IMMEDIATE 'LOAD UPDATES FOR DATABASE Laptop2 FROM "UD2" IN STORE BackUp'; --UD2 suncs laptop2 AND adds everything which was formerly added by UD1, --as this registers as an update on the server when it was loaded. --PAUSE HERE AND CHANGE LAPTOP2 / EVENTS TABLE EXECUTE IMMEDIATE 'SAVE UPDATES FOR DATABASE Laptop2 as "UD3" TO STORE BackUp'; --!!!!! this line fails ... with PK conflict error. EXECUTE IMMEDIATE 'LOAD UPDATES FOR DATABASE Laptop1 FROM "UD3" IN STORE BackUp'; EXECUTE IMMEDIATE 'LOAD UPDATES FOR DATABASE Server FROM "UD3" IN STORE BackUp'; --now the following will fail, as the PK causes a violation. --this is good, as it means poorly managed update processes don't screw up. EXECUTE IMMEDIATE 'LOAD UPDATES FOR DATABASE SecondLaptop FROM "UD1" IN STORE BackUp'; /*OK: NOW: Make some changes to record ID = 10 in Laptop1. SAVE UPDATES then change this record ID = 10 in Laptop2. now LOAD UPDATEs from laptop1 Crucially, the record is NOT updated in laptop 2, as it has been touched in laptop2 AFTER the update in laptop1 */ EXECUTE IMMEDIATE 'SAVE UPDATES FOR DATABASE Laptop1 as "UD4" TO STORE BackUp'; --PAUSE HERE TO ALTER ID = 10 in Laptop2 EXECUTE IMMEDIATE 'LOAD UPDATES FOR DATABASE Laptop2 FROM "UD4" IN STORE BackUp'; --ID = 10 still the same as PAUSED version EXECUTE IMMEDIATE 'SAVE UPDATES FOR DATABASE Laptop2 as "UD5" TO STORE BackUp'; EXECUTE IMMEDIATE 'LOAD UPDATES FOR DATABASE Server FROM "UD4" IN STORE BackUp'; --ID=10 same as laptop1 version EXECUTE IMMEDIATE 'LOAD UPDATES FOR DATABASE Server FROM "UD5" IN STORE BackUp'; --ID=10 same as laptop2 version END rip