Я новичок в Java и пытаюсь установить соединение с базой данных Oracle с компьютера Redhat Linux. У меня соединение работает и может выполнить простой скрипт sql, но соединение работает только ок. 1 в 3 раза. Ошибка, которую он дает, и код ниже. Вполне возможно, что это проблема с нашей сетью, но я хотел бы получить немного больше знаний, прежде чем поднять вопрос о поддержке. Кто-нибудь знает, почему ошибка говорит «Имя или услуга не известна» для ssdb0255n21-oravip, когда «someserver» - это то, что указано в соединении?Подключение к Oracle из Java ненадежное
Exception in thread "main" java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:673)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:187)
at OracleTest.main(OracleTest.java:19)
Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection
at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:445)
at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:464)
at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:594)
at oracle.net.ns.NSProtocolStream.negotiateConnection(NSProtocolStream.java:214)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:263)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486)
... 7 more
Caused by: java.net.UnknownHostException: ssdb0255n21-oravip: Name or service not known
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:894)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1286)
at java.net.InetAddress.getAllByName0(InetAddress.java:1239)
at java.net.InetAddress.getAllByName(InetAddress.java:1155)
at java.net.InetAddress.getAllByName(InetAddress.java:1091)
at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:117)
at oracle.net.nt.ConnOption.connect(ConnOption.java:133)
at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:411)
... 13 more
код я использую это
import java.sql.*;
import java.util.Properties;
public class OracleTest
{
public static void main(String[] args) throws SQLException
{
String url = "jdbc:oracle:thin:@ldaps://someserver:3131/ODBF2_BLOOD_P_S_B_001,cn=OracleContext,dc=in,dc=companyname,dc=com,dc=au";
//properties for creating connection to Oracle database
Properties props = new Properties();
props.setProperty("user", "xxx");
props.setProperty("password", "xxxx");
//creating connection to Oracle database using JDBC
System.out.println(DriverManager.getLoginTimeout());
Connection conn = DriverManager.getConnection(url,props);
String sql ="select sysdate as current_day from dual";
//creating PreparedStatement object to execute query
PreparedStatement preStatement = conn.prepareStatement(sql);
ResultSet result = preStatement.executeQuery();
while(result.next())
{
System.out.println("Current Date from Oracle : " + result.getString("current_day"));
}
System.out.println("done");
}
}
У меня есть ORACLE_HOME набор для /usr/lib/oracle/10.2.0.5/client64/ и создали ldap.ora и SQLNET.ORA файлы в /usr/lib/oracle/10.2.0.5/client64/network/admin. Содержание этого являются:
sqlnet.ora
NAMES.DIRECTORY_PATH = (LDAP,TNSNAMES)
ldap.ora
DIRECTORY_SERVERS = (OID.GLB.IN.companyname.COM.AU::3131)
DEFAULT_ADMIN_CONTEXT = "dc=in,dc=companyname,dc=com,dc=au"
DIRECTORY_SERVER_TYPE = OID
Похоже, что создали tnsnames.ora себе
ORA11 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORA11)
)
)
Каково содержимое вашего TNSNAMES.ORA? 'java.net.UnknownHostException: ssdb0255n21-oravip: имя или служба неизвестны' означали бы, что он неправильно настроен. Кроме того, попробуйте использовать 'tnsping ssdb0255n21-oravip' и посмотреть, можете ли вы подключиться. – kgdesouz
Спасибо за ответ. Я обновил свой ответ с этими подробностями. Я удалил данные нашей компании, поэтому, если есть какие-либо несоответствия, это скорее всего опечатка от моего имени. У меня нет команды tnsping на моем ящике. – MikeKulls
Ваш TNSNAMES.ORA настроен неправильно. Имя службы - «ORA11», и вы пытаетесь подключиться к ssdb0255n21-oravip. Обратите внимание: у вас, вероятно, есть tnsping в вашей папке oracle \ bin. Заметьте, у меня была аналогичная проблема в прошлом, а иногда и потому, что у вас слишком много доступных интерфейсов. Отключите один из интерфейсов. – kgdesouz