Pular para o conteúdo
  • Este tópico contém 6 respostas, 2 vozes e foi atualizado pela última vez 7 anos, 1 mês atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #108895
    Avatar de airoospairoosp
    Participante

      Boa tarde,

      Pesquisando na internet uma alternativa para testar a conexão de rede sem usar o tnsping. Encontrei o código java abaixo, mas mesmo depois de gerar o arquivo .class, não consegui executar.

      import java.sql.*;
      import oracle.jdbc.pool.*;

      public class ThinTnsnames {

      static String sql = null;

      public static void main(String[] args) {
      String entry_name = args [0];
      test (entry_name);
      }

      public static void test (String entry_name) {
      Connection pconnection = null;
      try {
      String l_url = “jdbc:oracle:thin:@” + entry_name;
      System.out.println( “Connection string = ” + l_url );

      OracleDataSource ods = new OracleDataSource();
      ods.setURL(l_url);
      pconnection = ods.getConnection ();
      }
      catch(SQLException e) {
      int errorCode = e.getErrorCode() ;
      System.err.println(“Error Code: ” + errorCode) ;
      if ( errorCode == 12514 ) {
      System.err.println(“Listener is UP but database is DOWN”);
      }
      if ( errorCode == 17002 ) {
      System.err.println(“Listener is DOWN”);
      }
      if ( errorCode == 1017 ) {
      System.err.println(“Listener is UP and database is UP”);
      }
      // e.printStackTrace();
      }
      finally {
      try {
      if (pconnection != null )pconnection .close();
      }
      catch(Exception e) {
      e.printStackTrace();
      }
      }
      }

      }

      Ao executar no prompt de comando, aparece a mensagem que a classe ThinTnsnames não foi encontrada.

      Neste link https://stackoverflow.com/questions/30658542/how-to-do-oracle-tnsping-with-java tem o código da classe e exemplo de execução, só que não funcionou.

      Alguém já viu este código?

      Obrigado.

      Airton

      #108897
      Avatar photoJosé Laurindo Chiappa
      Moderador

        Blz ? Então, pondo os pingos nos Is : primeiro de tudo, OBVIAMENTE creio que vc sabe que o tnsping serve ** Apenas ** e ** Tão Somente ** para testar a conexão de rede até o Listener : até por não aceitar ome e senha de usuário, o TNSPING ** não faz ** uma conexão ao database, sim sim ?? Para demonstrar isso Claramente, um exemplo : tenho o database em si parado, starto o Listener :

        C:Usersjlchi_000>lsnrctl status

        LSNRCTL for 64-bit Windows: Version 11.2.0.2.0 – Production on 07-AGO-2017 09:26:16

        Copyright (c) 1991, 2014, Oracle. All rights reserved.

        Estabelecendo conexão com (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))

        STATUS do LISTENER

        Apelido LISTENER
        Versão TNSLSNR for 64-bit Windows: Version 11.2.0.2.0 – Production
        Data Inicial 07-AGO-2017 09:26:09
        Funcionamento 0 dias 0 hr. 0 min. 7 seg
        Nível de Análise off
        Segurança ON: Local OS Authentication
        SNMP OFF
        Serviço Default XE
        Arq. Parâm. Listn. C:oraclexeapporacleproduct11.2.0servernetworkadminlistener.ora
        Arq. Log Listener C:oraclexeapporaclediagtnslsnrDell15Rselisteneralertlog.xml
        Resumo de Atendimento…
        (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=.pipeEXTPROC1ipc)))
        (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Dell15Rse)(PORT=1521)))
        Resumo de Serviços…
        O serviço “CLRExtProc” tem 1 instância(s).
        Instância “CLRExtProc”, status UNKNOWN, tem 1 handler(s) para este serviço…
        O serviço “PLSExtProc” tem 1 instância(s).
        Instância “PLSExtProc”, status UNKNOWN, tem 1 handler(s) para este serviço…
        O comando foi executado com êxito

        ==> Faço o TNSPING , obtenho SUCESSO porque o Listener tá ativo e recebendo pacotes de rede :

        C:Usersjlchi_000>tnsping xe

        TNS Ping Utility for 64-bit Windows: Version 11.2.0.2.0 – Production on 07-AGO-2017 09:26:23

        Copyright (c) 1997, 2014, Oracle. All rights reserved.

        Arquivos de parâmetros usados:
        C:oraclexeapporacleproduct11.2.0servernetworkadminsqlnet.ora

        Usado o adaptador TNSNAMES para resolver o apelido
        Tentativa de contatar (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = Dell15Rse)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
        OK (10 ms)

        C:Usersjlchi_000>

        ===> Porém, ao tentar efetuar uma COnexão ao banco que está parado (eu subi Só o Listener!!) recebo erro, óbvio :

        C:Usersjlchi_000>sqlplus system/oracle@xe

        SQL*Plus: Release 11.2.0.2.0 Production on Seg Ago 7 09:27:04 2017

        Copyright (c) 1982, 2014, Oracle. All rights reserved.

        ERROR:
        ORA-12514: TNS:listener não tem conhecimento sobre o serviço solicitado
        atualmente no descritor de conexão

        Informe o nome do usuário:
        C:Usersjlchi_000>

        ==> No caso o serviço Windows desse database tá parado :

        C:Usersjlchi_000>sc query “OracleServiceXE”

        NOME_DO_SERVIÇO: OracleServiceXE
        TIPO : 10 WIN32_OWN_PROCESS
        ESTADO : 1 STOPPED
        CÓDIGO_DE_SAÍDA_DO_WIN32 : 0 (0x0)
        CÓDIGO_DE_SAÍDA_DO_SERVIÇO : 0 (0x0)
        PONTO_DE_VERIFICAÇÃO : 0x0
        AGUARDAR_DICA : 0x0

        C:Usersjlchi_000>

        ==> por isso a conexão não Sucedeu, mas ENTENDA que são 3 coisas separadas : para alguém conseguir conectar num database Oracle, o LISTENER tem que estar ativo E o serviço Windows tem que estar ativo E o database tem que estar startado e com conexões permitidas…. A ÚNICA maneira Confiável de vc testar se todas as 3 condições estão OK é vc tentar uma conexão, okdoc ???
        E fazer uma conexão é algo que pode ser feito com um programa externo criado por vc (há TROCENTAS linguagens de programação que permitem conexão ao database, indo desde .NET até C, de PHP a perl, de Delphi a Cobol, trocentas mesmo!!) que receba como argumentos (ou tenha hard-coded!!) usuário e senha MAS PODE SER feito também pelo próprio sqlplus que vem junto com o client Oracle : ele é o programa PADRÃO PRA ISSO!!!
        Sendo assim, DE FORMA ALGUMA é uma EXIGÊNCIA que vc saiba programar numa linguagem qualquer e escreva um programa seu, o TESTE DE CONEXÃO pode SIM SIM ser feito com sqlplus !!! Normalmente para permitir automação vc vai encapsular a chamada ao sqlplus num shell script / .BAT script…. Um exemplo :

        ==> eis meu exemplo de .BAT testando conexão via sqlplus :

        C:Usersjlchi_000>type test_xe.bat
        @echo off
        (
        echo system/oracle@xe
        echo whenever sqlerror exit failure
        echo select ‘XE disponível!!’ from dual;
        ) | sqlplus -s

        echo %ERRORLEVEL%
        C:Usersjlchi_000>

        ==> ok : executo o .BAT com o meu banco XE startado E com conexões permitidas E com listener Ativo E com banco registrado no Listener :

        C:Usersjlchi_000>test_xe

        ‘XEDISPONÍVEL!!’

        XE disponível!!

        0

        ==> aí paro o banco, recebo como resultado :

        C:Usersjlchi_000>test_xe
        ERROR:
        ORA-12560: TNS:erro de adaptador de protocolo

        SP2-0306: Opção inválida.
        Uso: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
        em que ::= [/][@]
        ::= [][/][@]
        SP2-0306: Opção inválida.
        Uso: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
        em que ::= [/][@]
        ::= [][/][@]
        SP2-0157: Conexão ao ORACLE impossível após 3 tentativas, saindo SQL*Plus
        1

        C:Usersjlchi_000>

        Blz ????? É um .BAT script bê-a-bá mesmo, bem simples, mas que eventualmente serve de ponto de partida pra vc….

        ===>>> NÃO É OBRIGATÓRIO, mas se vc quiser programar e escrever um programinha seu, ele PODE SER SIM feito em Java…. Respondendo então a sua pergunta sobre o código Java que vc mostra, eu NUNCA O VI ANTES mas numa olhada por cima ele parece estar OK : CONFIRME que vc tem o JDBC for Oracle ** da Oracle Mesmo ** instalado (esse negócio de “import oracle.jdbc.pool.*;” que ele faz é coisa de jdbc ** RECENTE **, posterior ao 10g iirc!!), REVEJA teus settings de CLASSPATH e ** CONFIRME ** variáveis de ambiente, que ele deve funcionar OK pelo que vejo…. Mas se teus skills de Java não são assim tããão afiados, RELEMBRO NOVAMENTE que vc Não É Obrigado a programar pra fazer teste de conexão E QUE se não manjas de Java tem Trocentas outras linguagens possíveis, use uma que conheça melhor….

        []s

        Chiappa

        #108898
        Avatar de airoospairoosp
        Participante

          Chiappa,

          É possível postar aqui no fórum um print da tela?

          Obrigado.

          Airton

          #108899
          Avatar photoJosé Laurindo Chiappa
          Moderador

            Que eu saiba não, nunca vi nenhuma ferramenta pra isso aqui neste fórum, então acho que não dá : assim, quando precisei, subi a imagem pra um dos muitos serviços de compartilhamento gratuito (como http://picpaste.com/ , http://tinypic.com/ , http://imgur.com/ ou https://www.mediafire.com/#myfiles , o Google Drive, entre n outros) e depois informo a url para acesso numa nova msg…

            []s

            Chiappa

            #108901
            Avatar de airoospairoosp
            Participante

              Chiappa,

              Segue em anexo arquivo.

              Na imagem acima, é possível fazer a execução do tnsping, mas não retorna nada e isso ficou por horas.

              Attachments:
              #108902
              Avatar photoJosé Laurindo Chiappa
              Moderador

                Então : o que o TNSPING faz é abrir um socket de rede para o servidor indicado na coluna HOST da entrada TNSNAMES em uso E enviar um pacote de rede mínimo (que não contém dados de conexão – nem usuário nem senha, nada assim : tem só um NULL nele, digamos assim) para a porta indicada, que é a porta onde o listener está ‘escutando’ – NADA MAIS, NADA MENOS…. Sendo assim, um cenário onde pra abrir um socket simplório e enviar pela rede um pacote de POUCOS BYTES tá demorando, imho COMPROVA que vc tem algum problema de rede BEM SÉRIO aí, o qual vc TEM que debugar junto com teu admin de rede…. ISSO É FATO, sim sim ??

                SEM desmerecer esse trabalho de Investigação na camada de Rede (ie, NICs, protocolo TCP/IP, DNS servers, rotas de rede, etc) , que VAI SIM ser Tremendamente Necessário e só vc pode fazer (pois é algo LOCAL aí no seu ambiente), há Além disso algumas obs a mais que devo fazer :

                a. faça um teste com ** outro ** programa de rede que seja capaz de enviar um pacote mínimo de rede pra um determinado host E numa determinada porta : uma opção é o client de telnet nativo do Windows…

                b. sorry, mas esse seu printscreen tá mostrando uma ** SALADA RUSSA ** de ambientes aí : veja, o cabeçalho do tnsping fala versão 9.2.0.1 , o sqlnet.ora sendo usado está em C:ORANTNET80 (esse diretório NET80 era tipicamente usado para softwares clients Oracle versão 8.0.x), o SERVICE_NAME como XE me parece indicar que o database é um XE, banco esse que existiu na versão 10g e 11g….
                OU SEJA, me parece que vc tem vários softwares client aí envolvidos, alguns deles EXTREMAMENTE ANTIGOS…. O busílis é que clients anteriores a 10g *** TINHAM ** e TEM SIM problemas de incompatibilidade CONHECIDOS com databases 11g, será que não pode ser Isso o seu problema ?? A idéia é ter um client ** AO MENOS ** de mesma versão que o banco, sim sim sim ???

                =====>>> Veja aí o meu exemplo :

                ==> tenho instalado na máquina várias versões de software client Oracle, como meu banco-destino é 11g vou setar as vars de ambiente pra apontarem pro meu client 11g :

                C:Usersjlchi_000>SET ORACLE_SID=O11GR2
                C:Usersjlchi_000>SET ORACLE_HOME=c:apporacleproduct11gr2dbhome
                C:Usersjlchi_000>SET PATH=%ORACLE_HOME%bin;%PATH%

                ==> faço o TNSPING apontando pro banco 11g destino :

                C:Usersjlchi_000>tnsping o11gr2vm

                TNS Ping Utility for 64-bit Windows: Version 11.2.0.3.0 – Production on 07-AGO-2017 17:39:38

                Copyright (c) 1997, 2011, Oracle. All rights reserved.

                Arquivos de parâmetros usados:
                c:apporacleproduct11gr2dbhomenetworkadminsqlnet.ora

                Usado o adaptador TNSNAMES para resolver o apelido
                Tentativa de contatar (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.102)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))
                OK (40 ms)

                ==> faço uma *** CONEXÃO *** com o sqlplus que veio no client 11g :

                C:Usersjlchi_000>sqlplus system/oracle@o11gr2vm

                SQL*Plus: Release 11.2.0.3.0 Production on Seg Ago 7 17:40:17 2017

                Copyright (c) 1982, 2011, Oracle. All rights reserved.

                Conectado a:
                Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 – Production
                With the Partitioning, OLAP, Data Mining and Real Application Testing options

                SQL> exit
                Desconectado de Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 – Production
                With the Partitioning, OLAP, Data Mining and Real Application Testing options

                ===> EIS o exemplo de um outro programa (no caso o client de TELNET oficial do Windows, que não vem instalado por default mas instalei) :

                C:Usersjlchi_000>tnsping 192.168.56.102 1521

                ==> vc não vê aqui mas o resultado normal é uma tela preta, que só sai com CTRL+C …. QUALQUER ERRO de rede impedindo o socket de ser aberto (seja FIREWALL ou Antivírus proibindo a conexão no host/porta em questão, ou seja o que for) resulta IMEDIATAMENTE numa msg de erro ao invés da tela preta….
                Para mostrar isso , agora vou passar uma porta errada pro IP correto :

                C:Usersjlchi_000>tnsping 192.168.56.102 1529

                TNS Ping Utility for 64-bit Windows: Version 11.2.0.3.0 – Production on 07-AGO-2017 17:41:17

                Copyright (c) 1997, 2011, Oracle. All rights reserved.

                Arquivos de parâmetros usados:
                c:apporacleproduct11gr2dbhomenetworkadminsqlnet.ora

                TNS-03505: Falha ao determinar o nome

                C:Usersjlchi_000>telnet 192.168.56.102 1529
                Conectando-se a 192.168.56.102…Não foi possível abrir conexão com host, na porta 1529: conexão falhou

                C:Usersjlchi_000>

                ===>> OKDOC ??? Faz esse teste com o client de telnet de prompt de comando e veja o que acontece…

                ==> O que me causa espécie porém é que no TNSPING vc não recebe a msg de erro mas sim fica PENDENTE a tentativa de abertura de socket que o TNSPING faz…. Pra mim, como eu disse, isso IMPLICA que é alguma coisa mais séria, tipo servidor DNS demorando demais pra traduzir o hostname, roteador te dando uma rota de rede absurdamente longa, conflito de IPs entre o “servidor” Oracle de destino (que sendo XE o banco eu ** imagino ** que deve ser um PC de mesa qualquer!!) e algum outro hardware da tua rede… TODOS esses pontos quem soluciona é teu sysadmin de rede, não posso fazer NADA vezes NADA daqui…

                []s

                Chiappa

                OBS :

                ALÉM de tudo o que eu disse (tudo OBRIGATÓRIO, imho!!), um Outro teste que vc pode fazer é tentar conectar nesse tal database ‘XE’ (TANTO a partir da sua máquina QUANTO a partir de uma outra máquina qualquer, desde que esteja na mesma rede) ** SEM ** o software client Oracle – diversos programas cliente (principalmente os feitos em Java e que aceitem driver JDBC type-4) permitem que vc faça isso, aí vc CONFIRMA se realmente é um problema de rede OU se essa “salada russa” de clients Oracle que vc tem aí tá te dando problemas… Entre os trocentos programas clientes freewares que permitem conexão a um banco sem que vc tenha o software client Oracle instalado, indico o “Oracle SQL Developer” em http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html (meu preferido para esse tipo de teste, é o que uso na minha máquina), o MyORA em http://www.myorasql.com/ , o jisql em https://bitbucket.org/stdunbar/jisql, o dbeaver em http://dbeaver.jkiss.org/ , o SQuirrelSQL em http://www.squirrelsql.org/ …. Todos esses caras só exigem que vc tenha um JRE (Java Runtime) instalado , não demandam por JDK… E ao menos no caso do Oracle SQL Developer sei que ele já vem com o driver JDBC embutido, o que é uma coisa a menos….

                #108903
                Avatar photoJosé Laurindo Chiappa
                Moderador

                  Opa :adicionalmente, eu tava pesquisando outro assunto no metalink/My Oracle Support e encontrei na nota “Can JDBC Thin Driver Connect Using Tns Entry in tnsnames.ora File” (Doc ID 333686.1) um fonte ** extremamente ** parecido com esse que vc cita (até o nome é o mesmo), deve ser ele então que foi usado…

                  Como eu expliquei/demonstrei *** Não é Obrigatório *** vc escrever coisa alguma, mas apenas como Demonstração eu copiei/colei o fonte do metalink/MyOracleSupport, Compilei e executei o tal programa, pra mim foi normal, então ** OU ** vc não setou as variáveis de ambiente corretas (** principalmente ** a CLASSPATH, é típica essa msg de “classe nomedoprogramafonte não encontrada quando neguim ESQUECE de colocar o diretório atual no classpath, mas TAMBÉM a variável PATH apontando pro java.exe E pro javac.exe), ** OU ** vc não informou o local onde o TNSNAMES.ORA tá gravado (acho que não tinha ficado muito Claro na página de internet que o argumento que vc deve passar pro java -D é justamente o path completo onde tá o TNSNAMES.ORA), ** OU ** vc tá tentando usar um driver Oracle jdbc muito antigo, que não aceita esse método oracle.jdbc.pool.* que o fonte tenta usar….

                  C:Usersjlchi_000>tnsping orcl12c

                  TNS Ping Utility for 64-bit Windows: Version 12.2.0.1.0 – Production on 07-AGO-2017 21:11:32

                  Copyright (c) 1997, 2016, Oracle. All rights reserved.

                  Arquivos de parâmetros usados:
                  C:apporacle12cR2product12.2.0dbhomenetworkadminsqlnet.ora

                  Usado o adaptador TNSNAMES para resolver o apelido
                  Tentativa de contatar (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = Dell15Rse)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL12c)))
                  OK (0 ms)

                  C:Usersjlchi_000>

                  ===> CONFIRMANDO que o TNSNAMES tá aqui E com o conteúdo correto :

                  C:Usersjlchi_000>echo %ORACLE_HOME%
                  C:apporacle12cR2product12.2.0dbhome

                  C:Usersjlchi_000>dir C:apporacle12cR2product12.2.0dbhomenetworkadmintnsnames.ora
                  O volume na unidade C não tem nome.
                  O Número de Série do Volume é 340C-E794

                  Pasta de C:apporacle12cR2product12.2.0dbhomenetworkadmin

                  27/07/2017 11:34 1.109 tnsnames.ora
                  1 arquivo(s) 1.109 bytes
                  0 pasta(s) 310.754.426.880 bytes disponíveis

                  C:Usersjlchi_000>type C:apporacle12cR2product12.2.0dbhomenetworkadmintnsnames.ora
                  # tnsnames.ora Network Configuration File: C:apporacle12cR2product12.2.0dbhomenetworkadmintnsnames.ora
                  # Generated by Oracle configuration tools.

                  XE =
                  (DESCRIPTION =
                  (ADDRESS_LIST =
                  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
                  )
                  (CONNECT_DATA =
                  (SERVICE_NAME = XE)
                  )
                  )

                  ORCL12C =
                  (DESCRIPTION =
                  (ADDRESS = (PROTOCOL = TCP)(HOST = Dell15Rse)(PORT = 1522))
                  (CONNECT_DATA =
                  (SERVER = DEDICATED)
                  (SERVICE_NAME = ORCL12c)
                  )
                  )

                  C:Usersjlchi_000>

                  ==> Ó as versões de Java que tenho, recentes :

                  C:Usersjlchi_000>java -version
                  java version “1.8.0_144”
                  Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
                  Java HotSpot(TM) Client VM (build 25.144-b01, mixed mode, sharing)

                  C:Usersjlchi_000>javac -version
                  javac 1.8.0_112

                  ==> E quanto à versão de driver jdbc Oracle, Recente também , veja pelo CLASSPATH :

                  C:Usersjlchi_000>set CLASSPATH=C:apporacle12cR2product12.2.0dbhomejdbclibojdbc8.jar;.

                  ==> como eu disse antes, o PONTO no fim do CLASSPATH é *** FUNDAMENTAL **, para o Java saber que é no diretório corrente (é o que o ponto representa) que deve ser procurado o .class a ser executado…. Eis o fonte que copiei e colei da nota metalink :

                  C:Usersjlchi_000>type ThinTnsnames.java
                  import java.sql.*;
                  import oracle.jdbc.pool.*;

                  public class ThinTnsnames {
                  // private static OracleConnection connection = null;
                  static String sql = null;

                  public static void main(String[] args) {
                  String entry_name = args [0];
                  String userId = args [1];
                  String password = args [2];
                  test (entry_name, userId, password);
                  }

                  public static void test (String entry_name, String userId, String password) {
                  Connection pconnection = null;
                  try {
                  String l_url = “jdbc:oracle:thin:@” + entry_name;
                  System.out.println( ” Connection string = ” + l_url );

                  OracleDataSource ods = new OracleDataSource();
                  ods.setUser(userId);
                  ods.setPassword(password);
                  ods.setURL(l_url);
                  pconnection = ods.getConnection ();
                  version (pconnection );
                  }
                  catch(SQLException e) {
                  e.printStackTrace();
                  }
                  finally {
                  try {
                  if (pconnection != null )pconnection .close();
                  }
                  catch(Exception e) {
                  e.printStackTrace();
                  }
                  }
                  }

                  public static void version (Connection pconnection) {
                  try {
                  DatabaseMetaData dmd = pconnection.getMetaData();
                  System.out.println(“DriverVersion: [“+dmd.getDriverVersion()+”]”);
                  System.out.println(“DriverMajorVersion: [“+dmd.getDriverMajorVersion()+”]”);
                  System.out.println(“DriverMinorVersion: [“+dmd.getDriverMinorVersion()+”]”);
                  System.out.println(“DriverName: [“+dmd.getDriverName()+”]”);
                  System.out.println(“URL: [“+dmd.getURL()+”]”);
                  System.out.println(“UserName: [“+dmd.getUserName()+”]”);
                  System.out.println(dmd.getDatabaseProductName() );
                  System.out.println(dmd.getDatabaseProductVersion() );

                  String ver;
                  ver = System.getProperty(“java.version”);
                  System.out.println(“The JDK version is ” + ver);
                  }
                  catch(SQLException e) {
                  e.printStackTrace();
                  }

                  }
                  }

                  ==> Compilo o caretinha :

                  C:Usersjlchi_000>javac ThinTnsnames.java

                  ==> Sucesso, veja que gerou legal :

                  C:Usersjlchi_000>dir Thin*
                  O volume na unidade C não tem nome.
                  O Número de Série do Volume é 340C-E794

                  Pasta de C:Usersjlchi_000

                  07/08/2017 20:57 2.615 ThinTnsnames.class
                  07/08/2017 20:54 1.948 ThinTnsnames.java
                  2 arquivo(s) 4.563 bytes
                  0 pasta(s) 310.754.324.480 bytes disponíveis

                  ==>> É só executar, PASSANDO os argumentos corretos na ordem correta :

                  C:Usersjlchi_000>java -Doracle.net.tns_admin=C:apporacle12cR2product12.2.0dbhomenetworkadmin ThinTnsnames orcl12c system oracle

                  Connection string = jdbc:oracle:thin:@orcl12c
                  DriverVersion: [12.2.0.1.0]
                  DriverMajorVersion: [12]
                  DriverMinorVersion: [2]
                  DriverName: [Oracle JDBC driver]
                  URL: [jdbc:oracle:thin:@orcl12c]
                  UserName: [SYSTEM]
                  Oracle
                  Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 – 64bit Production
                  The JDK version is 1.8.0_144

                  C:Usersjlchi_000>

                  ===> okdoc ?? Agora vou informar uma host string (XE) que está no TNSNAMES.ORA em questão da minha máquina MAS cujo database neste momento tá inacessível :

                  C:Usersjlchi_000>tnsping xe

                  TNS Ping Utility for 64-bit Windows: Version 12.2.0.1.0 – Production on 07-AGO-2017 21:30:03

                  Copyright (c) 1997, 2016, Oracle. All rights reserved.

                  Arquivos de parâmetros usados:
                  C:apporacle12cR2product12.2.0dbhomenetworkadminsqlnet.ora

                  Usado o adaptador TNSNAMES para resolver o apelido
                  Tentativa de contatar (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = XE)))
                  TNS-12541: TNS:não há listener

                  C:Usersjlchi_000>java -Doracle.net.tns_admin=C:apporacle12cR2product12.2.0dbhomenetworkadmin ThinTnsnames xe system oracle
                  Connection string = jdbc:oracle:thin:@xe
                  java.sql.SQLRecoverableException: Erro de ES: The Network Adapter could not establish the connection
                  at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:774)
                  at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:688)
                  at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:39)
                  at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:691)
                  at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:384)
                  at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:273)
                  at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:198)
                  at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:176)
                  at ThinTnsnames.test(ThinTnsnames.java:25)
                  at ThinTnsnames.main(ThinTnsnames.java:12)
                  Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection
                  at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:523)
                  at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:521)
                  at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:660)
                  at oracle.net.ns.NSProtocol.connect(NSProtocol.java:286)
                  at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1438)
                  at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:518)
                  … 9 more
                  Caused by: java.io.IOException: Connection refused: connect, socket connect lapse 1008 ms. localhost/0:0:0:0:0:0:0:1 1521 0 2 true
                  at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:209)
                  at oracle.net.nt.ConnOption.connect(ConnOption.java:161)
                  at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:470)
                  … 14 more
                  Caused by: java.net.ConnectException: Connection refused: connect
                  at sun.nio.ch.Net.connect0(Native Method)
                  at sun.nio.ch.Net.connect(Unknown Source)
                  at sun.nio.ch.Net.connect(Unknown Source)
                  at sun.nio.ch.SocketChannelImpl.connect(Unknown Source)
                  at java.nio.channels.SocketChannel.open(Unknown Source)
                  at oracle.net.nt.TimeoutSocketChannel.(TimeoutSocketChannel.java:81)
                  at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:169)
                  … 16 more

                  C:Usersjlchi_000>

                  []s

                  Chiappa

                Visualizando 7 posts - 1 até 7 (de 7 do total)
                • Você deve fazer login para responder a este tópico.
                plugins premium WordPress