2012-09-13 193 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");