Conexão com o Oracle

E ai galera, blz? :slight_smile:

Estou tentando efetuar uma conexão com o Oracle e estou recebendo uma exception.
Estou efetuando os mesmo passos usados no nos manuais e nada. Vejam:

	public static void main(String args[]) {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");

			Connection conn =  DriverManager.getConnection ("jdbc:oracle:thin:@192.107.14.55:1521:ORCL", "javaApp", "javaapp");

			// Prepare a statement to cleanup the emp table
			Statement stmt = conn.createStatement ();
			ResultSet rs = stmt.executeQuery("select * from usuario");
			
			while (rs.next()) {
				System.out.println(rs.getString("idUsuario"));
				System.out.println(rs.getString("nome")+"/n");
			}
			conn.close();			
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Não consigo ver onde pode estar havendo problemas, a exception que eu recebo é a seguinte:

java.sql.SQLException: Exceção de E/S: End of TNS data channel
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:169)
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:211)
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:324)
	at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:266)
	at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:365)
	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:260)
	at java.sql.DriverManager.getConnection(DriverManager.java:512)
	at java.sql.DriverManager.getConnection(DriverManager.java:171)
	at br.com.computeasy.exemplos.OracleConn.main(OracleConn.java:21)

:arrow: Alguém por ai já passou por essa? Será que o problema está na conexão ou é configuração no banco?

Um abraço para todos… :?:

Isso é problema de conectividade com o banco…

Você consegue conectar no banco via TNS de outra aplicação?

http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96525/tnsus.htm#1002216

Ligue para seu DBA 8)

Estou conectando normalmente por outras aplicações…

Ai que tá o problema, não tem DBA aki… :? :shock:

Um abraço e valeu a foça… :wink:

Como aqui tem um monte, vai a dica deles:

Se o banco não estiver fora do ar o nome do serviço deve estar errado!

Olá,

Este banco esta em qual SO? Windows?

Se for em win 2k ou Xp tente o seguinte para verificar seo banco existe com este TNS.

Va na opção servicos do SO e procure o serviço chamado “OracleServiceORCL”.

Exitindo verifique se o mesmo esta iniciado juntamente com ele verifique se o listner tb esta iniciado, o servico do listener é o “Oracle<alguma_coisa>TNSListener” onde o alguma coisa depende da versão do teu banco.

Tudo isso tendo ok abra um prombt do dos e digite TNSADMIN ORCL e de enter para verificar se ele encontra o TNS do banco.

Se der erro terá que configurar o TNS ai sim poderá tentar conectar pelo java do jeito que vc ta tentando.

Precisando de ajuda para isso é só falar.

[]'s

Ele tá rodando em cima de Novel.

Verifiquei que o TNSPING e está normal, vejam:

[code]C:>tnsping ORANW80

TNS Ping Utility for 32-bit Windows: Version 8.1.5.0.0 - Production on 02-FEV-04
14:56:33

© Copyright 1997 Oracle Corporation. All rights reserved.

Attempting to contact (ADDRESS=(COMMUNITY=tcp.world)(PROTOCOL=TCP)(Host=192.107.
14.55)(Port=1521))
OK (760 msec)

C:>
[/code]

Acho que o negócio aki não é mais java, vou dar uma corrida atrás de coisas sobre Oracle.

Valeu galera… :wink:

[quote=“RodrigoSol”]Como aqui tem um monte, vai a dica deles:
Se o banco não estiver fora do ar o nome do serviço deve estar errado![/quote]

Entre no banco via SQL Plus e digitei o seguinte comando: SELECT Instance_Name FROM V$Instance e ele me retornou o seguinte resultado:

SQL> SELECT Instance_Name FROM V$Instance;
INSTANCE_NAME
----------------
ORCL
SQL> 

E no TNSNAMES tenho a seguintes configurações:

CPSY_APP-TCP.world = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = tcp.world) (PROTOCOL = TCP) (Host = 192.107.14.55) (Port = 1521) ) (ADDRESS = (COMMUNITY = tcp.world) (PROTOCOL = TCP) (Host = 192.107.14.55) (Port = 1526) ) ) (CONNECT_DATA = (SID = ORCL) ) )

:arrow: Tem alguma outra forma de conectar no oracle que não seja essa nem via odbc, já que meu sevidor Web vai rodar em Linux, não vai dar pra usar o odbc…

Valeu galera… um abraço para todos… :wink:

Via OCI?

Não sei se dar pra usar com JDBC!

Olá,

Seu codigo inicial

[code]public static void main(String args[]) {
try {
Class.forName(“oracle.jdbc.driver.OracleDriver”);

     Connection conn =  DriverManager.getConnection ("jdbc:oracle:thin:@192.107.14.55:1521:ORCL", "javaApp", "javaapp"); 

     // Prepare a statement to cleanup the emp table 
     Statement stmt = conn.createStatement (); 
     ResultSet rs = stmt.executeQuery("select * from usuario"); 
      
     while (rs.next()) { 
        System.out.println(rs.getString("idUsuario")); 
        System.out.println(rs.getString("nome")+"/n"); 
     } 
     conn.close();          
  } 
  catch (Exception e) { 
     e.printStackTrace(); 
  } 

}
}
[/code]

Note que vc ta usando ORCL na URL o banco, mas como vc posta ali em cima do teu arquivo de TNS e nele não consta nenhum TNS como ORCL ta ai o erro.
Fiquei em duvida agora quanto ao nome do teu TNS no teu arquivo conforme tu postou ele se chama CPSY_APP-TCP, mas quando tu testou pelo comando TNSPing tu suou ORANW80.

Vou ir pelo que esta no teu arquivo de TNS intaum tente rodar o comando abaixo. Se não funcionar troque CPSY_APP-TCP na URL por ORANW80.

[code]public static void main(String args[]) {
try {
Class.forName(“oracle.jdbc.driver.OracleDriver”);

     Connection conn =  DriverManager.getConnection ("jdbc:oracle:thin:@192.107.14.55:1521:CPSY_APP-TCP", "javaApp", "javaapp"); 

     // Prepare a statement to cleanup the emp table 
     Statement stmt = conn.createStatement (); 
     ResultSet rs = stmt.executeQuery("select * from usuario"); 
      
     while (rs.next()) { 
        System.out.println(rs.getString("idUsuario")); 
        System.out.println(rs.getString("nome")+"/n"); 
     } 
     conn.close();          
  } 
  catch (Exception e) { 
     e.printStackTrace(); 
  } 

}
}
[/code]

:smiley:

[quote=“fabgp2001”]… Note que vc ta usando ORCL na URL o banco, mas como vc posta ali em cima do teu arquivo de TNS e nele não consta nenhum TNS como ORCL ta ai o erro.
Fiquei em duvida agora quanto ao nome do teu TNS no teu arquivo conforme tu postou ele se chama CPSY_APP-TCP, mas quando tu testou pelo comando TNSPing tu suou ORANW80.

Vou ir pelo que esta no teu arquivo de TNS intaum tente rodar o comando abaixo. Se não funcionar troque CPSY_APP-TCP na URL por ORANW80. :smiley: …[/quote]

Não conectou nem com o CPSY_APP-TCP nem ORANW80. O que eu achei estranho é que pelo que vi a string é: jdbc:oracle:thin:@<host>:<porta>:<sid>
Sendo que o sid, não é a string de conexão. Creio que esta string seria usada na conexão OCI.

Mesmo assim, valeu.
Um grande abraço… :wink:

Me diz uma coisa…não conectou deu o mesmo erro?

Qual versão do teu banco e qual o arquivo .jar que tu tem ai?

[]'s

Não, quando eu tenho usar as strings de conexão o erro é o seguinte

java.sql.SQLException: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=134234112)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4)))) at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:407) at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:152) at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:214) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:193) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171) at br.com.computeasy.exemplos.OracleConn.main(OracleConn.java:22)

Quando eu conecto com o SQL Plus, tenho a seguinte mensagem:

Oracle8 Release 8.0.4.2.0 - Production (5 user, NetWare Bundle) PL/SQL Release 8.0.4.2.0 - Production

O negócio aki tá um mistério, nunca ralei tanto para conectar com um banco de dados como to ralando com o oracle. O pior é que em casa sempre funcionou sem problemas… :x :x :x

já usei:
classes12.zip
classes111.zip
classes102.zip

Sinceramente não sei mais o que fazer… :cry:

Valeu a força…
Um abraço…

Alguém por acaso sabe em que diretório fica o arquivo ocijdbc8.dll
Para fazer a conexão via OCI8.
Já tentei deixar nos seguintes diretórios:
ORA_HOME\bin
JAVA_HOME\bin
JAVA_HOME\lib
SYSTEMROOT
SYSTEMROOT\System32
TOMCAT_HOME\commomlib
ECLIPSE_HOME\

Valeu galera…
Um abraço! :wink:

dll é coisa de windows :smiley: joga no C:\WINNT\system32

Esse ultimo erro seu eu ja peguei tb… .ainda nao sei pq, mas trocando de maquina funcionou…

Abraços,

Olá,

Sinceramente acho que pode ser a versão do teu banco o problema. Esses drives que vc citou ai são para a versão 8i so alterando o JDK usado.

Vou dar uma olhada no meta link da oracle pra ver se tem algo a respeito disso.

[]'s

Ow, é o SID que ta errado…

Vai no TNSNAMES.ORA e pega o service_name que ta no ar pra vc.
E coloca no SID.

Se realmente não for o SID o problema, isso tem cara de ser treta de driver incompativel com a versão do BD.

Pelo menos no meu antigo trampo volta e meia dava esse mesmo erro, e era o bendito driver jdbc.

Bom como eu disse antes acho que versão de DB sendo que pelo que o colega informou o banco é um 8.0.4
Sobre o sid ele tentou com ORCL que é a instancia que esta ativa.

Pesquisei no meta link da Oracle e la diz que pode ser que o listener não esteje ativo ou esteje com IP diferente do sid. Vc poderia dar uma olhada nisso.

:arrow:

Para poder entregar o projeto na data, estarei usando em desenvolvimento o driver ODBC, quando eu subir no Server de produção vou ter que me virar.
O problema aki é que o Banco foi instalado pelo pessoal de rede e não tem ninguém que tenha um conhecimento profundo de Oracle. Até hoje eu só desenvolvi, nunca tinha me preocupado com o negócio da administração do banco… :frowning:

Pessoal, por enquanto valeu. Se alguém por ai tiver qualquer coisa, posta ai!

Vou ver o que consigo fazer via ODBC…

Valeu a força galera… :wink: