一. H2數據庫官網:http://www.h2database.com/
H2是一個開源的嵌入式數據庫引擎,采用java語言編寫,不受平台的限制,同時H2提供了一
個十分方便的web控制台用於操作和管理數據庫內容。H2還提供兼容模式,可以兼容一些主
流的數據庫,具有比較完備的數據庫特性,如支client/server連接,能夠支持標准的SQL語
句,支持存儲過程等。因此采用H2作為開發期、測試期和演示的數據庫非常方便,不太適合
作為大規模生產數據庫。
二.
a. 在內存中運行(單進程訪問)
數據庫只在內存中運行,關閉連接后數據庫將被清空,適合測試環境
連接字符串:
jdbc:h2:mem:DBName;DB_CLOSE_DELAY=-1
b. 嵌入式(單進程訪問)
數據庫持久化存儲為單個文件
連接字符串:
jdbc:h2:file:~/.h2/DBName;AUTO_SERVER=TRUE
~/.h2/DBName表示數據庫文件的存儲位置,如果第一次連接則會自動創建數據庫
c. 服務模式(多進程訪問)
web server:此種運行方式支持使用瀏覽器訪問H2 Console
TCP server:支持客戶端/服務器端的連接方式
PG server:支持PostgreSQL客戶端
H2支持三種服務模式:
啟動tcp服務連接字符串示例:
jdbc:h2:tcp://localhost/~/test 使用用戶主目錄
jdbc:h2:tcp://localhost//data/test 使用絕對路徑
jdbc:h2:ssl://localhost:8085/~/sample
DB_CLOSE_DELAY:要求最后一個正在連接的連接斷開后,不要關閉數據庫
MODE=MySQL:兼容模式,H2兼容多種數據庫,該值可以為:
DB2、Derby、HSQLDB、MSSQLServer、MySQL、Oracle、PostgreSQL
AUTO_RECONNECT=TRUE:連接丟失后自動重新連接
AUTO_SERVER=TRUE:啟動自動混合模式,允許開啟多個連接,該參數不支持在
內存中運行模式
TRACE_LEVEL_SYSTEM_OUT、TRACE_LEVEL_FILE:輸出跟蹤日志到控制台或文件,
取值0為OFF,1為ERROR(默認值),2為INFO,3為DEBUG
SET TRACE_MAX_FILE_SIZE mb:設置跟蹤日志文件的大小,默認為16M
d. 連接字符串參數
e. 啟動服務模式,打開H2 Console web頁面
啟動服務,在命令行中執行
java -cp h2*.jar org.h2.tools.Server
執行如下命令,獲取選項列表及默認值
三. 運行方式
H2數據庫介紹
2017年9月20日 22:39
分區 DB 的第 1 頁 執行如下命令,獲取選項列表及默認值
java -cp h2*.jar org.h2.tools.Server -?
-web:啟動支持H2 Console的服務
-webPort :服務啟動端口,默認為8082
-browser:啟動H2 Console web管理頁面
-tcp:使用TCP server模式啟動
-pg:使用PG server模式啟動
常見的選項如下:
四. 集群(尚未經過實際測試)
H2支持兩台服務器運行兩個數據庫成為集群,兩個數據庫互為備份,如果一個服務器失效,
另一個服務器仍然可以工作。另外只有服務模式支持集群配置。
a. 創建目錄
創建兩個服務器工作的目錄
# mkdir server1
# mkdir server2
b. 啟動tcp服務
執行如下命令分別在9101、9102端口啟動兩個使用tcp服務模式的數據庫
java org.h2.tools.Server-tcp -tcpPort 9101-baseDir server1
java org.h2.tools.Server-tcp -tcpPort 9102 -baseDir server2
c. 使用CreateCluster工具創建集群
java 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
如果兩個數據庫不存在,該命令將會自動創建數據庫。如果一個數據庫失效,可以先
刪除壞的數據庫文件,重新啟動數據庫,然后重新運行CreateCluster工具
d. 連接數據庫
現在可以使用如下連接字符串連接集群數據庫
jdbc:h2:tcp://localhost:9101,localhost:9102/~/test
e. 監控集群運行狀態
可以使用如下命令查看配置的集群服務器是否都在運行
SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME='CLUSTER'
f. 限制
H2的集群並不支持針對事務的負載均衡,所以很多操作會使兩個數據庫產生不一致的
結果,執行如下操作時請小心:
RANDOM_UUID(), SECURE_RAND(), SESSION_ID(), MEMORY_FREE(), MEMORY_USED(),
CSVREAD(), CSVWRITE(), RAND()
自動增長列和標識列不支持集群,當插入數據時,序列值需要手動創建
不支持SET AUTOCOMMIT FALSE語句,如果需要設置成為不自動提交,可以執行方法
Connection.setAutoCommit(false)
H2可以通過CreateCluster工具創建集群,示例步驟如下(在在一台服務器上模擬兩個數據
庫組成集群):
• Dataflyer 一個查看和導出數據庫的工具
• DB Solo SQL 查詢工具
五. 能夠可視化訪問和查看H2數據庫的工具
分區 DB 的第 2 頁 • DB Solo SQL 查詢工具
• DbVisualizer 數據庫工具
• Execute Query Java寫的數據庫工具
• Flyway Java寫的敏捷遷移數據庫的工具
• fleXive JavaEE5 的開源框架,可以用來做復雜的開發已經Web應用的演化。
JDBC Console 一個小型的web應用,提供了一種執行SQL的能力,基於H2的控制台界
面,同時也支持JNDI數據源。
•
• HenPlus 一個用Java寫的SQL工具
• JDBC lint 能夠在我們使用JDBC API的時候,幫助我們寫出正確高效的代碼
OpenOffice 是一個OpenOffice.org組織的數據庫應用。其提供了進入關系數據源的
能力。
•
RazorSQL 一個SQL的查詢工具,能夠瀏覽數據庫,進行SQL語句的編輯,數據的管
理。
•
• SQL Developer 通用的數據庫管理前端。
• SQL Workbench/J 免費的獨立的DBMS SQL的工具
SQuirreL SQL Client 圖形化的工具,能夠查看數據庫的結構,瀏覽數據,執行SQL
命令
•
• SQuirreL DB Copy Plugin 用來把數據從一個數據庫復制到另外一個數據庫。
分區 DB 的第 3 頁