运行H2脚本工具

时间:2015-07-15 12:03:34

标签: grails h2

我在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

0 个答案:

没有答案