Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zrobić Oracle TNSPING z java?

TNSPING weryfikuje tylko połączenie sieciowe z procesem Listener, nie musisz podawać nazwy użytkownika i hasła.

Jak mówi @KonstantinV.Salikhov, możesz zakodować narzędzie takie jak następujące, które zweryfikuje:

.- Połączenie sieciowe z procesem nasłuchującym (jeśli listener jest UP lub nie tak jak zrobiłby to TNSPING)
.- Usługa bazy danych jest UP lub nie (ponieważ TNSPING identyfikuje nazwę usługi bazy danych).

Narzędzie nie użyje nazwy użytkownika/hasła, ponieważ potrzebujemy tylko zdarzenia niepowodzenia logowania, aby sprawdzić, czy baza danych jest uruchomiona i działa.

KOD JAVA:

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");
            }
        }
        finally {
            try {
                if ( pconnection != null ) {
                    pconnection .close();
                }
            }
            catch(Exception e) {
                e.printStackTrace();
            }
        }
    }
}

Możesz użyć własnego pliku tnsnames.ora w innym katalogu, aby go przetestować, na przykład w katalogu "/home/oracle/2":

[[email protected] 2]$ cat /home/oracle/2/tnsnames.ora

orcldb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ora12c.node.com)(PORT = 15300))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = db02.node.com)
      (INSTANCE_NAME = db02)
    )
  )

A potem wywołujesz to w ten sposób:

export JAVA_HOME=/opt/java/jdk1.7.0_71
export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=/home/oracle/2/ojdbc7.jar:.

java -Doracle.net.tns_admin=/home/oracle/2 ThinTnsnames orcldb

Możliwe wyjścia to:

Connection string = jdbc:oracle:thin:@orcldb
Error Code: 1017
Listener is UP and database is UP

Connection string = jdbc:oracle:thin:@orcldb
Error Code: 12514
Listener is UP but database is DOWN

Connection string = jdbc:oracle:thin:@orcldb
Error Code: 17002
Listener is DOWN

Możesz sprawdzić, czy żadna nazwa użytkownika nie jest używana podczas połączenia, wysyłając zapytanie o widok dba_audit_trail w następujący sposób:

select username,action_name,returncode from dba_audit_trail
where action_name like 'LOG%' ;

USERNAME             ACTION_NAME                  RETURNCODE
-------------------- ---------------------------- ----------
                     LOGON                              1017



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-29902:błąd podczas wykonywania procedury ODCIIndexStart() ORA-20000:błąd tekstu Oracle:DRG-50901:błąd składni parsera zapytania tekstowego w wierszu 1, kolumnie 19

  2. Oracle SQL — sumowanie i grupowanie danych według tygodnia

  3. Jak utworzyć łącze DB między dwiema instancjami Oracle?

  4. Nieprawidłowy identyfikator w podwójnie zagnieżdżonym zapytaniu z ORDER BY i ROWNUM

  5. Odkryj typy pakietów PL/SQL, korzystając z widoków słownika Oracle