Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да направя oracle TNSPING с java?

TNSPING валидира само мрежовата връзка към процеса на слушател, не е необходимо да подавате потребителско име и парола.

Както казва @KonstantinV.Salikhov, можете да кодирате инструмент като следния, той ще провери:

.- Мрежова връзка към процеса на слушател (ако слушателят е UP или не, както би направил TNSPING)
.- Услугата за база данни е UP или не (тъй като TNSPING ще идентифицира името на услугата на базата данни).

Инструментът няма да използва потребителско име/парола, тъй като се нуждаем само от събитието за неуспешно влизане, за да потвърдим, че базата данни е готова и работи.

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();
            }
        }
    }
}

Можете да използвате собствения си файл tnsnames.ora в друга директория, за да го тествате, например в директорията "/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)
    )
  )

И след това го извиквате по следния начин:

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

Възможните резултати са:

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

Можете да проверите дали по време на връзката не се използва потребителско име, като направите заявка за dba_audit_trail изглед, както следва:

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. Как мога да комбинирам няколко реда в списък, разделен със запетая в Oracle?

  2. как можем да групираме записите от 17:00 вчера до 17:00 днес до днешната дата

  3. Заявка на Oracle, използваща „харесване“ в колона с индексиран номер, лоша производителност

  4. Мога ли да създавам външни ключове в бази данни?

  5. Каскадна актуализация на Oracle