我在Windows环境中使用'内存中'H2数据库运行grails 2.3.3。
我正在尝试使用脚本等命令行工具来备份数据表。
我找到了jar文件:
C:\Program Files\springsource\grails-2.3.3\lib\hsqldb\hsqldb\jars\hsqldb-1.8.0.10.jar
这是我正在尝试的命令:
java -cp hsqldb-1.8.0.10.jar orgh2.tools.Shell
但我收到错误:
'Error: Could not find or load main class orgh2.tools.Shell'
以下是dB配置的说明。我在配置文件DataSource.groovy中定义了两个Dbs,它们目前都使用用户sa和空白密码。
以下是DataSource文件中的关键行:
dataSource {
pooled = true
driverClassName = "org.h2.Driver"
username = "sa"
password = ""
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
dataSource {
dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', ''
url = "jdbc:h2:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
}
dataSource_publish {
dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', ''
url = "jdbc:h2:/dbmak/devDb;MVCC=TRUE;LOCK_TIMEOUT10000;
AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE"
}
因为这是'内存中'配置,所以我无法更改sa密码,因为当重新启动grails应用程序时,它会自动重置为空值。
我发现了java jar:grails-2.3.3 \ lib \ com.h2database \ h2 \ jars。
所以现在我的命令是: java -cp h2-1.3.173.jar org.h2.tools.Shell
如果我这样做,那么我会被要求以交互方式输入一组响应以进入目标数据库 - 即:“
"Driver", "Database", "Login User and finally Password.
密码为空白,要求我在连接完成前按两次RTN。
我已经能够成功进入我的一个Dbs(jdbc:h2:/ dbmak / devDb)而不是另一个,然后能够运行SQL命令。
但是,如果我尝试访问dB:jdbc:h2:devDb我收到错误:
'SQL异常:错误的用户名或密码'。
这很奇怪,因为我可以通过dbconsole网络会话访问具有相同用户/密码的两个dB。
最后,我最终要做的是使用一组脚本将所有每个单独的db表的内容提取到单独的文件中(可能使用-script选项来运行单独的文件。理想情况下,命令行应该没有任何交互这样做 - 我试图使用-url -driver -user和-password输入参数来删除这个交互式部分。但我无法使这些选项工作。
欢迎任何建议?
-Mike