Как протестировать соединение с Oracle Database с помощью Java
Есть ли способ проверить подключение к базе данных Oracle с помощью Java? Вот мой код.
public class OracleConnection {
public static void main(String[] args) throws Exception {
//connect to database
Class.forName("oracle.jdbc.driver.OracleDriver");
String serverName = "00.000.0.000";
String portNumber = "1521";
String sid = "My Sid";
String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
String username = "UNAME";
String password = "PASSWORD";
Connection conn = DriverManager.getConnection(url, username, password);
}
}
То, что я хочу сделать, - это проверить базу данных, если она достижима, и если ее нет, то программа будет подключаться к следующей базе данных. У меня есть 8 производственных баз данных.
Ответы
Ответ 1
Не изобретайте велосипед. Драйвер Oracle JDBC уже имеет встроенную функциональность.
Это полезно: http://www.orafaq.com/wiki/JDBC
import java.util.ArrayList;
import java.sql.*;
public class OracleConnection {
public static void main(String[] args) throws Exception {
//connect to database
Class.forName("oracle.jdbc.driver.OracleDriver");
ArrayList<String> serverNames = new ArrayList<String>();
serverNames.add("yourhostname1");
serverNames.add("yourhostname2");
serverNames.add("yourhostname3");
serverNames.add("yourhostname4");
String portNumber = "1521";
String sid = "ORCLSID";
String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=ON)(FAILOVER=ON)" ;
for (String serverName : serverNames) {
url += "(ADDRESS=(PROTOCOL=tcp)(HOST="+serverName+")(PORT="+portNumber+"))";
}
url += ")(CONNECT_DATA=(SID="+sid+")))";
String username = "USERNAME";
String password = "PASSWORD";
// System.out.println(url); // for debugging, if you want to see the url that was built
Connection conn = DriverManager.getConnection(url, username, password);
}
}
Приведенный выше код действительно строит и использует URL-адрес, похожий на этот (как, например, belows). Я получил это явно, раскомментируя строку отладки ближе к концу кода:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=
(LOAD_BALANCE=ON)(FAILOVER=ON)
(ADDRESS=(PROTOCOL=tcp)(HOST=yourhostname1)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=yourhostname2)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=yourhostname3)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=yourhostname4)(PORT=1521))
)(CONNECT_DATA=(SID=ORCLSID)))
Ответ 2
DriverManager#getConnection
он сам пытается установить соединение с данным URL-адресом базы данных. DriverManager пытается выбрать соответствующий драйвер из набора зарегистрированных JDBC-драйверов. и thorws SQLException
, если возникает ошибка доступа к базе данных.
вы можете проверить, что ваше соединение действительно или нет, Connection#isValid(int timeout)
возвращает true, если соединение не было закрыто и остается в силе.
...
Connection conn = DriverManager.getConnection(url, username, password);
boolean reachable = conn.isValid(10);// 10 sec
Ответ 3
Простой код Java для проверки соединения с Oracle DB:
import java.sql.*;
public class Test {
private final static String DB_URL = "jdbc:oracle:thin:@//192.168.1.105:1521/MYORA";
private final static String USER = "myuser";
private final static String PASS = "mypwd";
public static void main(String[] args) {
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// ignore
}
}
}
}
}
Ответ 4
У вас может быть массив вашего сервера баз данных ips и итерация по ним. Для каждой неудачной попытки подключения вы можете перейти к следующему ip из массива и повторите попытку. В случае успешного соединения вы разрываете петлю и используете текущее соединение, которое было установлено.
Ответ 5
Возможно, вам нужно выполнить ping IP-адрес сервера. Вы должны это проверить:
Функция Ping возвращает, что все pinged IP-адреса достижимы
Ответ 6
Вы можете поймать SQLException из DriverManager.getConnection()
и ищет ORA-12543.
Прочитайте документацию SQLException о коде поставщика.
Ответ 7
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("url","username","password ″);
смотрите здесь: http://leezk.com/tag/jdbc
Ответ 8
"... и если его нет, то программа будет подключаться к следующему..." Интересно, может ли строка подключения кластера, содержащая несколько адресов сервера, работать для вас. (Я не пробовал это сам.) Посмотрите Oracle Connection String для среды RAC.