【问题标题】:Apache embedded derby replication - slave instance not returning the connectionApache嵌入式德比复制 - 从属实例不返回连接
【发布时间】:2017-01-31 12:02:10
【问题描述】:

我正在尝试在 apache 嵌入式 derby 数据库中设置复制。 我正在关注DerbyAdmin guide 来实现相同的 -

据此,我必须先启动从属数据库,然后再启动主数据库。但是,一旦我尝试在从属 derby 实例方法调用上获取连接,就会卡住。它永远不会返回连接。以下是相同的代码 -

public static Connection getConnection(){
    Class.forName("org.apache.derby.jdbc.EmbeddedDriver");  
    String url = "jdbc:derby:<slave db location>;startSlave=true";
    System.out.println("about to fetch connection");
    Connection con= null;
    try{
        con=DriverManager.getConnection(url, "root", "root");
    }catch(Exception e){
        e.printStackTrace();
    }
    System.out.println("return con -"+con);
    return con;
}

输出

即将获取连接

为了确保项目中是否包含所有 derby 库,我尝试在没有 startSlave=true 属性的情况下获取连接,但它确实返回了连接。

public static Connection getConnection(){
    Class.forName("org.apache.derby.jdbc.EmbeddedDriver");  
    String url = "jdbc:derby:<slave db location>;";
    System.out.println("about to fetch connection");
    Connection con= null;
    try{
        con=DriverManager.getConnection(url, "root", "root");
    }catch(Exception e){
        e.printStackTrace();
    }
    System.out.println("return con -"+con);
    return con;
}

输出

即将获取连接

return con -org.apache.derby.impl.jdbc.EmbedConnection@2022850302 (XID = 420), (SESSIONID = 1), (DATABASE = I:/R&D/derby replication/Slave/replMaster), (DRDAID =空)

我尝试检查 derby.log 文件,但日志文件也是空的。 让我知道出了什么问题。

提前致谢。

【问题讨论】:

    标签: java apache embedded-database


    【解决方案1】:

    经过很长时间的研究,我发现奴隶应该是这样工作的。

    与我的假设不同,我们必须先启动 master 再启动 slave。

    以下是我为使其工作而执行的步骤-

    1. 以嵌入式模式启动 derby 将其称为实例 masterCandidate 并通过调用下面的 SP- 来冻结数据库-

      call SYSCS_UTIL.SYSCS_FREEZE_DATABASE()

    2. 将数据库(derby 文件夹)复制粘贴到从属位置(注意不要停止此 derby 实例)

    3. 现在使用以下 URL 开始德比 称之为实例 slaveCandidate-

      jdbc:derby:&lt;slave db location&gt;;startSlave=true 不要等待方法返回连接,当我们连接主 derby 实例时,它将返回以下异常 -

    ERROR XRE08:数据库“”的复制从属模式成功启动。连接被拒绝,因为数据库处于复制从属模式。

    1. 使用 startMaster 属性创建到 ma​​sterCandidate 实例的新连接并使其成为 master -

      jdbc:derby:;startMaster=true;slaveHost=slaveHost;slavePort=slavePort

    2. 现在您已准备好在 master 上读/写,从现在开始,master 连接时无需传递 startMaster=true 属性

    一旦 masterCandidate 实例关闭,slave 就会自动成为 master。

    直到master活着从slave获取连接总是返回上面提到的(第3点)异常。

    一旦 master 宕机,我们就可以在 slaveCandidate 上获取连接,而无需传递属性。

    jdbc:derby:<slave db location>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2013-10-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多