内存数据库H2的Clustering模式数据操作测试

 

Init

server1server2是两台单独的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:

  1. 初始数据:

Server1:

ID  

NAME  

1

1

3

3

5

5

Server2:

ID  

NAME  

1

1

2

2

5

5

 

Server1Server2正常启动,ClientServer1为基础

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:

ID  

NAME  

1

1

2

2

3

3

4

4

5

5

6

6

Server2:

ID  

NAME  

1

1

2

2

4

4

5

5

6

6

说明先向Server1 insert,如果server1 insert成功后,再向Server2操作

 

delete from test where id = 6;

 

  1. 停掉Server1

insert into test values (6, '6');

select * from test;

 

Client/Server2:

ID  

NAME  

1

1

2

2

3

3

4

4

5

5

6

6

Server1的记录还是5

 

  1. 重启Server1,客户端不重新连接(此时,select操作的数据是以server2为准)

执行:

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

ID  

NAME  

1

1

2

2

3

3

4

4

5

5

 

Client/Server2:

ID  

NAME  

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

说明没重连,对Server2的操作没有同步到Server1

 

  1. 重启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):

ID  

NAME  

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9

 

Server2:

ID  

NAME  

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

 

说明没重连,对Server1的操作没有同步到Server2

 

你可能感兴趣的:(jdbc)