【问题标题】:Switch to secondary oracle database when primary is down in java simple JDBC在 java simple JDBC 中主数据库关闭时切换到辅助 Oracle 数据库
【发布时间】:2013-09-02 23:46:53
【问题描述】:

我正在尝试示例应用程序来演示 Oracle Data Guard,我编写了一个简单的 Java Servlet 来从 oracle DB 中获取数据。

Servlet 看起来像这样:

package com;

import java.io.*;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;

public class DisplayServlet extends HttpServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();



        try{
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection con=DriverManager.getConnection("jdbc:oracle:thin:@10.10.220.4:1529:poc","poc","poc");

            PreparedStatement ps=con.prepareStatement("select * from admin_emp");
            //ps.setInt(1,roll);

            out.print("<table width=50% border=1>");
            out.print("<caption>Result:</caption>");
            ResultSet rs=ps.executeQuery();

            /* Printing column names */
            ResultSetMetaData rsmd=rs.getMetaData();
            int total=rsmd.getColumnCount();
            out.print("<tr>");
            for(int i=1;i<=total;i++)
            {
                out.print("<th>"+rsmd.getColumnName(i)+"</th>");

            }
            out.print("</tr>");

            /* Printing result */
            while(rs.next())
            {
                out.print("<tr><td>"+rs.getInt(1)+"</td><td>"+rs.getString(2)+"</td><td>"+rs.getString(3)+"</td><td>"+rs.getString(4)+"</td></tr>");

            }
            out.print("</table>");

        }catch (Exception e2) {e2.printStackTrace();}

        finally{out.close();}
    }

}

所以我的问题是,当这个数据库失败时,我应该自动连接到另一台主机中的其他数据库,在它引发超时异常之前。

【问题讨论】:

    标签: java sql oracle servlets jdbc


    【解决方案1】:

    这通常通过 tnsnames.ora 文件处理。所以不需要写任何代码。甚至瘦 JDBC 驱动程序也支持 tnsnames 查找。

    • 将 JVM 属性设置为指向 tnsnames.ora 文件
    • 请 DBA 为您提供 Data Guard 的连接字符串
    • 在创建 DB connection 的代码中,使用 tnsnames 条目的名称而不是 host:port:sid

    另一种选择是将 Oracle connect string 直接硬编码到您的代码中。

    【讨论】:

      【解决方案2】:

      在超时异常之前?

      在单独的线程中计算时间,并在给定时间将连接变量更改为 2. 服务器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-19
        • 1970-01-01
        • 1970-01-01
        • 2018-05-04
        • 2012-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多