我遇到以下問題: 兩個不同系統上的應用程序的兩個實例應共享一個小型數據庫。 主要問題是兩個系統只能通過網絡文件夾交換數據。 我沒有可能在某處設置數據庫服務器。H2數據庫多連接
是否可以在網絡文件夾中放置一個H2數據庫並讓兩個實例連接到數據庫(同時)?
如果我禁用文件鎖定,我可以使用嵌入模式將兩個實例連接到數據庫,對吧? 實例可以對數據庫執行READ或INSERT操作。我使用多個併發嵌入式連接風險數據損壞嗎?
我遇到以下問題: 兩個不同系統上的應用程序的兩個實例應共享一個小型數據庫。 主要問題是兩個系統只能通過網絡文件夾交換數據。 我沒有可能在某處設置數據庫服務器。H2數據庫多連接
是否可以在網絡文件夾中放置一個H2數據庫並讓兩個實例連接到數據庫(同時)?
如果我禁用文件鎖定,我可以使用嵌入模式將兩個實例連接到數據庫,對吧? 實例可以對數據庫執行READ或INSERT操作。我使用多個併發嵌入式連接風險數據損壞嗎?
也可以打開數據庫,而文件鎖定;在這個 的情況下,它是由應用程序來保護數據庫文件。 未能這樣做會導致數據庫損壞。
我認爲,如果你的應用程序總是使用相同的配置(網絡文件夾共享文件數據庫),你需要創建一個管理併發
應用層我有同樣的問題,我發現文檔中的解決方案。它可以在; 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");
我讀到這了,但我還讀一些有關表級鎖的支持。我是否正確表鎖定僅用於客戶端/服務器模式?對於多個嵌入式連接,實現我自己的鎖定機制是唯一的選擇? – Dirk
如果您可以運行服務器,則管理表級鎖定。但是沒有它,你必須實現一個你自己的機制 –
實際上,即使在嵌入式和內存中模式下,如果打開多個連接到數據庫(在同一進程中),表級鎖也是默認使用的。 –