【问题标题】:Hsqldb reopen server catalog after SHUTDOWN关闭后 Hsqldb 重新打开服务器目录
【发布时间】:2017-03-01 22:28:38
【问题描述】:

我创建任意数量的目录(比如 50 个),如下所示:

    ...
    properties = new HsqlProperties();
    properties.setProperty("server.remote_open", false);
    properties.setProperty("server.shutdown", false);

    for(int i=0;i<50; i++){
        properties.setProperty("server.database." + i, "file:db/production/pr" + i + "/pr");
        properties.setProperty("server.dbname." + i, "alias" + i);
    }

    Server server = new Server();
    server.setProperties(p);
    server.setLogWriter(null);
    server.setErrWriter(null);
    server.start();
    ...

我可以使用用户名“SA”、空密码和生成的别名成功连接到每个创建的目录。 如果我在其中一个打开的目录上发出“SHUTDOWN”,它会正确关闭,但是当我尝试重新打开它时,我会收到“一般错误:数据库别名不存在”,所以我需要关闭整个服务器并重新启动。 如何在“关闭”后重新打开单个数据库而不重新启动服务器?

【问题讨论】:

  • 用什么代码重新打开数据库?
  • @fredt 没有代码,我希望可以从第三方应用程序访问数据库。基本上我在 Intellij Idea 中启动我的服务器代码,然后使用 Libreoffice Base 或 Netbeans 数据库浏览器来处理数据库。我可以使用这两个程序成功打开数据库,但是在发出“SHUTDOWN”之后,如果我重试打开数据库,我会得到“一般错误:数据库别名不存在”。

标签: hsqldb


【解决方案1】:

使用 server.remote_open=true 属性启动服务器并指定连接 URL 上的路径。

http://hsqldb.org/doc/guide/listeners-chapt.html#lsc_remote_open

【讨论】:

  • 我需要客户端连接到我为他们准备的数据库之一(具有自定义角色、用户和内容)。使用 server.remote_open=true 每个客户端都可以随意创建一个新数据库。我确实探索了这条路径,但我没有找到禁用任意数据库创建的方法。
  • 因此您不应该让客户端执行 SHUTDOWN。客户端应该以没有管理员权限的用户身份连接。
  • 同意,但是每当我想备份我的目录数组中的一个数据库时,我都需要将其关闭。我如何将其重新上线?使用 server.remote_open=false 似乎唯一的选择是重新启动整个服务器,而使用 server.remote_open=true 我无法避免恶意或错误的客户端创建任意目录。
  • 如果用户没有管理员权限,remote_open 应该没问题。他们可以通过连接创建数据库,但无法登录和创建表等。
  • 如果数据库很小,您可以使用 SCRIPT 命令进行备份。或者对任意大小的数据库使用 BACKUP 命令。
猜你喜欢
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多