2012-09-13 506 views
7

我遇到以下问题: 两个不同系统上的应用程序的两个实例应共享一个小型数据库。 主要问题是两个系统只能通过网络文件夹交换数据。 我没有可能在某处设置数据库服务器。H2数据库多连接

是否可以在网络文件夹中放置一个H2数据库并让两个实例连接到数据库(同时)?

如果我禁用文件锁定,我可以使用嵌入模式将两个实例连接到数据库,对吧? 实例可以对数据库执行READ或INSERT操作。我使用多个并发嵌入式连接风险数据损坏吗?

回答

2

From H2 documentation

也可以打开数据库,而文件锁定;在这个 的情况下,它是由应用程序来保护数据库文件。 未能这样做会导致数据库损坏。

我认为,如果你的应用程序总是使用相同的配置(网络文件夹共享文件数据库),你需要创建一个管理并发

+0

我读到这了,但我还读一些有关表级锁的支持。我是否正确表锁定仅用于客户端/服务器模式?对于多个嵌入式连接,实现我自己的锁定机制是唯一的选择? – Dirk

+0

如果您可以运行服务器,则管理表级锁定。但是没有它,你必须实现一个你自己的机制 –

+1

实际上,即使在嵌入式和内存中模式下,如果打开多个连接到数据库(在同一进程中),表级锁也是默认使用的。 –

21

应用层我有同样的问题,我发现文档中的解决方案。它可以在; http://h2database.com/html/features.html#auto_mixed_mode

多个进程可以访问同一个数据库,而无需手动启动服务器。为此,请向数据库URL追加; AUTO_SERVER = TRUE。您可以使用相同的数据库URL,而不管数据库是否已经打开。此功能不适用于内存数据库。

// Application 1: 
DriverManager.getConnection("jdbc:h2:/data/test;AUTO_SERVER=TRUE"); 

// Application 2: 
DriverManager.getConnection("jdbc:h2:/data/test;AUTO_SERVER=TRUE");