Init
server1和server2是两台单独的server,数据文件分开,分别启动:
server1:
s1_start.bat:
@java -cp "h2.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Server -tcp -tcpPort 9101 -baseDir server1
@if errorlevel 1 pause
server2:
s2_start.bat:
@java -cp "h2.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Server -tcp -tcpPort 9102 -baseDir server2
@if errorlevel 1 pause
create cluster:
cluster.bat:
@java -cp "h2.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.CreateCluster -urlSource jdbc:h2:tcp://localhost:9101/./test -urlTarget jdbc:h2:tcp://localhost:9102/./test -user sa -serverlist localhost:9101,localhost:9102
@if errorlevel 1 pause
-urlSource和-urlTarget指明了哪个是主DB(所有select操作都从这个DB走),其它insert, delete, update操作分别向两个DB进行操作
client:
jdbc url: jdbc:h2:tcp://localhost:9101,localhost:9102/./test
Init data:
CREATE TABLE TEST(ID INT, NAME VARCHAR);
Test_Insert:
Server1:
Server2:
Server1,Server2正常启动,Client以Server1为基础
insert into test values (2, '2');
insert into test values (3, '3');
insert into test values (4, '4');
insert into test values (5, '5');
insert into test values (6, '6');
结果:
insert into test values (2, '2');
Unique index or primary key violation: PRIMARY_KEY_2 ON PUBLIC.TEST(ID) [23001-79] 23001/23001 (Help)
insert into test values (3, '3');
Unique index or primary key violation: PRIMARY_KEY_2 ON PUBLIC.TEST(ID) [23001-79] 23001/23001 (Help)
insert into test values (4, '4');
Update count: 1
(0 ms)
insert into test values (5, '5');
Unique index or primary key violation: PRIMARY_KEY_2 ON PUBLIC.TEST(ID) [23001-79] 23001/23001 (Help)
insert into test values (6, '6');
Update count: 1
(16 ms)
Server1:
Server2:
说明先向Server1 insert,如果server1 insert成功后,再向Server2操作
delete from test where id = 6;
insert into test values (6, '6');
select * from test;
Client/Server2:
Server1的记录还是5条
执行:
insert into test values (6, '6');
insert into test values (7, '7');
insert into test values (8, '8');
执行结果
insert into test values (6, '6');
Unique index or primary key violation: PRIMARY_KEY_2 ON PUBLIC.TEST(ID) [23001-79] 23001/23001 (Help)
insert into test values (7, '7');
Update count: 1
(0 ms)
commit;
insert into test values (8, '8');
commit;
Server1:
Client/Server2:
说明没重连,对Server2的操作没有同步到Server1
执行:
insert into test values (6, '6');
insert into test values (7, '7');
insert into test values (8, '8');
insert into test values (9, '9');
commit;
结果:
insert into test values (6, '6');
Update count: 1
(0 ms)
insert into test values (7, '7');
Update count: 1
(0 ms)
insert into test values (8, '8');
Update count: 1
(0 ms)
insert into test values (9, '9');
Update count: 1
(0 ms)
Client (Server1):
Server2:
说明没重连,对Server1的操作没有同步到Server2